I can’t even get the menus to work!
I have put in some Serial debug lines and yet nothing happens!
I’m really stumped actually… but my wife is demanding i get off the computer and get ready to go lol so I would LOVE to stay and keep trying but yeh… happy wife, happy life!
Here is my code… cleaned up slightly and added Serial debugging.
/*********************************************************
WiFi RGB LED Strip Controller
NodeMCU w/ Blynk app
**********************************************************/
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <SimpleTimer.h>
#include <BlynkSimpleEsp8266.h>
char auth[] = "xxxxxxxx";
char ssid[] = "xxxxxxxx";
char pass[] = "xxxxxxxx";
SimpleTimer timer;
WidgetLCD lcdV10( V10 ); // LCD screen on the Manual Control tab
WidgetLCD lcdV11( V11 ); // LCD screen on the Presets tab
WidgetLCD lcdV12( V12 ); // LCD screen on the Music Reactive tab
// *** Program Variables ***
String modeSelector = "SELECT"; // SELECT, NONE, MANUAL, PRESET, MUSIC
String musicSelector = "SELECT"; // SELECT, NONE, RISE_ONE_COLOR, DIM_ONE_COLOR, etc.
int redPin = 5; // NodeMCU pin D1
int grnPin = 4; // NodeMCU pin D2
int bluPin = 0; // NodeMCU pin D3
int redVal = 0, grnVal = 0, bluVal = 0;
int musicRedVal = 0, musicGrnVal = 0, musicBluVal = 0;
int tempMusicRedVal = 0, tempMusicGrnVal = 0, tempMusicBluVal = 0;
unsigned long oldMillis = 0, newMillis = 0, checkMillis = 0; // going to set to millis()
// Microphone variables
const int sampleWindow = 50; // Sample window width in mS (50 mS = 20Hz)
unsigned int sample;
int threshold = 3;
int delayTimer = threshold;
bool initAudioListen = true;
unsigned long startMillis = 0; // Start of sample window
unsigned int peakToPeak = 0; // peak-to-peak level
unsigned int signalMax = 0, signalMin = 0;
void setup() {
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
//Blynk.begin(auth, ssid, pass, IPAddress(192, 168, 1, 2)); // local server
timer.setInterval( 100L, mainControl ); // Accesses function "mainControl" every 100 ms
}
// Menu widget "Mode Selector" attached to virtual pin 0. Sets the other Mode Selector menus to the same index
BLYNK_WRITE(0) {
Serial.println(param.asInt());
switch (param.asInt()) {
case 1: // Item 1: "---"
modeSelector = "NONE";
Blynk.virtualWrite( V1, 1 ); // Sync other Mode Selector menus
Blynk.virtualWrite( V2, 1 );
break;
case 2: // Item 2: "Manual Control"
modeSelector = "MANUAL";
Blynk.virtualWrite( V1, 2 );
Blynk.virtualWrite( V2, 2 );
break;
case 3: // Item 3: "Presets"
modeSelector = "PRESET";
Blynk.virtualWrite( V1, 3 );
Blynk.virtualWrite( V2, 3 );
break;
case 4: // Item 4: "Music"
modeSelector = "MUSIC";
Blynk.virtualWrite( V1, 4 );
Blynk.virtualWrite( V2, 4 );
break;
default:
modeSelector = "NONE";
break;
}
updateLCDs();
Serial.println(modeSelector);
}
// Menu widget "Mode Selector" attached to virtual pin 1. Sets the other Mode Selector menus to the same index
BLYNK_WRITE(1) {
Serial.println(param.asInt());
switch (param.asInt()) {
case 1: // Item 1: "---"
modeSelector = "NONE";
Blynk.virtualWrite( V0, 1 ); // Sync other Mode Selector menus
Blynk.virtualWrite( V2, 1 );
break;
case 2: // Item 2: "Manual Control"
modeSelector = "MANUAL";
Blynk.virtualWrite( V0, 2 );
Blynk.virtualWrite( V2, 2 );
break;
case 3: // Item 3: "Presets"
modeSelector = "PRESET";
Blynk.virtualWrite( V0, 3 );
Blynk.virtualWrite( V2, 3 );
break;
case 4: // Item 4: "Music"
modeSelector = "MUSIC";
Blynk.virtualWrite( V0, 4 );
Blynk.virtualWrite( V2, 4 );
break;
default:
modeSelector = "NONE";
break;
}
updateLCDs();
Serial.println(modeSelector);
}
// Menu widget "Mode Selector" attached to virtual pin 2. Sets the other Mode Selector menus to the same index
BLYNK_WRITE( V2 ) {
Serial.println(param.asInt());
switch (param.asInt()) {
case 1: // Item 1: "---"
modeSelector = "NONE";
Blynk.virtualWrite( V0, 1 ); // Sync other Mode Selector menus
Blynk.virtualWrite( V1, 1 );
break;
case 2: // Item 2: "Manual Control"
modeSelector = "MANUAL";
Blynk.virtualWrite( V0, 2 );
Blynk.virtualWrite( V1, 2 );
break;
case 3: // Item 3: "Presets"
modeSelector = "PRESET";
Blynk.virtualWrite( V0, 3 );
Blynk.virtualWrite( V1, 3 );
break;
case 4: // Item 4: "Music"
modeSelector = "MUSIC";
Blynk.virtualWrite( V0, 4 );
Blynk.virtualWrite( V1, 4 );
break;
default:
modeSelector = "NONE";
break;
}
updateLCDs();
}
BLYNK_WRITE(3) { // manual red slider
redVal = param.asInt(); // get the value on the red slider as an integer
Serial.println(param.asInt());
}
BLYNK_WRITE(4) {// manual green slider
grnVal = param.asInt(); // get the value on the green slider as an integer
Serial.println(param.asInt());
}
BLYNK_WRITE(5) {// manual blue slider
bluVal = param.asInt(); // get the value on the blue slider as an integer
Serial.println(param.asInt());
}
BLYNK_WRITE(7) {// music mode selector
switch (param.asInt()) {
case 1:
musicSelector = "NONE";
break;
case 2:
musicSelector = "RISE_ONE_COLOR";
break;
default:
musicSelector = "SELECT";
break;
}
Serial.println(musicSelector);
}
BLYNK_WRITE(20) { // zeRGBa red color
musicRedVal = param.asInt();
Serial.println(musicRedVal);
}
BLYNK_WRITE(21) { // zeRGBa green color
musicGrnVal = param.asInt();
Serial.println(musicGrnVal);
}
BLYNK_WRITE(22) { // zeRGBa blue color
musicBluVal = param.asInt();
Serial.println(musicBluVal);
}
void mainControl()
{
if ( modeSelector == "MANUAL" ) {
manualMode(); // Send to the manual control handler
}
} // end of mainControl function
void updateLCDs() // *** OPTIMIZE ***
{
if ( modeSelector != "MANUAL" ) { // updating the LCD for Manual Control tab
lcdV10.clear();
lcdV10.print( 0, 0, "Remember To Turn" );
lcdV10.print( 1, 1, "On Manual Mode" );
} else if ( modeSelector == "MANUAL" ) {
lcdV10.clear();
lcdV10.print( 1, 0, "Manual Control" );
}
if ( modeSelector != "PRESET" ) { // updating the LCD for Manual Control tab
lcdV11.clear();
lcdV11.print( 0, 0, "Remember To Turn" );
lcdV11.print( 1, 1, "On Preset Mode" );
}
else if ( modeSelector == "PRESET" ) {
lcdV11.clear();
lcdV11.print( 4, 0, "Presets" );
}
if ( modeSelector != "MUSIC" ) { // updating the LCD for Manual Control tab
lcdV12.clear();
lcdV12.print( 0, 0, "Remember To Turn" );
lcdV12.print( 1, 1, "On Music Mode" );
} else if ( modeSelector == "MUSIC" ) {
lcdV12.clear();
lcdV12.print( 1, 0, "Music Reactive" );
}
}
void manualMode() {
analogWrite( redPin, redVal );
analogWrite( grnPin, grnVal );
analogWrite( bluPin, bluVal );
}
void rise_one_color() {
if ( initAudioListen == true ) {
startMillis = millis(); // Start of sample window
peakToPeak = 0; // peak-to-peak level
signalMax = 0;
signalMin = 1024;
}
if ( millis() - startMillis < sampleWindow ) {
initAudioListen = false;
sample = analogRead( A0 );
if ( sample < 1024 ) {
if ( sample > signalMax ) {
signalMax = sample;
} else if ( sample < signalMin ) {
signalMin = sample;
}
}
} else {
initAudioListen = true;
}
if ( initAudioListen == true ) {
peakToPeak = signalMax - signalMin;
double volts = (peakToPeak * 3.3) / 1024;
if ( volts >= 0.15 ) {
tempMusicRedVal = (musicRedVal * 3);
tempMusicGrnVal = (musicGrnVal * 3);
tempMusicBluVal = (musicBluVal * 3);
analogWrite( redPin, tempMusicRedVal ); // LEDs get brighter if threshold is met
analogWrite( grnPin, tempMusicGrnVal );
analogWrite( bluPin, tempMusicBluVal );
} else {
analogWrite( redPin, musicRedVal ); // LEDs stay dim
analogWrite( grnPin, musicGrnVal );
analogWrite( bluPin, musicBluVal );
}
}
}
void loop() {
Blynk.run();
timer.run();
if ( modeSelector == "MUSIC" && musicSelector == "RISE_ONE_COLOR" ) {
rise_one_color();
}
}