Stap 2: De tweeling Program
In het voorbeeld hieronder (dat wij in Geocaching uitdagingen gebruiken) gebruikt dezelfde code voor beide Twins en wij veranderen slechts één lijn afhankelijk van welke Twin Wij programmeren (Rion dank u voor deze slimme codering!).
F.D.R. Geo-Project Twin meerfasen GeoCache
Dit is de laatste Twin-code
Dit vereist een RF24L01 ontvanger & een parallelle LCD op Nano
Gebruiker levert 9 Volt batterij
#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 deviceNumber 1 / / 1 of 2: het enige om te wisselen tussen apparaten
#define device1Name "TwinOne"
#define device1Final "N 32 xx.xxx"
#define device1Alone "wacht op Romulus"
#define device2Name "TwinTwo"
#define device2Final "W 84 xx.xxx"
#define device2Alone "wacht op 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 "definitieve standpunt:"
int tarief;
VOID Setup {}
Serial.begin(9600);
pinMode (5, OUTPUT); LCD V0 Pin naar besturingselement helderheid
analogWrite(5,120); 120 lijkt goed helderheidsniveau onder 9 volt
LCD.begin(16,2);
LCD.Clear();
delay(10);
Mirf.cePin = 9; CE-pin op Uno
Mirf.csnPin = 10; CSN pin op Uno
Mirf.spi = & MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR ((deviceNumber == 1)? (byte*) device1Name: (byte *) device2Name);
Mirf.setRADDR ((byte *) "serv1");
Mirf.setTADDR ((deviceNumber == 1)? (byte*) device2Name: (byte *) device1Name);
Mirf.setRADDR ((byte *) "clie1");
Mirf.Payload = sizeof(rate);
Mirf.config();
randomSeed (analogRead (pinUnused));
displayMessage (cacheMessage, keyMessage);
vertraging (4000);
}
VOID displayMessage (const char * regel1, const char * regel2)
{
LCD.Clear();
lcd.setCursor (0, 0);
LCD.Print (lijn1);
lcd.setCursor (0, 1);
LCD.Print (regel2);
}
VOID sendData (void)
{
niet-ondertekende lang = millis();
Mirf.send ((byte *) & nu);
terwijl (Mirf.isSending())
vertraging (willekeurige (10));
}
BOOL readData (void)
{
BOOL dataFound = false;
terwijl (Mirf.dataReady())
{
byte data[Mirf.payload];
Mirf.getData(data);
dataFound = true;
}
Return dataFound;
}
void loop {}
sendData();
Als (readData() == true)
{
displayMessage (keyMessage, (deviceNumber == 1)? device1Final: device2Final);
niet-ondertekende lang = millis();
terwijl (millis() < = (nu + 1000))
sendData();
}
anders
{
displayMessage (cacheMessage, (deviceNumber == 1)? device1Alone: device2Alone);
niet-ondertekende lang = millis();
terwijl (millis() < = (nu + 1000))
sendData();
}
}