Se me plantea el problema de comunicar un arduino nano con mi Rpi, he planteado I2C, USB o SPI y la cosa tira para el SPI ya que I2C lo uso para sensores y el USB me parece un poco "chapucero y provisional" para mantener una comunicación constante entre ambos.
Haciendo pruebas y leyendo he llegado a enviar datos de Rpi a arduino sin problema, la cosa esta en enviar de Arduino a RPi...
Codigo para arduino:
Code: Select all
#include <SPI.h>
byte buf [20];
volatile byte pos;
volatile boolean recibido;
byte pos1 = 90;
byte pos2 = 90;
byte data[] = {45, 34, 2, 12};
void setup() {
Serial.begin (9600);
pinMode(MISO, OUTPUT);//Configuramos el Miso como salida ya que el Master recibira por aqui.
SPCR |= _BV(SPE);//Activamos el modo Slave
pos = 0; // Posicion 0 de los bytes recibidos
recibido = false; //Inicializamos que no hemos recibido.
SPI.attachInterrupt();//Activamos la interrupcion del SPI
}
// Interrupcion SPI
ISR (SPI_STC_vect)
{
byte c = SPDR;
buf[pos] = c;
pos++;
recibido = true;
}
void loop() {
if (recibido)
{
for(int x = 0; x<1; x++){
if(buf[x]==0xFF){break;}
pos1 = buf[x];
pos2 = buf[x+1];
}
Serial.println ();
pos = 0;
recibido = false;
}
Serial.print(pos1);
Serial.println(pos2);
for (int i=0; i<4; i++) {
SPI.transfer(data[i]);
delay(10); // Send 8 bits
}
delay(1000);
}Code: Select all
import spidev
import time
Value = [2,45,255]
spi = spidev.SpiDev()
spi.open(0,0)
i = 0
while(True):
spi.xfer2(Value)
print Value
while(i<4):
x = spi.readbytes(1)
print x
i++
i =0
time.sleep(1)A ver si alguien entendido del tema me puede echar una mano, por estoy seguro que es algo simple q se me pasa por algo, pero estoy atascado y no veo la solución
Este codigo tal como esta me envía perfecto de Rpi a arduino pero de arduino a RPi la lectura no es continua, me explico: el print me va mostrando 0's y de tanto en tanto va mostrando los valores que envía el arduino (45, 34, 2, 12), siempre en orden pero no seguidos puede q reciba el 45, después un par de 0's el 34 otros tantos 0's el 2 y así todo el rato