Arduino RC bil med FPV Camera (12 / 15 steg)
Steg 12: NeoPixel Stick
Eftersom det är en oskriven regel att Arduino projekt har vidrig lysdioder (skojar bara!), La jag en NeoPixel pinne till bilen. NeoPixels är en typ av dopplinjen adresserbara RGB LED produceras av AdaFruit NeoPixel pinnen har 8 adresserbara lysdioder på en kompakt PCB. Pinnen kräver en tredje part Arduino bibliotek (https://github.com/adafruit/Adafruit_NeoPixel) för att arbeta, men det är ganska lätt att konfigurera (både maskinvara och programvara). Jag fastlödda på vissa kvinnliga huvuden så jag kunde ansluta till det med 22AWG solid kabel.
De lampor styrs med hjälp av XBox 360-handkontrollen. "Y"-knappen växlar mellan NeoPixel pinnen/på. DPad styr ljusstyrkan och "sekvens". Ljusstyrkan är kontrollerad av upp/ner på DPad sekvens är DPad vänster/höger. Sekvensen avser de förprogrammerade lägen som konfigurerats för NeoPixel stick.
Listan över sekvenser i den aktuella versionen av programvaran är:
Sekvens 0: Alla lysdioder inställd vit (justerbar ljusstyrka)
Serie 1: Alla lysdioder inställd röd (justerbar ljusstyrka)
Serie 2: Alla lysdioder inställd grön (justerbar ljusstyrka)
Serie 3: Alla lysdioder inställd blå (justerbar ljusstyrka)
Serie 4: Hazard lampor - slutet lysdioder blinkar orange
: 5 polisen sekvensläge - slutet LED flash röd/blå (Använd inte detta på en väg på natten, haha)
Sekvens 6: Pulserande/blekning gröna lysdioderna
: 7 Knight Rider sekvensläge (röd)
: 8 Knight Rider sekvensläge (blå)
Sekvens 9: Tom sekvens, som för närvarande till vit (justerbar ljusstyrka)
C# programmet skickar NeoPixel instruktionerna till Arduino, använda ett fält 3 tecken i seriella produktionen meddelande, till exempel "L51" det första tecknet styr på/av (L = ljus på, D = off(dark)). Det andra tecknet är ljusstyrkan (om tillämpligt för sekvensen), och det sista tecknet är sekvensnumret.
För att bearbeta den här informationen, Arduino tar emot seriella strängen, sparar ljus strängen till ett separat 3 karaktär array, och sedan kontrollerar varje tecken. Den NeoPixel status uppdateras i varje iteration av den viktigaste loopen.
Obs: För animerade sekvenser, som fara lamporna och polisen sekvens, funktionen millis() användes för att spåra tid. De flesta NeoPixel exempel används funktionen delay(), men detta kan inte användas för bilen, eftersom den blockerar körning av alla andra kod i Arduino, tills förseningen är klar.
Anmärkning 2: Eftersom NeoPixel stick uppdateras endast i varje iteration av huvudsakliga slingan, den minsta tid mellan olika NeoPixel stater är förseningen i de viktigaste loopen. Som ni vet från seriell avsnitt anger denna försening den seriella meddelande update frekvensen mellan Arduino och PC. Så, mycket kickfrekvens uppdateringar till NeoPixel minnet är inte möjligt - den högsta frekvensen för NeoPixels är direkt kopplad till den seriella meddelande frekvensen (ca 20Hz).