Arduino IRremote-Testprotokoll

Installieren Sie die IRremote-Bibliotheksdatei.
Öffnen Sie das IRrecord-Beispiel. Der
Schaltplan sieht wie folgt aus:

 

Sie können den erfolgreich dekodierten Infrarotcode im Überwachungsfenster des seriellen Anschlusses sehen
und Sie können die Ausgabe des Infrarotcodes über den Schalter steuern

 

Code-Anhang:

 

/*
 * IRrecord: minimal IR-Signale aufzeichnen und wiedergeben 
 * Am Eingang RECV_PIN muss ein IR-Detektor/Demodulator angeschlossen werden.
 * Eine IR-LED muss an den Ausgang PWM Pin 3 angeschlossen werden.
 * Eine Taste muss an den Eingang BUTTON_PIN angeschlossen werden; dies ist der
 *-Senden-Button.
 * Eine sichtbare LED kann mit STATUS_PIN verbunden werden, um den Status anzuzeigen.
 *
 * Die Logik ist:
 * Wenn die Taste gedrückt wird, senden Sie den IR-Code.
 * Wenn ein IR-Code empfangen wird, zeichnen Sie ihn auf.
 *
 * Version 0.11 September 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 */

#include <IRremote.h>

int RECV_PIN = 11;
int BUTTON_PIN = 12;
int STATUS_PIN = 13;

IRrecv irrev(RECV_PIN);
IRsend irsend;

decode_results-Ergebnisse;

void setup ()
{   Serial.begin (9600);   irrecv.enableIRIn(); // Empfänger starten   pinMode (BUTTON_PIN, INPUT);   PinMode (STATUS_PIN, AUSGANG); }




// Speicher für den aufgezeichneten Code
int codeType = -1; // Der Typ des Codes
unsigned long codeValue; // Der Codewert, wenn nicht roh
unsigned int rawCodes[RAWBUF]; // Die Dauer if raw
int codeLen; // Die Länge des Codes
int toggle = 0; // Der RC5/6 Umschaltzustand

// Speichert den Code für die spätere Wiedergabe
// Der größte Teil dieses Codes protokolliert nur
void storeCode(decode_results *results) {   codeType = results->decode_type;   int count = Ergebnisse->rawlen;   if (codeType == UNKNOWN) {     Serial.println ("Unbekannter Code empfangen, als Rohdaten speichern");     codeLen = Ergebnisse->rawlen - 1;     // So speichern Sie Rohcodes:     // Ersten Wert (Lücke) löschen     // Konvertieren von Ticks in Mikrosekunden     // Passen Sie die Markierungen kürzer und die Leerzeichen länger an, um die Verzerrung des IR-Empfängers auszugleichen     für (int i = 1; i <= codeLen; i++ ) {       if (i % 2) {         // Markiere         rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK - MARK_EXCESS;













        Serial.print ("m");
      } 
      else {         // Space         rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK + MARK_EXCESS;         Serial.print("s");       }       Serial.print (rawCodes [i - 1], DEC);     }     Serial.println ("");   }   Else {     If (codeType == NEC) {       Serial.print ("Received NEC:");       if (results->value == REPEAT) {         // Keinen NEC-Wiederholungswert aufzeichnen, da dies nutzlos ist.         Serial.println ("wiederholen; ignorieren.");         zurückkehren;       }     }      else if (codeType == SONY) {


















      Serial.print ("Empfangen SONY: ");
    } 
    Else if (codeType == PANASONIC) {       Serial.print ( "PANASONIC erhalten: ");     }     Else if (codeType == JVC) {       Serial.print ("Received JVC:");     }     Else if (codeType == RC5) {       Serial.print ("Received RC5:");     }      Else if (codeType == RC6) {       Serial.print ("Received RC6:");     }      Else {       Serial.print ("Unerwarteter Codetyp");       Serial.print (codeType, DEC);       Serial.println ("");     }     Serial.println (Ergebnisse -> Wert, HEX);


















    codeLen = Ergebnisse -> Bits;
  }
}

void sendCode (int repeat) {   if (codeType == NEC) {     if (repeat) {       irsend.sendNEC (REPEAT, codeLen);       Serial.println ("Gesendete NEC-Wiederholung");     }      sonst {       irsend.sendNEC (codeValue, codeLen);       Serial.print ("Gesendet NEC");       Serial.println (codeValue, HEX);     }   }    Else if (codeType == SONY) {     irsend.sendSony (codeValue, codeLen);     Serial.print ("Gesendet Sony");     Serial.println (codeValue, HEX);   }    Else if (codeType == PANASONIC) {     irsend.sendPanasonic (codeValue, codeLen);     Serial.print ("Gesendet Panasonic");



















    Serial.println (codeValue, HEX);
  }
  Else if (codeType == JVC) {     irsend.sendJVC (codeValue, codeLen, false);     Serial.print ("JVC gesendet");     Serial.println (codeValue, HEX);   }   Else if (codeType == RC5 || codeType == RC6) {     if (!repeat) {       // Drehe das Toggle-Bit für eine neue Schaltfläche um press       toggle = 1 - toggle;     }     // Setzen Sie das Toggle-Bit in den zu sendenden     Code codeValue = codeValue & ~(1 << (codeLen - 1));     CodeWert = CodeWert | (umschalten << (codeLen - 1));     If (codeType == RC5) {       Serial.print ("Sent RC5");       Serial.println (codeValue, HEX);















      irsend.sendRC5 (codeValue, codeLen);
    } 
    sonst {       irsend.sendRC6 (codeValue, codeLen);       Serial.print ("RC6 gesendet");       Serial.println (codeValue, HEX);     }   }    else if (codeType == UNKNOWN /* dh raw */) {     // 38 KHz annehmen     irsend.sendRaw (rawCodes, codeLen, 38);     Serial.println ("Roh gesendet");   } }










int lastButtonState;

void loop() {   // Wenn die Taste gedrückt wird, senden Sie den Code.   int buttonState = digitalRead (BUTTON_PIN);   If (lastButtonState == HIGH && buttonState == LOW) {     Serial.println ("Freigegeben");     irrecv.enableIRIn(); // Empfänger wieder aktivieren   }





  If (buttonState) {     Serial.println ( "Gedrückt, Senden");     digitalWrite (STATUS_PIN, HOCH);     sendCode (lastButtonState == buttonState);     digitalWrite (STATUS_PIN, NIEDRIG);     Verzögerung (50); // Warten Sie ein bisschen zwischen den Neuübertragungen aufrechtzuerhalten   .    Sonst, wenn (irrecv.decode (& Ergebnisse)) {     digitalWrite (STATUS_PIN, HIGH);     storeCode(&results);     irrecv.resume(); // Empfänger wieder aufnehmen     digitalWrite (STATUS_PIN, LOW);   }   lastButtonState = buttonState; }













Supongo que te gusta

Origin blog.csdn.net/niupipiniupipi/article/details/104337388
Recomendado
Clasificación