RGB LED Mood taklampa med hackad IR-fjärrkontroll (5 / 6 steg)
Steg 5: Skriva koden
Programmet består av tre huvuddelar:
1) IR kod buffring
2) IR kod tolkning
3) PWM kontroll (RGB fast färg, färgen bleknar och vitt ljus läge).
IR-kod buffring:
Med hjälp av processen beskrivs i steg 4 - "Hacking the Remote" Jag lärde mig att längden på en 0, 1, starta puls, och upprepa puls var alla unika och repeterbara värden. Varje gång bilden kände en fallande kant på kom pin 17 (avbrott-på-förändring) det skulle spela in tiden efter senaste fallande kanten och sedan jämföra det värdet med en serie av tid "windows" att bestämma vilken typ av puls bara. Du kan se en grov flödesschema av denna process i bilderna nedan. Fönstret jämförelse koden är inte original, jag hittade den på den utmärkta VALLISTA webbplats (http://www.piclist.org/techref/piclist/index.htm). Om längden inte hamnar i något fönster, jag sätter en dålig kod (BC) flagga och ignorera allt tills nästa start pulse.
IR-kod tolkning:
Varje gång en 1 eller 0 identifieras skjuter PIC detta värde i en 8-bitars FIFO register. Även om puls tåget från fjärrkontrollen är mer än 8 bitar, avsluta vi alltid med den sista 8 i registret, som råkar innehålla ett unikt värde för varje nyckel av intresse. Jag jämför denna kod till den kända digital värdet för varje nyckel (dessa mättes på oscilloskopet i steg 4) för att räkna ut vilken knapp trycktes och vilken åtgärd som ska vidtas (vitt ljus läge, RGB läge, öka Fader hastighet, etc). Detta 8-bitars värde sparas in i en andra register så att om upprepa pulsen dyker upp, vi kommer att veta vilket kommando upprepas.
PWM kontroll:
PIC 16F1829 har 4 10-bitars hårdvara PWM register vilket gör den idealisk för RGB färgkontroll. Med hjälp av PWM hårdvarumoduler är PIC fri att göra andra saker medan PWM går i bakgrunden.
Intensiteten i varje färg styrs av 10-bitar. När lampan är påslagen, är varje värde på max ge vitt ljus. När du trycker på knappen "CONV", börjar en 3-del loop i programvaran.
Del 1) röd minska, grön uppräkning, blå = 0
Del 2) grön minska, blå uppräkning, röd = 0
Del 3) blå minska, röd uppräkning, grön = 0
Programmet fortsätter att gå igenom dessa tre delar tills antingen vitt ljus-läget är valt, eller trycker på "Statiska" knappen Pausa lampan på den aktuella färgen.