Stap 12: NeoPixel Stick
Aangezien het een ongeschreven regel dat Arduino projecten moeten onaangename LEDs (grapje!), ik een stok NeoPixel toegevoegd aan de auto. NeoPixels zijn een soort indvidually adresseerbare RGB LED geproduceerd door AdaFruit, en de NeoPixel stick heeft 8 adresseerbare LEDs op een compacte PCB. De stick vereist een derde partij Arduino library (https://github.com/adafruit/Adafruit_NeoPixel) om te werken, maar het is heel eenvoudig te configureren (zowel hardware als software). Ik gesoldeerd op enkele vrouwelijke headers, zodat ik verbinding met het met 22AWG vaste kern draad maken kan.
De lichten worden gecontroleerd met behulp van de XBox 360-controller. De "Y"-knop schakelt u de NeoPixel stick aan/uit. De DPad bepaalt de helderheid en de "volgorde". De helderheid wordt gecontroleerd door omhoog/omlaag op de DPad en volgorde is DPad links/rechts. De reeks verwijst naar de voorgeprogrammeerde modi geconfigureerd voor de NeoPixel stick.
De lijst van sequenties in de huidige softwareversie is:
Reeks 0: Alle LEDs instellen naar wit (instelbare helderheid)
Reeks 1: Alle LEDs ingesteld op rood (instelbare helderheid)
Reeks 2: Alle LEDs ingesteld op groen (instelbare helderheid)
Reeks 3: Alle LEDs ingesteld op blauw (instelbare helderheid)
Reeks 4: alarmknipperlichten - het einde LEDs flash oranje
Reeks 5: Politie modus - het einde LEDs flash rood/blauw (gebruik niet dit op een weg bij nachttijd, haha)
Reeks 6: Pulserende/vervagen groene LEDs
Reeks 7: Knight Rider modus (rood)
Reeks 8: Knight Rider modus (blauw)
Reeks 9: Lege reeks, momenteel ingesteld op wit (instelbare helderheid)
De C#-programma stuurt de NeoPixel instructies naar de Arduino, met behulp van een 3 teken veld in het bericht van de uitgang voor seriële, zoals "L51" het eerste teken on/off bepaalt (L = lichten op, D = off(dark)). Het tweede teken is de helderheid (indien van toepassing voor de reeks), en het laatste teken is het volgnummer.
Als u wilt deze informatie verwerken, de Arduino ontvangt de seriële string, de lichte tekenreeks wordt opgeslagen in een afzonderlijke 3 karakter array, en die vervolgens controleert elk teken. De NeoPixel status wordt bijgewerkt in elke iteratie van de hoofdlus.
Opmerking: Voor geanimeerde sequenties, zoals de alarmknipperlichten en de volgorde van de politie, de millis()-functie werd gebruikt voor het bijhouden van de tijd. De meeste NeoPixel voorbeelden gebruiken de delay()-functie, maar dit kan niet worden gebruikt voor de auto, omdat het de uitvoering van alle andere code in de Arduino, blokkeren zal totdat de vertraging is voltooid.
Noot 2: Aangezien de NeoPixel stick alleen in elke iteratie van de hoofdlus bijgewerkt wordt, de minimale tijd tussen verschillende NeoPixel Staten is de vertraging instellen in de hoofdlus. Zoals u uit de seriële sectie weet, wordt deze vertraging ingesteld de seriële bericht updatefrequentie tussen de Arduino en PC. Dus, zeer hoge frequentie updates naar de NeoPixel stick niet mogelijk - de hoogste frequentie voor de NeoPixels is rechtstreeks verbonden met de seriële bericht frequentie (ongeveer 20Hz).