Created
November 23, 2016 21:29
-
-
Save anonymous/498e6a30e38e3234aad29ea3c1f2458a to your computer and use it in GitHub Desktop.
Pixel Wave
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Pixel wave | |
* Copyright 2016 Julien Vanier, MIT license | |
* | |
* Connect 3 photoresistors to analog inputs and drive a Dotstar/Neopixel strip from the 3 analog signals! | |
*/ | |
#include "application.h" | |
#include "dotstar/dotstar.h" | |
SYSTEM_THREAD(ENABLED); | |
// IMPORTANT: Connect Dotstar strand to hardware SPI (Data => A5 and Clock => A3) | |
#define PIXEL_COUNT 72 | |
#define BRIGHTNESS 255 | |
#define SPEED 10 | |
#define PIN_RED A0 | |
#define PIN_GREEN A1 | |
#define PIN_BLUE A6 | |
#define VOLTAGE_MAX_NOMINAL (3.3 * 256 / 4096) | |
#define VOLTAGE_MAX_RED 0.190 | |
#define VOLTAGE_MAX_GREEN 0.220 | |
#define VOLTAGE_MAX_BLUE 0.130 | |
Adafruit_DotStar strip = Adafruit_DotStar(PIXEL_COUNT, DOTSTAR_BGR); | |
uint32_t colors[PIXEL_COUNT] = { 0 }; | |
uint16_t pos = 0; | |
void setup() | |
{ | |
strip.begin(); | |
strip.setBrightness(BRIGHTNESS); | |
strip.show(); | |
pinMode(PIN_RED, INPUT); | |
pinMode(PIN_GREEN, INPUT); | |
pinMode(PIN_BLUE, INPUT); | |
} | |
void loop() { | |
updateColor(); | |
showStrip(); | |
delay(SPEED); | |
} | |
void updateColor() { | |
colors[pos] = strip.Color( | |
pinColor(PIN_RED, VOLTAGE_MAX_RED), | |
pinColor(PIN_GREEN, VOLTAGE_MAX_GREEN), | |
pinColor(PIN_BLUE, VOLTAGE_MAX_BLUE) | |
); | |
} | |
uint8_t pinColor(pin_t pin, float voltageMax) { | |
int value = (int)(analogRead(pin) * VOLTAGE_MAX_NOMINAL / voltageMax); | |
if (value > 255) { | |
value = 255; | |
} | |
return 255 - value; | |
} | |
void showStrip() { | |
for (uint16_t i = 0; i < PIXEL_COUNT; i++) { | |
uint16_t n = (i + pos) % PIXEL_COUNT; | |
strip.setPixelColor(PIXEL_COUNT - i, colors[n]); | |
} | |
strip.show(); | |
pos = (pos + 1) % PIXEL_COUNT; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment