VLC Media Player-kontroll med hjälp av IR-fjärr (6 / 7 steg)
Steg 6: Program 1
#include
int RECV_PIN = A5;
int BUTTON_PIN = 12;
int STATUS_PIN = 13.
IRrecv irrecv(RECV_PIN);
IRsend irsend;
decode_results resultat.
void setup()
{
Serial.BEGIN(9600);
irrecv.enableIRIn(); Starta mottagaren
pinMode (BUTTON_PIN, indata);
pinMode (STATUS_PIN, OUTPUT);
}
Lagring för inspelade koden
int codeType = -1; Typ av kod
osignerade långa codeValue; Värdet om inte raw
unsigned int rawCodes [RAWBUF]; Varaktigheterna om raw
int codeLen; Längden på koden
int växla = 0; RC5/6 växla staten
Lagrar koden för senare uppspelning
De flesta av denna kod är bara loggning
void storeCode(decode_results *results) {
codeType = resultat -> decode_type;
int count = resultat -> rawlen;
om (codeType == okänd) {
Serial.println ("emot okänd kod, spara som rå");
codeLen = resultat -> rawlen - 1;
Att lagra raw koder:
Släpp första värdet (gap)
Konvertera från fästingar till mikrosekunder
Tweak är kortare och utrymmen längre om du vill avbryta ut IR mottagare distorsion
för (int jag = 1; jag < = codeLen; i ++) {
om (jag % 2) {
Mark
rawCodes [i - 1] = resultat -> rawbuf [i] * USECPERTICK - MARK_EXCESS;
Serial.Print ("m").
}
annat {
Utrymme
rawCodes [i - 1] = resultat -> rawbuf [i] * USECPERTICK + MARK_EXCESS;
Serial.Print ("s");
}
Serial.Print (rawCodes [i - 1], DEC);
}
Serial.println("");
}
annat {
om (codeType == NEC) {
Serial.Print ("fick NEC:");
om (resultat -> värde == upprepning) {
Inte registrera en NEC Repetera värdet som är värdelös.
Serial.println ("repeat; ignorerar.");
hemkomst.
}
}
annat if (codeType == SONY) {
Serial.Print ("fick SONY:");
}
annat if (codeType == RC5) {
Serial.Print ("fick RC5:");
}
annat if (codeType == RC6) {
Serial.Print ("emot RC6:");
}
annat {
Serial.Print ("oväntade codeType");
Serial.Print (codeType, DEC);
Serial.println("");
}
Serial.println (resultat -> värde).
codeValue = resultat -> värde;
codeLen = resultat -> bitar;
}
}
void sendCode (int upprepa) {
om (codeType == NEC) {
om (upprepa) {
irsend.sendNEC (repetera, codeLen);
Serial.println ("skickade NEC upprepa");
}
annat {
irsend.sendNEC (codeValue, codeLen);
Serial.Print ("skickats NEC");
Serial.println (codeValue, HEX);
}
}
annat if (codeType == SONY) {
irsend.sendSony (codeValue, codeLen);
Serial.Print ("skickats Sony");
Serial.println (codeValue, HEX);
}
annat if (codeType == RC5 || codeType == RC6) {
om (! upprepa) {
Vänd den växla lite för en ny knapptryckning
Toggle = 1 - växla;
}
Sätta den växla lite i koden för att skicka
codeValue = codeValue & ~ (1 << (codeLen - 1));
codeValue = codeValue | (växla << (codeLen - 1));
om (codeType == RC5) {
Serial.Print ("skickats RC5");
Serial.println (codeValue, HEX);
irsend.sendRC5 (codeValue, codeLen);
}
annat {
irsend.sendRC6 (codeValue, codeLen);
Serial.Print ("skickats RC6");
Serial.println (codeValue, HEX);
}
}
annat if (codeType == okänd / * dvs rå * /) {
Anta 38 KHz
irsend.sendRaw (rawCodes, codeLen, 38);
Serial.println ("skickas raw");
}
}
int lastButtonState;
void loop() {
Om knappen nedtryckt, skicka koden.
int buttonState = digitalRead(BUTTON_PIN);
om (lastButtonState == hög & & buttonState == låg) {
Serial.println("Released");
irrecv.enableIRIn(); Re-möjliggöra mottagare
}
om (buttonState) {
Serial.println ("pressad, skicka");
digitalWrite (STATUS_PIN, hög);
sendCode(lastButtonState == buttonState);
digitalWrite (STATUS_PIN, låg);
Delay(50); Vänta lite mellan återöverföringar
}
annars om (irrecv.decode (& resultat)) {
digitalWrite (STATUS_PIN, hög);
storeCode(&results);
irrecv.Resume(); återuppta mottagare
digitalWrite (STATUS_PIN, låg);
}
lastButtonState = buttonState;
}