Stap 6: Programma 1
#include
int RECV_PIN = A5;
int BUTTON_PIN = 12;
int STATUS_PIN = 13;
IRrecv irrecv(RECV_PIN);
IRsend irsend;
decode_results resultaten;
VOID Setup
{
Serial.begin(9600);
irrecv.enableIRIn(); Start de ontvanger
pinMode (BUTTON_PIN, INPUT);
pinMode (STATUS_PIN, uitvoer);
}
Opslag voor de opgenomen code
int codeType = -1; Het type code
unsigned long codeValue; De waarde van de code als niet raw
unsigned int rawCodes [RAWBUF]; De duur als ruwe
int codeLen; De lengte van de code
int/uitschakelen = 0; De knevel staat van RC5/6
De code voor later afspelen slaat
De meeste van deze code is net registreren
ongeldig storeCode(decode_results *results) {}
codeType = resultaten -> decode_type;
int count = resultaten -> rawlen;
Als (codeType onbekend ==) {}
Serial.println ("onbekende code ontvangen, opslaan van ruwe");
codeLen = resultaten -> rawlen - 1;
Voor het opslaan van raw codes:
Eerste aansluitwaarde (gap)
Teken omzetten in microseconden
Tweak markeert korter en langer ruimtes zijn als u wilt annuleren IR ontvanger vervorming
for (int i = 1; ik < = codeLen; i ++) {}
Als (ik % 2) {}
Mark
rawCodes [i - 1] = resultaten -> rawbuf [i] * USECPERTICK - MARK_EXCESS;
Serial.Print ("m");
}
else {}
Ruimte
rawCodes [i - 1] = resultaten -> rawbuf [i] * USECPERTICK + MARK_EXCESS;
Serial.Print ("s");
}
Serial.Print (rawCodes [i - 1], DEC);
}
Serial.println("");
}
else {}
Als (codeType == NEC) {}
Serial.Print ("ontvangen van NEC:");
Als (resultaten-waarde > == REPEAT) {}
Niet opnemen van een NEC repeat waarde zoals dat is nutteloos.
Serial.println ("herhalen; negeren.");
terugkeer;
}
}
anders als (codeType == SONY) {}
Serial.Print ("SONY ontvangen:");
}
anders als (codeType == RC5) {}
Serial.Print ("RC5 ontvangen:");
}
anders als (codeType == RC6) {}
Serial.Print ("RC6 ontvangen:");
}
else {}
Serial.Print ("onverwachte codeType");
Serial.Print (codeType, DEC);
Serial.println("");
}
Serial.println (resultaten-waarde >);
codeValue = resultaten -> waarde;
codeLen = resultaten -> bits;
}
}
VOID sendCode (int herhalen) {}
Als (codeType == NEC) {}
Als (herhalen) {}
irsend.sendNEC (herhalen, codeLen);
Serial.println ("verzonden NEC repeat");
}
else {}
irsend.sendNEC (codeValue, codeLen);
Serial.Print ("verzonden NEC");
Serial.println (codeValue, HEX);
}
}
anders als (codeType == SONY) {}
irsend.sendSony (codeValue, codeLen);
Serial.Print ("verzonden Sony");
Serial.println (codeValue, HEX);
}
anders als (codeType == RC5 || codeType == RC6) {}
Als (! herhalen) {}
Flip de knevel bit voor een nieuwe druk op de knop
Toggle = 1 - in-/ uitschakelen;
}
De knevel bit gestoken in de code te verzenden
codeValue = codeValue & ~ (1 << (codeLen - 1));
codeValue = codeValue | (knevel << (codeLen - 1));
Als (codeType == RC5) {}
Serial.Print ("verzonden RC5");
Serial.println (codeValue, HEX);
irsend.sendRC5 (codeValue, codeLen);
}
else {}
irsend.sendRC6 (codeValue, codeLen);
Serial.Print ("verzonden RC6");
Serial.println (codeValue, HEX);
}
}
anders als (codeType onbekend == / * d.w.z. rauw * /) {}
Aannemen van 38 KHz
irsend.sendRaw (rawCodes, codeLen, 38);
Serial.println ("Sent raw");
}
}
int lastButtonState;
void loop {}
Als de knop ingedrukt, stuur de code.
int buttonState = digitalRead(BUTTON_PIN);
Als (lastButtonState == HIGH & & buttonState == LOW) {}
Serial.println("Released");
irrecv.enableIRIn(); Ontvanger opnieuw in te schakelen
}
Als (buttonState) {}
Serial.println ("gedrukt, verzenden");
digitalWrite (STATUS_PIN, hoge);
sendCode(lastButtonState == buttonState);
digitalWrite (STATUS_PIN, laag);
delay(50); Wachten een beetje tussen hertransmissies
}
anders als (irrecv.decode (& resultaten)) {}
digitalWrite (STATUS_PIN, hoge);
storeCode(&results);
irrecv.resume(); hervatten van de ontvanger
digitalWrite (STATUS_PIN, laag);
}
lastButtonState = buttonState;
}