NodeMCU Breathing.
The first sketch used to test an Arduino compatible board is Blink.
After run Blink in my new NodeMCU Development Kit,
Started experiments with the WiFi connection:
-Mini servers to control leds, servos, etc..
-Send light intensity and temperature to ThingSpeak, Xively, Plotly etc..
-Serial data bridges
-etc.
The blue led in the board was used to signal the execution of a particular procedure.
Because the GPIO16 (DO) limitation to use the analogWrite() and looking to see my LED doing something else…
Inspired by the Apple’s “breathing” pattern used for the sleep indicator.
Here is the code to generate a “breathing LED”.
NOTE:
The Arduino code runs inside a multitasking application, the ESP8266 is running at the same time TCP and WiFi stacks.
The sketch can breake the multitasking execution if your code runs in a blocking section.
The delayMicroseconds() is one of those blocking functions, delay(0) was used to prevent watchdog reset inside the PWM loops.
CODE:
#define LED D0 // Led in NodeMCU at pin GPIO16 (D0). #define BRIGHT 350 //max led intensity (1-500) #define INHALE 1250 //Inhalation time in milliseconds. #define PULSE INHALE*1000/BRIGHT #define REST 1000 //Rest Between Inhalations. //----- Setup function. ------------------------ void setup() { pinMode(LED, OUTPUT); // LED pin as output. } //----- Loop routine. -------------------------- void loop() { //ramp increasing intensity, Inhalation: for (int i=1;i<BRIGHT;i++){ digitalWrite(LED, LOW); // turn the LED on. delayMicroseconds(i*10); // wait digitalWrite(LED, HIGH); // turn the LED off. delayMicroseconds(PULSE-i*10); // wait delay(0); //to prevent watchdog firing. } //ramp decreasing intensity, Exhalation (half time): for (int i=BRIGHT-1;i>0;i--){ digitalWrite(LED, LOW); // turn the LED on. delayMicroseconds(i*10); // wait digitalWrite(LED, HIGH); // turn the LED off. delayMicroseconds(PULSE-i*10); // wait i--; delay(0); //to prevent watchdog firing. } delay(REST); //take a rest... }
Open in site view.
ReplyDelete