Stap 3: programma
Voor het uploaden van het programma dat u wilt installeren van de plugin Linkit één samen met de arduino IDE. Hier vindt u instructies over hoe dat te doen in de officiële website. U kunt ook de IDE met de Linkit één plugin voorgeïnstalleerd van GitHub downloaden.
#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 }