Created
December 10, 2014 11:30
-
-
Save cyrildiagne/2054dfdc01b090c10b23 to your computer and use it in GitHub Desktop.
LightLine Kit Arduino Firmware v1
This file contains 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
#include <SoftwareSerial.h> | |
#include <Adafruit_NeoPixel.h> | |
//SoftwareSerial softSerial(8, 9); // RX, TX | |
#define BUFFER_SIZE 256 | |
char input[BUFFER_SIZE]; | |
int currPos = 0; | |
bool bReading = false; | |
bool bParsingColors = false; | |
bool bParsingColorsFlagFound = false; | |
uint16_t colorNum = 0; | |
//#define Z1 220.0 | |
//#define Z2 698.0 | |
#define NEO_PIN 6 | |
//#define ESP8266_CHPD 6 | |
//#define BUTTON 3 | |
int buttonState = 0; | |
// Parameter 1 = number of pixels in strip | |
// Parameter 2 = Arduino pin number (most are valid) | |
// Parameter 3 = pixel type flags, add together as needed | |
Adafruit_NeoPixel strip = Adafruit_NeoPixel(30, NEO_PIN, NEO_GRB + NEO_KHZ800); | |
// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across | |
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input | |
// and minimize distance between Arduino and first pix @el. Avoid connecting | |
// on a live circuit...if you must, connect GND first. | |
void setup() { | |
Serial.begin(57600); | |
delay(1000); | |
strip.begin(); | |
fillColor( strip.Color(50,50,50) ); | |
delay(1500); | |
Serial.print("AT+CIPMUX=1\r\n"); | |
delay(1000); | |
Serial.print("AT+CIPSERVER=1,40002\r\n"); | |
delay(1000); | |
Serial.print("AT+CIPSTO=120\r\n"); | |
fillColor( strip.Color(100,100,100) ); | |
delay(3000); | |
fillColor( strip.Color(255,255,255) ); | |
delay(100); | |
printIP(); | |
} | |
void printIP() { | |
blnk(100); | |
Serial.print("AT+CIFSR\r\n"); | |
} | |
void loop() { | |
while ( Serial.available() ) { | |
char inByte = Serial.read(); | |
//softSerial.write(inByte); | |
if (bReading) { | |
if (inByte == '\r') { | |
if(bParsingColors) { | |
parseColor(); | |
bParsingColors = false; | |
bParsingColorsFlagFound = false; | |
strip.show(); | |
} | |
bReading = false; | |
} | |
else if (inByte != '\n') { | |
if(currPos == 0 && inByte == '+') { | |
bParsingColors = true; | |
} | |
else { | |
if(bParsingColors) { | |
if(!bParsingColorsFlagFound) { | |
if(inByte == ':') { | |
bParsingColorsFlagFound = true; | |
colorNum = 0; | |
currPos = 0; | |
continue; | |
} | |
} | |
else { | |
if(inByte=='-') { | |
parseColor(); | |
currPos = 0; | |
colorNum++; | |
continue; | |
} | |
} | |
} | |
input[currPos] = inByte; | |
currPos++; | |
} | |
if(currPos >= BUFFER_SIZE-1) { | |
fillColor( strip.Color(125, 0, 0) ); | |
currPos = 0; | |
colorNum = 0; | |
bParsingColors = false; | |
bParsingColorsFlagFound = false; | |
bReading = false; | |
} | |
} | |
} | |
else { | |
if (inByte == '\n') { | |
bReading = true; | |
currPos = 0; | |
} | |
} | |
} | |
delay(1); | |
} | |
long readVcc() { | |
long result; | |
// Read 1.1V reference against AVcc | |
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); | |
delay(2); // Wait for Vref to settle | |
ADCSRA |= _BV(ADSC); // Convert | |
while (bit_is_set(ADCSRA,ADSC)); | |
result = ADCL; | |
result |= ADCH<<8; | |
result = 1126400L / result; // Back-calculate AVcc in mV | |
return result; | |
} | |
void parseColor() { | |
int r, g, b; | |
input[currPos] = '\0'; | |
if (strlen(input) == 6) { | |
char cr[3] = { | |
'\0' }; | |
strncpy(cr, input, 2); | |
char cg[3] = { | |
'\0' }; | |
strncpy(cg, (input+2), 2); | |
char cb[3] = { | |
'\0' }; | |
strncpy(cb, input+4, 2); | |
r = strtol( cr, NULL, 16 ); | |
g = strtol( cg, NULL, 16 ); | |
b = strtol( cb, NULL, 16 ); | |
} | |
else { | |
r = g = b = strtol( input, NULL, 16 ); | |
} | |
strip.setPixelColor(colorNum, strip.Color(r, g, b)); | |
} | |
// LEDS | |
void blnk(int duration) { | |
fillColor( strip.Color(50, 50, 50) ); | |
delay(duration); | |
fillColor( strip.Color(0, 0, 0) ); | |
delay(duration); | |
} | |
void fillColor(uint32_t c) { | |
for(uint16_t i=0; i<strip.numPixels(); i++) { | |
strip.setPixelColor(i, c); | |
} | |
strip.show(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment