Tvillingar elektroniska spel (2 / 3 steg)
Steg 2: Programmera Tvillingarna
I exemplet nedan (att vi använder i Geocaching utmaningar) använder samma kod för både tvillingar och vi ändra endast en rad beroende på vilken Twin vi program (tack Rion för denna smarta kodning!).
F.D.R. Geo-projektet Twin etappvis GeoCache
Detta är den slutliga Twin koden
Detta kräver en RF24L01 mottagare & en parallell LCD på Nano
Användaren anger 9 volts batteri
#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 eller 2: det enda att ändra mellan enheter
#define device1Name "TwinOne"
#define device1Final "N 32 xx.xxx"
#define device1Alone "Awaiting Romulus"
#define device2Name "TwinTwo"
#define device2Final "W 84 xx.xxx"
#define device2Alone "Awaiting 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 "slutliga ståndpunkt:"
int takt;
void setup() {
Serial.BEGIN(9600);
pinMode (5, OUTPUT); LCD-V0 stift till kontroll ljusstyrka
analogWrite(5,120); 120 verkar vara bra ljusstyrka under 9 volt
LCD.BEGIN(16,2);
LCD.Clear();
Delay(10);
Mirf.cePin = 9; CE-stift på Uno
Mirf.csnPin = 10; CSN stift på 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);
fördröjning (4000);
}
void displayMessage (const char * line1, const char * rad2)
{
LCD.Clear();
lcd.setCursor (0, 0);
LCD.Print (line1);
lcd.setCursor (0, 1);
LCD.Print (rad2);
}
void sendData (void)
{
osignerade långa nu = millis();
Mirf.send ((byte *) & nu);
samtidigt (Mirf.isSending())
dröjsmål slumpmässiga (10).
}
bool readData (void)
{
bool dataFound = false;
samtidigt (Mirf.dataReady())
{
byte data[Mirf.payload];
Mirf.getData(data);
dataFound = sant;
}
återvända dataFound;
}
void loop() {
sendData();
om (readData() == true)
{
displayMessage (keyMessage, (deviceNumber == 1)? device1Final: device2Final);
osignerade långa nu = millis();
medan (millis() < = (nu + 1000))
sendData();
}
annat
{
displayMessage (cacheMessage, (deviceNumber == 1)? device1Alone: device2Alone);
osignerade långa nu = millis();
medan (millis() < = (nu + 1000))
sendData();
}
}