Advertisement
Guest User

arduino sketch

a guest
Apr 16th, 2015
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.97 KB | None | 0 0
  1. /* t4a_boblight
  2. * (C) 2014 Hans Luijten, www.tweaking4all.com
  3. *
  4. * t4a_boblight is gratis en mag gekopieerd en gemodificeerd worden
  5. * mits de copyright melding ongewijzigd aanwezig blijft.
  6. * Niemand mag je geld vragen voor deze code.
  7. * Gebruik geheel op eigen risico.
  8. */
  9.  
  10. #include "Adafruit_NeoPixel.h"
  11.  
  12. // DEFINITIES
  13.  
  14. #define STARTCOLOR 0xFFFFFF // LED start kleur
  15. #define BLACK 0x000000 // LED de kleur zwart
  16.  
  17. #define DATAPIN 13 // Datapin
  18. #define LEDCOUNT 90 // Aantal LEDs voor boblight
  19. #define SHOWDELAY 200 // Weergave vertraging in milliseconden
  20. #define BAUDRATE 500000 // Serial port snelheid, 460800 getest met Arduino Uno R3
  21. #define BRIGHTNESS 90 // Max. helderheid in %
  22.  
  23. const char prefix[] = {0x41, 0x64, 0x61, 0x00, 0x18, 0x4D}; // Start prefix
  24. char buffer[sizeof(prefix)]; // Tijdelijke buffer voor ontvangen data
  25.  
  26. // Initialiseer LED strip, WS2811/WS2912 specifiek
  27.  
  28. // Volgende zou kunnen werken voor andere configuraties:
  29. // NEO_KHZ800 800 KHz bitstream (de meeste NeoPixel producten met WS2812 LEDs)
  30. // NEO_KHZ400 400 KHz (klassieke 'v1' (niet v2) FLORA pixels, WS2811 drivers)
  31. // NEO_GRB Pixels bedrading is voor GRB bitstream (meeste NeoPixel producten)
  32. // NEO_RGB Pixels bedrading is voor RGB bitstream (v1 FLORA pixels, niet v2)
  33.  
  34. Adafruit_NeoPixel strip = Adafruit_NeoPixel(LEDCOUNT, DATAPIN, NEO_GRB + NEO_KHZ800);
  35.  
  36. int state; // Definieer status
  37. #define STATE_WAITING 1 // - In afwachting van een prefix
  38. #define STATE_DO_PREFIX 2 // - Afhandelen van een prefix
  39. #define STATE_DO_DATA 3 // - Inkomende LED kleuren afhandelen
  40.  
  41. int readSerial; // Gelezen Seriële data (1)
  42. int currentLED; // Gebruikt voor tellen van de LEDs
  43.  
  44. void setup()
  45. {
  46. strip.begin(); // Initialiseer LED strip, zet helderheid, alles zwart en dan de start kleur
  47.  
  48. strip.setBrightness( (255 / 100) * BRIGHTNESS );
  49.  
  50. setAllLEDs(BLACK, 0);
  51. setAllLEDs(STARTCOLOR, 5);
  52.  
  53. Serial.begin(BAUDRATE); // Initialiseer seriële poort
  54.  
  55. state = STATE_WAITING; // Initiële status: Wachten voor een prefix
  56. }
  57.  
  58. void loop()
  59. {
  60. switch(state)
  61. {
  62. case STATE_WAITING: // *** Wachten voor prefix ***
  63. if( Serial.available()>0 )
  64. {
  65. readSerial = Serial.read(); // Lees een karakter
  66.  
  67. if ( readSerial == prefix[0] ) // Eerste karakter van de prefix?
  68. { state = STATE_DO_PREFIX; } // Zet dan de status op Prefix Afhandelen
  69. }
  70. break;
  71.  
  72. case STATE_DO_PREFIX: // *** Afhandelen Prefix ***
  73. if( Serial.available() > sizeof(prefix) - 2 )
  74. {
  75. Serial.readBytes(buffer, sizeof(prefix) - 1);
  76.  
  77. for( int Counter = 0; Counter < sizeof(prefix) - 1; Counter++)
  78. {
  79. if( buffer[Counter] == prefix[Counter+1] )
  80. {
  81. state = STATE_DO_DATA; // Ontvangen karakter is in de prefix, doorgaan dus
  82. currentLED = 0; // Zet de huidige LED op de eerste LED
  83. }
  84. else
  85. {
  86. state = STATE_WAITING; // Oops, daar ging iets mis, dit is niet de prefix
  87. break; // Ga terug naar wachten op een prefix
  88. } // end if buffer
  89. } // end for Counter
  90. } // end if Serial
  91. break;
  92.  
  93. case STATE_DO_DATA: // *** Afhandelen inkomende kleuren data ***
  94. if( Serial.available() > 2 ) // Als we meer dan 2 karakters ontvangen
  95. {
  96. Serial.readBytes( buffer, 3 ); // Gebruik de buffer om 3 karakters op te slaan
  97. strip.setPixelColor( currentLED++, buffer[0], buffer[1], buffer[2]); // en wijs kleuren toe LEDs
  98. }
  99.  
  100. if( currentLED > LEDCOUNT ) // Einde van de LED strip? Geef de kleuren dan weer!
  101. {
  102. strip.show(); // Maak kleuren zichtbaar
  103. delayMicroseconds(SHOWDELAY); // Even wachten ...
  104.  
  105. state = STATE_WAITING; // En terug gaan naar wachten op een prefix
  106. currentLED = 0; // En zet de huidige LED op de eerste LED
  107.  
  108. break; // verlaat en begin opnieuw
  109. }
  110. break;
  111. } // switch(state)
  112.  
  113. } // loop
  114.  
  115. // Stel de kleuren van alle LEDs in de strip op 'color'
  116. // Mocht 'wait'>0 dan gaat het wat langzamer en zie je de ene na de andere LED oplichten
  117. void setAllLEDs(uint32_t color, int wait)
  118. {
  119. for ( int Counter=0; Counter < LEDCOUNT; Counter++ ) // Voor elke LED
  120. {
  121. strip.setPixelColor( Counter, color ); // .. stel kleur in
  122.  
  123. if( wait > 0 ) // als er een wachttijd is ingesteld
  124. {
  125. strip.show(); // Laat de LED kleur zien
  126. delay(wait); // en wacht even tot we naar de volgende LED gaan
  127. } // if wait
  128.  
  129. } // for Counter
  130.  
  131. strip.show(); // Alle LEDs zichtbaar maken
  132. } // setAllLEDs
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement