Trådlös NES handkontroll med data display (5 / 5 steg)
Steg 5: Koden och gå!
1) gör att du har SoftwareSerial.h. Detta tillåter oss att köra två seriella instanser på en gång!
2) Ladda upp koden din arduino
3) start att trycka på knappar för feedback
4) kan du ändra det xbee-ID. Dessa värden skrivs varje gång arduino drivs upp.
5) gå att hitta något att kontroll!
Arduino pro 5v koden med newhaven kontrollprotokoll:
#include
SoftwareSerial xbeeSerial (12, 13); RX, TX
variabler
int jag = 0;
int j = 0;
int m = 0;
int dChange = 0;
int sChange = 0;
int stChange = 0;
int ret = 0;
int köra = 0;
int inByte = 0;
int upp = 3;
int ner = 4.
int vänster = 5.
int höger = 6.
int Välj = 7.
int start = 8.
int kommandon [100]; //for util
int ingång [6] = {upp, ner, vänster, höger, Välj, starta};
int buttonState [6].
char * riktningar [] = {"Framåt", "Omvänd", "Vänster", "Höger", "Välj", "START"};
char * dlist [] = {"F", "R", "<", ">", "sel", "sta"};
byte xbeeSend [4] = {0x31, 0x32, 0x33, 0x34};
char roverData [] = "";
Newhaven NHD-0220D3Z-NSW-BBW-V3 kommandon
byte program = 0xFE;
byte displayOn = 0x41;
byte displayOff = 0x42;
byte cursorPos = 0x45; 1 byte Set
byte cursorHome = 0x46;
byte underlineOn = 0x47;
byte underlineOff = 0x48;
byte cursorLeft = 0x49;
byte cursorRight = 0x4A;
byte blinkingOn = 0x4B;
byte blinkingOff = 0x4C;
byte Backsteg = 0xFE;
byte clearScreen = 0x51;
byte setContrast = 0x52; //1 byte set
byte setBrightness = 0x53; 1 byte set
byte anpassade = 0x54;
byte displayLeft = 0x55;
byte displayRight = 0x56;
byte firmware = 0x70;
/*
0xFE 0x61 1 byte förändring RS‐232 baudvärde 3mS
0xFE 0x62 1 byte förändring I2C adress 3mS
0xFE 0x70 ingen Display firmware version nummer 4mS
0xFE 0x71 visar ingen RS‐232 baudvärde 10mS
0xFE 0x72 ingen Display I2C adress 4mS
*/
void setup()
{
Öppna seriell com och definiera ingångar
Serial.BEGIN(9600);
xbeeSerial.begin(9600);
för (jag = 3; jag < 9; i ++) {
pinMode (i, ingång);
}
lcdCommand(program,clearScreen);
Delay(500);
//
sätt på radion i kommando-läge:
xbeeSerial.print("+++");
vänta på radion att svara med "OK\r"
char thisByte = 0;
medan (thisByte! = '\r') {
om (xbeeSerial.available() > 0) {
thisByte = xbeeSerial.read();
// }
// }
Ange destination adress med 16-bitars adressering. Denna radio
destination bör andra radion är min adress och vice versa:
xbeeSerial.print (ATDH0, DL1234\r");
xbeeSerial.print("ATMY5678\r"); ställa in min adress (16-bitars adressering)
Ange den PAN-ID. Om du är på en plats där många människor
är med XBees, välja ett unikt PAN-ID
xbeeSerial.print("ATID1111\r");
xbeeSerial.print("ATCN\r");
xbeeListen();
}
void xbeeListen() {
char thisByte = 0;
om (Serial.available() > 0) {
thisByte = Serial.read();
}
}
void loop() / / LOOPY!
{
lcdCommand(program,cursorHome);
lcdCommand(program,blinkingOn);
lcdCommand(program,setContrast);
Serial.write(0x28);
readDpadInput();
readSelInput();
lcdCommand(program,cursorRight);
Serial.Print("Command:");
Serial.Print(j);
Serial.Print("?");
lcdCommand(program,cursorPos);
Serial.write(0x40);
While(dChange ==1) {
directionFeedback();
Delay(500);
kommandon [j] = ret;
j ++;
lcdCommand(program,clearScreen);
dChange = 0;
}
Delay(500);
}
följetong
kommandoprotokoll:
int lcdCommand (byte adress, int värde) {
Serial.write (adress); //CORRECT syntax för LCD-kommandon
Serial.write(Value);
}
läsa in
int readDpadInput() {
för (jag = 0; jag < 4; i ++) {
buttonState[i]=digitalRead(input[i]);
dChange = buttonState [i] + dChange;
}
}
int readSelInput() {
buttonState[4]=digitalRead(input[4]);
sChange = buttonState [4] + sChange;
}
int readStartInput() {
buttonState[5]=digitalRead(input[5]);
stChange = buttonState [5] + stChange;
}
Visa vägbeskrivning
int directionFeedback() {
för (jag = 0; jag < 4; i ++) {
Switch(buttonState[i]) {
fall 0: lcdCommand(program,cursorHome);
bryta;
fall 1:
lcdCommand(program,blinkingOff);
lcdCommand(program,cursorPos);
Serial.write(0xC);
Serial.Print(Directions[i]);
xbeeSerial.print(i+1);
handleSerial();
Delay(1000);
xbeeSerial.write("\r");
ret = i.
bryta;
}
}
}
int handleSerial() {
xbeeSerial.print(56);
IF(xbeeSerial.available() > 0) {
inByte = xbeeSerial.read();
Serial.Print(inByte);
}
}