Paso 3: programa de
Para cargar el programa necesita instalar el un plugin Linkit junto con el IDE de arduino. Puede encontrar instrucciones sobre cómo hacerlo en la página web oficial. También puede descargar el IDE con el plugin Linkit uno preinstalado desde GitHub.
#define times_to_annoy 15#define delay_to_start_annoying 1000 #define delay_between_annoying 750 #define cooldown 15000 #define IRledPin 13 #define IRpin 7 // the maximum pulse we'll listen for - 65 milliseconds is a long time #define MAXPULSE 65000 // what our timing resolution should be, larger is better // as its more 'precise' - but too large and you wont get // accurate timing #define RESOLUTION 20 // we will store up to 100 pulse pairs (this is -a lot-) uint16_t pulses[100][2]; // pair is high and low pulse uint8_t currentpulse = 0; // index for pulses we're storing #define IRpin_PIN PIND void setup(void) { Serial.begin(9600); Serial.println("Ready to decode IR!"); } void loop(void) { //Serial.println("Looking for a code"); uint16_t highpulse, lowpulse; // temporary storage timing highpulse = lowpulse = 0; // start out with no pulse length // while (digitalRead(IRpin)) { // this is too slow! while (IRpin_PIN & (1 << IRpin)) { // pin is still HIGH // count off another few microseconds highpulse++; delayMicroseconds(RESOLUTION); // If the pulse is too long, we 'timed out' - either nothing // was received or the code is finished, so print what // we've grabbed so far, and then reset if ((highpulse >= MAXPULSE) && (currentpulse != 0)) { annoy(); currentpulse=0; return; } } // we didn't time out so lets stash the reading pulses[currentpulse][0] = highpulse; // same as above while (! (IRpin_PIN & _BV(IRpin))) { // pin is still LOW lowpulse++; delayMicroseconds(RESOLUTION); if ((lowpulse >= MAXPULSE) && (currentpulse != 0)) { annoy(); currentpulse=0; return; } } pulses[currentpulse][1] = lowpulse; // we read one high-low pulse successfully, continue! currentpulse++; } void annoy(void) { Serial.println("Captured remote code!"); delay(delay_to_start_annoying); for(int lcv = 0; lcv < times_to_annoy; lcv ++) { delay(delay_between_annoying); pulsepulses(); } Serial.println("Annoying done for now ... looking for another code"); delay(cooldown); } void pulsepulses(void) { //Serial.println("\n\r\n\rReceived: \n\rOFF \tON"); pulseIR(pulses[0][1] * RESOLUTION); for (uint8_t i = 1; i < currentpulse; i++) { delayMicroseconds(pulses[i][0] * RESOLUTION); pulseIR(pulses[i][1] * RESOLUTION); } } void pulseIR(long microsecs) { // we'll count down from the number of microseconds we are told to wait cli(); // this turns off any background interrupts while (microsecs > 0) { // 38 kHz is about 13 microseconds high and 13 microseconds low digitalWrite(IRledPin, HIGH); // this takes about 3 microseconds to happen delayMicroseconds(10); // hang out for 10 microseconds digitalWrite(IRledPin, LOW); // this also takes about 3 microseconds delayMicroseconds(10); // hang out for 10 microseconds // so 26 microseconds altogether microsecs -= 26; } sei(); // this turns them back on }