tutugordillo / SED

Proyecto de la asignatura Sistemas Empotrados y Distribuidos realizado con dos placas Arduino Uno y una placa Discovery
0 stars 1 forks source link

Comunicando Arduino con Otra cosa #2

Closed miguelis closed 8 years ago

miguelis commented 8 years ago

https://www.arduino.cc/en/Tutorial/MasterReader

Tendremos que hacer algo similar a esto.

tutugordillo commented 8 years ago

esta bien, pero tenemos que buscar otra cosa, las comunicaciones con el I2C siempre las llevan a cabo a través de los mismos pines el 4 y 5 analogicos, que ademas son los que usa el bh1750.

Tenemos que mirar como se puede configurar para que reciba datos también por otros pines o como llevar a cabo ese tipo de comunicación. Supuestamente por el 1 y el 2 digitales también se podría llevar a cabo que son los que estan marcados como Rx y Tx pero hay que mirarlo bien

huig- commented 8 years ago

Aquí explica como hacer comunicación serie entre 2 arduinos

miguelis commented 8 years ago

Finalmente hemos conseguido comunicar dos arduinos.

En el código de este sender, hemos utilizado los pines 0 y 1, porque no estaba conectado al usb. Es decir, una vez que lo hemos cargado, lo hemos desenchufado y lo hemos conectado a través del puerto Vin al V5 del otro arduino.

//Sender Code
#include <SoftwareSerial.h>
SoftwareSerial serial1(0,1);
void setup() {
  while(!serial1){;}
  serial1.begin(9600);
}

void loop() {
  serial1.print("hola");
}

En el código del arduino receiver, como sí que está conectado al ordenador mediante el USB (para poder observar la salida) estaba conectado a los puertos 10 y 11 de Tx/Rx en lugar del 1 y 0.

#include <SoftwareSerial.h>
SoftwareSerial serial1(10,11);
char str[5];
void setup() {
  Serial.begin(9600);
  while (!serial1) {;}
  serial1.begin(9600);
}

void loop() {
  int i = 0;
  if (serial1.available()) {
    delay(100);
    while (serial1.available() > 0 && i < 5) {
        str[i++] = serial1.read();
    }
    str[i++] = '\0';
  }
  if (i > 0) {
    Serial.println(str);
  }
}

Para más información: https://www.arduino.cc/en/Reference/SoftwareSerial https://www.arduino.cc/en/Reference/Serial

huig- commented 8 years ago

Podría utilizarse esto https://github.com/adafruit/Adafruit_GPS. Incluye un timer para sincronizarse y leer cada cierto tiempo y no perder datos

huig- commented 8 years ago

in setup you can put:

OCR0A = 0xAF;
TIMSK0 |= _BV(OCIE0A);

then you add this function:

SIGNAL(TIMER0_COMPA_vect) {
  char c = Serial1.read();
    if (c) UDR0 = c;
}
huig- commented 8 years ago

Pruebas:

huig- commented 8 years ago

Parece ser que el problema era la funcion sprintf utilizando como argumento "%f", arduino no soporta esta opcion