Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* t4a_boblight
- * (C) 2014 Hans Luijten, www.tweaking4all.com
- *
- * t4a_boblight is gratis en mag gekopieerd en gemodificeerd worden
- * mits de copyright melding ongewijzigd aanwezig blijft.
- * Niemand mag je geld vragen voor deze code.
- * Gebruik geheel op eigen risico.
- */
- #include "Adafruit_NeoPixel.h"
- // DEFINITIES
- #define STARTCOLOR 0xFFFFFF // LED start kleur
- #define BLACK 0x000000 // LED de kleur zwart
- #define DATAPIN 13 // Datapin
- #define LEDCOUNT 90 // Aantal LEDs voor boblight
- #define SHOWDELAY 200 // Weergave vertraging in milliseconden
- #define BAUDRATE 500000 // Serial port snelheid, 460800 getest met Arduino Uno R3
- #define BRIGHTNESS 90 // Max. helderheid in %
- const char prefix[] = {0x41, 0x64, 0x61, 0x00, 0x18, 0x4D}; // Start prefix
- char buffer[sizeof(prefix)]; // Tijdelijke buffer voor ontvangen data
- // Initialiseer LED strip, WS2811/WS2912 specifiek
- // Volgende zou kunnen werken voor andere configuraties:
- // NEO_KHZ800 800 KHz bitstream (de meeste NeoPixel producten met WS2812 LEDs)
- // NEO_KHZ400 400 KHz (klassieke 'v1' (niet v2) FLORA pixels, WS2811 drivers)
- // NEO_GRB Pixels bedrading is voor GRB bitstream (meeste NeoPixel producten)
- // NEO_RGB Pixels bedrading is voor RGB bitstream (v1 FLORA pixels, niet v2)
- Adafruit_NeoPixel strip = Adafruit_NeoPixel(LEDCOUNT, DATAPIN, NEO_GRB + NEO_KHZ800);
- int state; // Definieer status
- #define STATE_WAITING 1 // - In afwachting van een prefix
- #define STATE_DO_PREFIX 2 // - Afhandelen van een prefix
- #define STATE_DO_DATA 3 // - Inkomende LED kleuren afhandelen
- int readSerial; // Gelezen Seriële data (1)
- int currentLED; // Gebruikt voor tellen van de LEDs
- void setup()
- {
- strip.begin(); // Initialiseer LED strip, zet helderheid, alles zwart en dan de start kleur
- strip.setBrightness( (255 / 100) * BRIGHTNESS );
- setAllLEDs(BLACK, 0);
- setAllLEDs(STARTCOLOR, 5);
- Serial.begin(BAUDRATE); // Initialiseer seriële poort
- state = STATE_WAITING; // Initiële status: Wachten voor een prefix
- }
- void loop()
- {
- switch(state)
- {
- case STATE_WAITING: // *** Wachten voor prefix ***
- if( Serial.available()>0 )
- {
- readSerial = Serial.read(); // Lees een karakter
- if ( readSerial == prefix[0] ) // Eerste karakter van de prefix?
- { state = STATE_DO_PREFIX; } // Zet dan de status op Prefix Afhandelen
- }
- break;
- case STATE_DO_PREFIX: // *** Afhandelen Prefix ***
- if( Serial.available() > sizeof(prefix) - 2 )
- {
- Serial.readBytes(buffer, sizeof(prefix) - 1);
- for( int Counter = 0; Counter < sizeof(prefix) - 1; Counter++)
- {
- if( buffer[Counter] == prefix[Counter+1] )
- {
- state = STATE_DO_DATA; // Ontvangen karakter is in de prefix, doorgaan dus
- currentLED = 0; // Zet de huidige LED op de eerste LED
- }
- else
- {
- state = STATE_WAITING; // Oops, daar ging iets mis, dit is niet de prefix
- break; // Ga terug naar wachten op een prefix
- } // end if buffer
- } // end for Counter
- } // end if Serial
- break;
- case STATE_DO_DATA: // *** Afhandelen inkomende kleuren data ***
- if( Serial.available() > 2 ) // Als we meer dan 2 karakters ontvangen
- {
- Serial.readBytes( buffer, 3 ); // Gebruik de buffer om 3 karakters op te slaan
- strip.setPixelColor( currentLED++, buffer[0], buffer[1], buffer[2]); // en wijs kleuren toe LEDs
- }
- if( currentLED > LEDCOUNT ) // Einde van de LED strip? Geef de kleuren dan weer!
- {
- strip.show(); // Maak kleuren zichtbaar
- delayMicroseconds(SHOWDELAY); // Even wachten ...
- state = STATE_WAITING; // En terug gaan naar wachten op een prefix
- currentLED = 0; // En zet de huidige LED op de eerste LED
- break; // verlaat en begin opnieuw
- }
- break;
- } // switch(state)
- } // loop
- // Stel de kleuren van alle LEDs in de strip op 'color'
- // Mocht 'wait'>0 dan gaat het wat langzamer en zie je de ene na de andere LED oplichten
- void setAllLEDs(uint32_t color, int wait)
- {
- for ( int Counter=0; Counter < LEDCOUNT; Counter++ ) // Voor elke LED
- {
- strip.setPixelColor( Counter, color ); // .. stel kleur in
- if( wait > 0 ) // als er een wachttijd is ingesteld
- {
- strip.show(); // Laat de LED kleur zien
- delay(wait); // en wacht even tot we naar de volgende LED gaan
- } // if wait
- } // for Counter
- strip.show(); // Alle LEDs zichtbaar maken
- } // setAllLEDs
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement