Control robot med en TV-fjärrkontroll (5 / 6 steg)
Steg 5: kod
< p > int receiverpin = 11; < br > #include < IRremote.h >< irremote.h >< /irremote.h >< /p >< p > IRrecv irrecv(receiverpin); skapa en instans av irrecv
decode_results resultat; < /p >< p > void setup()
{
Serial.BEGIN(9600);
vänster motor
pinMode(4,OUTPUT); //
pinMode(7,OUTPUT);
pinMode(6,OUTPUT); PWM
höger höger
pinMode(13,OUTPUT);
pinMode(12,OUTPUT);
pinMode (9, OUTPUT); //pwm
irrecv.enableIRIn(); starta mottagaren
} < /p >< p > void onLED (int pin, int spänning)
{
digitalWrite (pin, spänning);
} < /p >< p > void goForward (int varaktighet, int pwm)
{
digitalWrite(4,HIGH);
fördröjning (varaktighet); //100
digitalWrite(7,LOW);
analogWrite (6, pwm); //right motor
digitalWrite(13,HIGH);
Delay(duration);
digitalWrite(12,LOW);
analogWrite(9,pwm); / / höger motor
} < /p >< p > void fullReverse (int varaktighet, int pwm)
{
digitalWrite(4,LOW);
Delay(duration);
digitalWrite(7,HIGH);
analogWrite(6,pwm);
digitalWrite(13,LOW);
Delay(duration);
digitalWrite(12,HIGH);
analogWrite(9,pwm); / / höger motor
} < /p >< p > void fullStop (int varaktighet, int pwm)
{
digitalWrite(4,LOW);
Delay(duration);
digitalWrite(7,LOW);
analogWrite(6,pwm); / /
digitalWrite(13,LOW);
Delay(duration);
digitalWrite(12,LOW);
analogWrite(9,pwm); / / höger motor
} < /p >< p > void svängvänster (int varaktighet, int pwm)
{
digitalWrite(13,LOW);
Delay(duration);
digitalWrite(12,HIGH);
analogWrite(9,pwm); / / höger motor
digitalWrite(4,HIGH);
Delay(duration);
digitalWrite(7,LOW);
analogWrite(6,pwm);
} < /p >< p > void svänghöger (int varaktighet, int pwm)
{
digitalWrite(13,HIGH);
Delay(duration);
digitalWrite(12,LOW);
analogWrite(9,pwm); / / höger motor
digitalWrite(4,LOW);
Delay(duration);
digitalWrite(7,HIGH);
analogWrite(6,pwm);
}
void translateIR()
vidtar åtgärder utifrån IR koden mottagen
använder Sony IR-koder
{
Switch(results.Value)
{
fall 0x9CB47: goForward(100,120); (x, y), justera y-värden för hastighet
Break; < /p >< p > fall 0x5CB47: fullReverse(100,100);
Break; < /p >< p > fall 0x3CB47: turnLeft(100,120);
bryta; < /p >< p > fall 0xDCB47: turnRight(100,120);
bryta; < /p >< p > default:fullStop(100,0);
Break; < /p >< p >}
} < /p >< p > void loop()
{
om (irrecv.decode (& resultat)) / / har vi fått en IR-signal?
{
onLED(2,255); vidare ledde när signalen tas emot
translateIR();
för (int z = 0, z < 2, z ++) / / ignorera upprepade koderna
{
irrecv.Resume(); ta emot nästa värde
}
}
annat
{
onLED(2,0); Om signalen inte är recept
}
} < /p >