Hola
Acabo de empezar un proyecto de envío de mensajes de texto de arduino a arduino con módulos RF433.
El transmisor envía una frase o números al receptor y éste lo muestra en una pantalla OLED.
Como van a haber varios receptores, cada uno tiene que recibir su frase y no las de los otros.
Como puedo hacer para que cada arduino obedezca solo la frase que va dirigida a él ???'
Con uno solo ya me funciona, pero si tengo varios, todos van a mostrar lo mismo...
Querría enviar con el transmisor, algo así:
Receptor 0001, muestra esta frase "Hola Mundo"
Receptor 0002, Muestra "Hola Pepe"
Receptor 0003, muestra "Este mensaje"
Receptor 0004, muestra "YOQUESé"
Así solo obedece el receptor que reciba una orden para él y los otros se mantienen como están.
Estos son los códigos que estoy utilizando:
Para el transmisor:
#include <VirtualWire.h>
const int dataPin = 12;
void setup()
{
vw_setup(2000);
vw_set_tx_pin(dataPin);
}
void loop()
{
String str;
char buf[VW_MAX_MESSAGE_LEN];
float dataFloat = 599.75; //Mensaje a enviar. Son nuemros con dos decimales hasta 999.99
str = "f" + String(dataFloat); // Convertir a string
str.toCharArray(buf,sizeof(buf)); // Convertir a char array
vw_send((uint8_t *)buf, strlen(buf)); // Enviar array
vw_wait_tx(); // Esperar envio
delay(2000);
}
Para los receptores:
#include <VirtualWire.h>
const int dataPin = 11;
#include <Wire.h> // libreria para bus I2C
#include <Adafruit_GFX.h> // libreria para pantallas graficas
#include <Adafruit_SSD1306.h> // libreria para controlador SSD1306
#include <Adafruit_I2CDevice.h>
#define ANCHO 128 // reemplaza ocurrencia de ANCHO por 128
#define ALTO 64 // reemplaza ocurrencia de ALTO por 64
#define OLED_RESET 4 // necesario por la libreria pero no usado
//Adafruit_SSD1306 oled(ANCHO, ALTO, &Wire, OLED_RESET); // crea objeto
void setup() {
Wire.begin(); // inicializa bus I2C
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C); // inicializa pantalla con direccion 0x3C
/////////////////////////
Serial.begin(9600);
vw_setup(2000);
vw_set_rx_pin(dataPin);
vw_rx_start();
}
void loop() {
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
// Recibir dato
if (vw_get_message((uint8_t *)buf,&buflen))
{
String dataString;
if((char)buf[0]=='i')
{
for (int i = 1; i < buflen; i++)
{
dataString.concat((char)buf[i]);
}
int dataInt = dataString.toInt(); // Convertir a int
Serial.print("Int: ");
Serial.println(dataInt);
}
else if((char)buf[0]=='f')
{
for (int i = 1; i < buflen; i++)
{
dataString.concat((char)buf[i]);
}
float dataFloat = dataString.toFloat(); // Convertir a float
//Serial.print("Float: ");
Serial.println(dataFloat);
oled.clearDisplay(); // limpia pantalla
oled.setTextColor(WHITE); // establece color al unico disponible (pantalla monocromo)
oled.setCursor(30, 0); // ubica cursor en inicio
oled.setTextSize(2); // establece tamano de texto en 2
oled.print("OFERTA"); // escribe en pantalla el texto
oled.setCursor (20,16); // ubica cursor en coordenas
oled.setTextSize(3);
oled.print(dataFloat); // escribe en pantalla el texto
oled.setCursor (30,42); // ubica cursor en coordenas
oled.setTextSize(2);
oled.print("Euros"); // escribe en pantalla el texto
oled.display(); // muestra en pantalla todo lo establecido anteriormente
}
}
}
Gracias
