Étape 2: Programmer les jumeaux
L’exemple ci-dessous (que nous utilisons dans Geocaching défis) utilise le même code pour les deux jumeaux et nous ne changer qu’une seule ligne selon laquelle Twin nous programmer (Rion je vous remercie pour ce codage intelligent!).
F.D.R. Geo-projet Twin multi-étape géocache
C’est le code Final Twin
Cela nécessite un récepteur RF24L01 & un LCD parallèle sur Nano
L’utilisateur fournit la pile de 9 volts
#include < LiquidCrystal.h >
#include < SPI.h >
#include < Mirf.h >
#include < MirfHardwareSpiDriver.h >
#include < nRF24L01.h >
Innovente lcd (2, 3, A0, A1, A2, A4) ;
#define pinUnused 0
#define deviceNumber 1 / / 1 ou 2: la seule chose à changer entre les dispositifs
#define device1Name « TwinOne »
#define device1Final « N 32 xx.xxx »
#define device1Alone « Romulus en attente »
#define device2Name « TwinTwo »
#define device2Final « W 84 xx.xxx »
#define device2Alone « en attente Remus. »
#define RF_DR_LOW 5
#define RF_PWR_LOW 1
#define RF_PWR_HIGH 2
#define cacheMessage « FDR TwinGeocache »
#define keyMessage "-> GOODLUCK <-»
#define successMessage "Position finale: »
taux d’int ;
void setup() {}
Serial.Begin(9600) ;
pinMode (5, sortie) ; Écran LCD V0 Pin au contrôle luminosité
analogWrite(5,120) ; 120 semble être le bon niveau de luminosité sous 9 Volts
LCD.Begin(16,2) ;
LCD.Clear() ;
Delay(10) ;
Mirf.cePin = 9 ; broche de ce sur Uno
Mirf.csnPin = 10 ; broche de CSN sur Uno
Mirf.SPI = & MirfHardwareSpi ;
Mirf.init() ;
Mirf.setRADDR ((deviceNumber == 1) ? (Byte*) device1Name : device2Name (byte *)) ;
Mirf.setRADDR ((byte *) "serv1") ;
Mirf.setTADDR ((deviceNumber == 1) ? (Byte*) device2Name : device1Name (byte *)) ;
Mirf.setRADDR ((byte *) "clie1") ;
Mirf.Payload = sizeof(rate) ;
Mirf.config() ;
randomSeed (analogRead (pinUnused)) ;
displayMessage (cacheMessage, keyMessage) ;
retarder (4000) ;
}
Sub displayMessage (const char * line1, const char * ligne2)
{
LCD.Clear() ;
lcd.setCursor (0, 0) ;
LCD.Print (ligne1) ;
lcd.setCursor (0, 1) ;
LCD.Print (ligne2) ;
}
sendData Sub (Sub)
{
unsigned long maintenant = millis() ;
Mirf.Send ((byte *) & maintenant) ;
tandis que (Mirf.isSending())
retard (aléatoire (10)) ;
}
bool readData (vide)
{
bool dataFound = false ;
tandis que (Mirf.dataReady())
{
data[Mirf.payload octets] ;
Mirf.getData(data) ;
dataFound = true ;
}
Return dataFound ;
}
void loop() {}
sendData() ;
Si (readData() == true)
{
displayMessage (keyMessage, (deviceNumber == 1)? device1Final : device2Final) ;
unsigned long maintenant = millis() ;
tandis que (millis() < = (maintenant + 1000))
sendData() ;
}
d’autre
{
displayMessage (cacheMessage, (deviceNumber == 1)? device1Alone : device2Alone) ;
unsigned long maintenant = millis() ;
tandis que (millis() < = (maintenant + 1000))
sendData() ;
}
}