Bygga en stor kran spel (12 / 19 steg)
Steg 12: X-axeln kontrollkod
X-axeln rör sig i två riktningar.X-kod:
#include < Servo.h >
#include < Wire.h >
Servo XA;
Servo XB;
int dir = 0;
int oldDir = 0;
IR grejer
#include < IRremote.h >
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results resultat.
Sträng åtgärd;
Sträng oldAction;
//
osignerad länge;
osignerade långa timeIR;
osignerade långa timeDiff;
void setup() {
Wire.BEGIN();
Serial.BEGIN(9600);
irrecv.enableIRIn(); Starta IR-mottagaren
}
void loop() {
läst IR knappar och anger åtgärden / /
om (irrecv.decode (& resultat)) {
lång x = results.value;
Serial.println (results.value, HEX); för avkodning knappar
Serial.println(x);
timeIR = millis(); rekordtid på knappen push
Switch(x) {
fall 351005205:
Action = "uppåtpil";
dir = 5;
bryta;
fall 350988375:
Action = "nedåtpil";
dir = 6;
bryta;
fall 350963895:
Action = "vänsterpil";
dir = 1;
bryta;
fall 350976645:
Action = "höger pil";
dir = 2;
bryta;
fall 350952165:
Action = "ok/mute";
dir = 3;
bryta;
fall 350986335:
Action = "B2";
dir = 4;
bryta;
fall 4294967295:
bryta;
}
irrecv.Resume(); Ta emot nästa värde
}
timeDiff = millis() - timeIR;
om ((timeDiff > 200) & & dir! = 0) {//if ingen knapp
dir = 0;
Action = "ingen";
}
om (action! = oldAction) {
om (åtgärder == "uppåtpil") {
XA.attach(9);
XA.write(0);
XB.attach(10);
XB.write(180);
Serial.println ("X gå bort");
Delay(100);
}
om (åtgärder == "nedåtpil") {
XA.attach(9);
XA.write(180);
XB.attach(10);
XB.write(0);
Serial.println ("X kommer tillbaka");
Delay(100);
}
om ((åtgärder == "none") & & (oldDir == 5 || oldDir == 6)) {
XA.detach();
XB.detach();
Serial.println ("stop x-axeln");
}
Skicka kommandon
Wire.beginTransmission(9);
Wire.send(Dir);
Wire.endTransmission();
Serial.println ("Skicka dir");
Serial.Print(Dir);
Serial.Print("");
Serial.println(action);
}
oldDir = dir;
oldAction = åtgärd;
Delay(100);
}