Puzzle väckarklocka (6 / 9 steg)
Steg 6: Programmet IR-LED-controller
ATMega328P chip används också allmänt i många Arduino system inklusive den vanligaste Arduino UNO. Detta ger oss tillgång till en I2C kontrollerade IR LED fjärr bara genom att utveckla koden på en normal Arduino UNO (med alla dess bibliotek och funktioner) och senare överföra programmet till vår SMD variant av ATMega IC. Jag använde IR-fjärrkontrollen bibliotek utvecklats Ken Shirriff som du hittar här. Denna mycket användbara bit kod förenklar 38 kHz signal generation och timing för att skicka ut rätt signal till några lätt kodrader och i slutändan måste du bara ange vilken numerisk kod som du vill skicka med ett visst protokoll. För att hitta rätt kod och protokoll kan du använda till exempel awesome handledning utgiven av adafruit.
I mitt fall skickas följande koder via protokollet NEC att styra lampan:
Aktivera LED ljus på: 0xFFE01F (32 bitar)
Aktivera LED ljus till vitt: 0xFFD02F (32 bitar)
Förhöj LED power: 0xFFA05F (32 bitar)
Sänk LED power: 0xFF20DF (32 bitar)
Vända LED ljus off: 0xFF609F (32 bitar)
Så vill du till exempel aktivera lampan, skulle du använda den följande lina av koden i Arduino utveckling motorn:
irsend.sendNEC (0xFFE01F, 32);
I mitt fall ville jag ATMega att lyssna av I2C adressen 8 för en numerisk kod som sedan kommer att skickas med hjälp av IR-LED i NEC-format. Så om jag vill ta en ny kod, måste jag bara lägga (till exempel via SSH över Wi-Fi-anslutning) till skriptet körs på Edison styrelsen som är mycket mer enkel än att programmera IC inuti klockan. Jag har inkluderat källkoden samt en kopia av den binära hex filen att programmera IC i det här steget.
Du har dock fortfarande att överföra det inledande programmet på ATMega KI lödda till styrelsen. För att underlätta detta styrelsen har en dedikerad SPI kontakt som anges i den första bilden. Du behöver bara ett par bitar av tråd, en Arduino ombord och gratis winavr programpaket.
Börja med att ansluta Arduino till datorn och ladda upp ArduinoISP programmet ges i avsnittet exempel på din Arduino SDK. Anslut Arduino stiften i koden till lämpliga stiften på styrelsens makt. Om du använder en Arduino UNO har följande anslutningar göras:
Arduino -> power board
GND -> GND
5V -> 5V
D10 -> RST
D13 -> SCK
D12 -> MISO
D11 -> MOSI
Efter det kan du öppna en kommandorad på datorn och kontrollera om IC svarar. Efter att skriva följande kommando bör du se ett svar att ge dig serienumret och ange säkringar av IC (som beskrivs i 2: a bilden). Du måste ersätta COM # med faktiska serieporten din Arduino är ansluten till (som visas längst ner till höger i din Arduino SDK).
avrdude - v - c avrisp -p m328p -b 19200 - P COM # - n
Om du använder en "färsk" IC måste du berätta det nu använda 16 MHz kvartskristall som en klocka ingång. Detta sker genom att så kallade "säkringar" (se bild 3). Var mycket försiktig i detta steg för att ställa in rätt säkringen som anges ovan. Annars, du kan göra din IC ur funktion.
avrdude - v - c avrisp -p m328p -b 19200 - P COM # - U lfuse:w:0xff:m - U hfuse:w:0xd9:m - U efuse:w:0x04:m
Om allt har fungerat hittills, kan du ladda upp ditt program till ATMega. Du behöver "hex" filen genereras av Arduino SDK när kompilera koden. Genom att aktivera mångordig produktionen under kompileringen (Arduino SDK alternativ) kommer du enkelt att kunna hitta den temporära katalogen där hex-filen är lagrad. Alternativt kan du använda filen "I2CRemote.cpp.hex" jag som tillhandahålls tillsammans med källkoden. Tänk dock på att det bara kommer att skicka IR-signalen via protokollet NEC. Ladda upp programmet på IC typ:
avrdude - v - c avrisp -p m328p -b 19200 - P COM # - U flash:w:I2CRemote.cpp.hex
Nu har du fullständiga fungerande IR fjärrkontroll som du kan utlösa och kontroll av din Edison styrelse.