Klona en fjärrkontroll med Arduino
För att starta, jag gick till IR-Sensor Tutorial på Adafruit.com och lastas min Arduino följande skript:
/ * Raw IR dekoder skiss!
Skiss/programmet använder Arduno och en PNA4602 till
avkoda IR fick. Detta kan användas för att göra en IR-mottagare
(genom att söka efter en viss kod)
eller sändare (av pulserande en IR-LED på ~ 38KHz för den
varaktigheter upptäckt
Koden är allmän egendom, kolla in www.ladyada.net och adafruit.com
för fler tutorials!
*/
Vi behöver använda "raw" pin läsa metoder
eftersom tidpunkten är mycket viktigt här och digitalRead()
förfarandet är långsammare!
uint8_t IRpin = 2;
Digital pin #2 är samma som stift D2 se
http://Arduino.cc/en/hacking/PinMapping168 för "raw" pin mappningen
#define IRpin_PIN PIND
#define IRpin 2
maximal puls vi ska lyssna efter - 65 millisekunder är en lång tid
#define MAXPULSE 65000
Vad resolutionen timing bör, större är bättre
som dess "exaktare" - men för stor och du kommer inte få
exakt timing
#define RESOLUTION 20
Vi kommer att lagra upp till 100 puls par (detta är - en hel del-)
uint16_t pulser [100] [2]. par är hög och låg puls
uint8_t currentpulse = 0; index för pulser vi lagrar
void setup(void) {
Serial.BEGIN(9600);
Serial.println ("redo att avkoda IR!");
}
void loop(void) {
uint16_t highpulse, lowpulse; tillfällig lagring timing
highpulse = lowpulse = 0; börja med ingen puls längd
medan (digitalRead(IRpin)) {/ / Detta är för långsam!
samtidigt (IRpin_PIN & _BV(IRpin)) {
PIN är fortfarande hög
räkna en annan några mikrosekunder
highpulse ++;
delayMicroseconds(RESOLUTION);
Om pulsen är för lång, vi "gått ut"-antingen ingenting
togs emot eller koden är klar, så skriv ut
Vi har gripit hittills, och sedan återställa
om ((highpulse > = MAXPULSE) & & (currentpulse! = 0)) {
printpulses();
currentpulse = 0;
hemkomst.
}
}
gjorde vi inte tid till så låter stash läsning
pulser [currentpulse] [0] = highpulse;
samma som ovan
tag (!. (IRpin_PIN & _BV(IRpin))) {
PIN är fortfarande låg
lowpulse ++;
delayMicroseconds(RESOLUTION);
om ((lowpulse > = MAXPULSE) & & (currentpulse! = 0)) {
printpulses();
currentpulse = 0;
hemkomst.
}
}
pulser [currentpulse] [1] = lowpulse;
vi läsa en hög-låg puls, fortsätta!
currentpulse ++;
}
void printpulses(void) {
Serial.println ("\n\r\n\rReceived: \n\rOFF \tON");
för (uint8_t jag = 0; jag < currentpulse; i ++) {
Serial.Print (pulser [i] [0] * upplösning, DEC);
Serial.Print ("usec,");
Serial.Print (pulser [i] [1] * upplösning, DEC);
Serial.println ("usec");
}
}