Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
projets:arduino_open_close [15/01/2018 19:26] Mathieu Hery |
projets:arduino_open_close [10/02/2018 15:56] Mathieu Hery [Code Arduino pour la boîte Ouvert/fermé] |
||
---|---|---|---|
Ligne 5: | Ligne 5: | ||
An Arduino connects to 2 Pololu Led strips, 12 leds long | An Arduino connects to 2 Pololu Led strips, 12 leds long | ||
- | A switch toggles between which one is lit | + | A switch toggles between which one is lit |
- | | + | |
- | Fallback mode only back and forward | + | Fallback mode only rainbow mode |
- | mh8 - December 2017 | + | mh8 - February 2018 |
*/ | */ | ||
Ligne 37: | Ligne 36: | ||
//Variable for delays (can go up to 65536 on 2 bytes) | //Variable for delays (can go up to 65536 on 2 bytes) | ||
- | uint16_t interval = 100; | + | uint16_t interval = 10; |
//Variable defining maximum number of modes. Count starts at 0. | //Variable defining maximum number of modes. Count starts at 0. | ||
Ligne 59: | Ligne 58: | ||
void loop() { | void loop() { | ||
- | //In this mode we need to know if we address the OPEN or the CLOSED ledStrip | + | //In this mode we need to know if we address the OPEN or the CLOSED ledStrip |
int buttonState = digitalRead(buttonPin); | int buttonState = digitalRead(buttonPin); | ||
- | //Define two random colors to use in the back and foward movement | + | // Update the colors (comes from LedStripRainbow example) |
- | rgb_color colorOne = rgb_color(random(255), random(255), random(255)); | + | uint16_t time = millis() >> 2; |
- | rgb_color colorTwo = rgb_color(random(255), random(255), random(255)); | + | for (uint16_t i = 0; i < LED_COUNT; i++) |
- | + | { | |
- | //FORWARD Movement | + | byte x = (time >> 2) - (i << 3); |
- | for (uint8_t i = 0; i < LED_COUNT; i++) { | + | colors[i] = hsvToRgb((uint32_t)x * 359 / 256, 255, 255); |
- | colors[i] = colorOne; | + | |
- | if (buttonState == 1) { | + | |
- | // Write to OPEN not to CLOSED | + | |
- | ledStripOpen.write(colors, LED_COUNT); | + | |
- | ledStripClosed.write(colorsOff, LED_COUNT); | + | |
- | } | + | |
- | + | ||
- | else if (buttonState == 0) { | + | |
- | // Write to CLOSED not to OPEN | + | |
- | ledStripClosed.write(colors, LED_COUNT); | + | |
- | ledStripOpen.write(colorsOff, LED_COUNT); | + | |
- | } | + | |
- | delay(interval); | + | |
} | } | ||
- | |||
- | //BACK Movement | ||
- | for (uint8_t i = LED_COUNT; i > 0; i--) { | ||
- | colors[i] = colorTwo; | ||
- | if (buttonState == 1) { | ||
- | // Write to OPEN not to CLOSED | ||
- | ledStripOpen.write(colors, LED_COUNT); | ||
- | } | ||
- | |||
- | else if (buttonState == 0) { | ||
- | // Write to CLOSED not to OPEN | ||
- | ledStripClosed.write(colors, LED_COUNT); | ||
- | } | ||
- | delay(interval); | ||
- | } | ||
- | } | ||
- | |||
- | void writetoLeds() { | ||
- | int buttonState = digitalRead(buttonPin); | ||
if (buttonState == 1) { | if (buttonState == 1) { | ||
- | // Turn ON OPEN led strip turn OFF CLOSED led strip | + | // Write to OPEN not to CLOSED |
- | for (uint8_t i = 0; i < LED_COUNT; i++) | + | ledStripOpen.write(colors, LED_COUNT); |
- | { | + | ledStripClosed.write(colorsOff, LED_COUNT); |
- | colorsOpen[i] = colors[i]; | + | |
- | colorsClosed[i] = colorsOff[i]; | + | |
- | } | + | |
} | } | ||
else if (buttonState == 0) { | else if (buttonState == 0) { | ||
- | // Turn OFF OPEN led strip turn ON CLOSED led strip | + | // Write to CLOSED not to OPEN |
- | for (uint8_t i = 0; i < LED_COUNT; i++) | + | ledStripClosed.write(colors, LED_COUNT); |
- | { | + | ledStripOpen.write(colorsOff, LED_COUNT); |
- | colorsOpen[i] = colorsOff[i]; | + | |
- | colorsClosed[i] = colors[i]; | + | |
- | } | + | |
} | } | ||
+ | delay(interval); | ||
- | // Write to the led strips | + | } |
- | ledStripOpen.write(colorsOpen, LED_COUNT); | + | |
- | ledStripClosed.write(colorsClosed, LED_COUNT); | + | |
- | delay(10); | + | // Comes from LedStripRainbow example |
+ | // Converts a color from HSV to RGB. | ||
+ | // h is hue, as a number between 0 and 360. | ||
+ | // s is the saturation, as a number between 0 and 255. | ||
+ | // v is the value, as a number between 0 and 255. | ||
+ | rgb_color hsvToRgb(uint16_t h, uint8_t s, uint8_t v) | ||
+ | { | ||
+ | uint8_t f = (h % 60) * 255 / 60; | ||
+ | uint8_t p = (255 - s) * (uint16_t)v / 255; | ||
+ | uint8_t q = (255 - f * (uint16_t)s / 255) * (uint16_t)v / 255; | ||
+ | uint8_t t = (255 - (255 - f) * (uint16_t)s / 255) * (uint16_t)v / 255; | ||
+ | uint8_t r = 0, g = 0, b = 0; | ||
+ | switch ((h / 60) % 6) { | ||
+ | case 0: r = v; g = t; b = p; break; | ||
+ | case 1: r = q; g = v; b = p; break; | ||
+ | case 2: r = p; g = v; b = t; break; | ||
+ | case 3: r = p; g = q; b = v; break; | ||
+ | case 4: r = t; g = p; b = v; break; | ||
+ | case 5: r = v; g = p; b = q; break; | ||
+ | } | ||
+ | return rgb_color(r, g, b); | ||
} | } | ||
</code> | </code> | ||
Ligne 131: | Ligne 111: | ||
==== Fichiers ==== | ==== Fichiers ==== | ||
+ | Pour l'instant le panneau n'est pas stabilisé (fallback mode, cf code ci-dessus). | ||
+ | Le fichier .ino sera mis en ligne lorsque le code sera stabilisé et présentera plusieurs affichages différents. |