Skip to content

Instantly share code, notes, and snippets.

Created November 23, 2016 21:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save anonymous/498e6a30e38e3234aad29ea3c1f2458a to your computer and use it in GitHub Desktop.
Save anonymous/498e6a30e38e3234aad29ea3c1f2458a to your computer and use it in GitHub Desktop.
Pixel Wave
/* 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