Paso 2: Programa de los gemelos
El siguiente ejemplo (que usamos en desafíos de Geocaching) utiliza el mismo código para ambos gemelos y cambiar solo una línea dependiendo de que Twin programamos (gracias Rion para esta codificación inteligente!).
F.D.R. Geo-proyecto gemelo multietapa GeoCache
Este es el código Final doble
Esto requiere un receptor de RF24L01 y un LCD paralelo en Nano
Suministra el usuario batería de 9 voltios
#include < LiquidCrystal.h >
#include < SPI.h >
#include < Mirf.h >
#include < MirfHardwareSpiDriver.h >
#include < nRF24L01.h >
LiquidCrystal lcd (2, 3, A0, A1, A2, A4);
#define pinUnused 0
#define NumDispositivo 1 / 1 o 2: lo único a cambiar entre dispositivos
#define device1Name "TwinOne"
#define device1Final "N 32 xx.xxx"
#define device1Alone "Rómulo espera"
#define device2Name "TwinTwo"
#define device2Final "84 W xx.xxx"
#define device2Alone "Remus de espera."
#define RF_DR_LOW 5
#define RF_PWR_LOW 1
#define RF_PWR_HIGH 2
#define cacheMessage "FDR TwinGeocache"
#define keyMessage "-> GOODLUCK <-"
#define successMessage "posición Final:"
int velocidad;
void setup() {}
Serial.Begin(9600);
pinMode (5, salida); Pin de V0 de LCD para control de brillo
analogWrite(5,120); 120 parece buena luminosidad debajo de 9 voltios
LCD.Begin(16,2);
LCD.Clear();
Delay(10);
Mirf.cePin = 9; pin de CE en Uno
Mirf.csnPin = 10; pin de CSN en Uno
Mirf.SPI = & MirfHardwareSpi;
Mirf.init();
¿Mirf.setraddr ((NumDispositivo == 1)? (byte*) device1Name: device2Name (byte *));
Mirf.setRADDR ((byte *) «serv1»);
¿Mirf.settaddr ((NumDispositivo == 1)? (byte*) device2Name: device1Name (byte *));
Mirf.setRADDR ((byte *) "clie1");
Mirf.payload = sizeof(rate);
Mirf.config();
randomSeed (analogRead (pinUnused));
displayMessage (cacheMessage, keyMessage);
retrasar (4000);
}
void displayMessage (const char * line1, line2 char * const)
{
LCD.Clear();
lcd.setCursor (0, 0);
LCD.Print (línea 1);
lcd.setCursor (0, 1);
LCD.Print (línea 2);
}
sendData vacío (void)
{
sin firmar largo ahora = millis();
Mirf.Send ((byte *) & ahora);
mientras (Mirf.isSending())
demora al azar (10);
}
bool readData (vacío)
{
bool dataFound = false;
mientras (Mirf.dataReady())
{
byte data[Mirf.payload];
Mirf.getData(data);
dataFound = true;
}
volver dataFound;
}
void loop() {}
sendData();
Si (readData() == true)
{
displayMessage (keyMessage, (NumDispositivo == 1)? device1Final: device2Final);
sin firmar largo ahora = millis();
mientras que (millis() < = (ahora + 1000))
sendData();
}
otra cosa
{
displayMessage (cacheMessage, (NumDispositivo == 1)? device1Alone: device2Alone);
sin firmar largo ahora = millis();
mientras que (millis() < = (ahora + 1000))
sendData();
}
}