diff --git a/Sketch/Sketch.ino b/Sketch/Sketch.ino deleted file mode 100644 index 428fdc2..0000000 --- a/Sketch/Sketch.ino +++ /dev/null @@ -1,77 +0,0 @@ -/************************************* - * Kerstboomshield voor Arduino - * Author: Michel Bats - * Website: www.batssoft.nl - * Version: 1.0.0 - * Revision: 20141216 - *************************************/ - -// Bepalingen -int ledPin[] = { - 6 ,9 ,10,11}; // Uitgangen met PWM-mogelijkheden -int randomLed[] = { - 0 ,0 ,0 ,0 }; // Variabele om te gebruiken bij het aftellen tot het moment van omschakelen -int countLedUp[] = { - 0 ,0 ,0 ,0 }; // Variabele waarbij bij 1 de LED feller moet gaan branden en bij 0 zwakker -int currentLedPwm[] = { - 0 ,0 ,0 ,0 }; // Variabele waarin de huidige PWM-waarde is opgeslagen (0-255) -int ledCount = 4; // Aantal aangesloten LED's (of LED-arrays) -int delayPot = A5; // Ingang potmeter - -// Aanmaken benodigde variabelen -int temp0; - -void setup() { - // Loop om door het aantal volgens ledCount te gaan - for (int i=0; i <= (ledCount-1); i++){ - // eerst initialisatie van de PWM-puls op de uitgangen - analogWrite(ledPin[i], currentLedPwm[i]); - } -} - -void loop() { - // Uitlezen potmeter voor instelling vertraging (delay()) - int delayPotValue = analogRead(delayPot); - // Gegevens potmeter omzetten naar 1 t/m 25ms voor de delay() - int delayPotValueMap = map(delayPotValue, 0, 1023, 1, 25); - - // Loop om door het aantal volgens ledCount te gaan - for (int i=0; i <= (ledCount-1); i++){ - // Controleren of randomLed 0 of kleiner is zodat deze een nieuwe waarde kan krijgen (random() tussen max in de nieuwe richting en de helft van max en huidige waarde) - if (randomLed[i] <= 0){ - // Waarde countLedUp omdraaien - countLedUp[i] = map (countLedUp[i], 1, 0, 0, 1); - // Controleren of countLedUp nu 1 of 0 is. - if (countLedUp[i] == 1) { - // In geval van een 1: temp0 vullen met de maximaal aantal stappen tussen currentLedPwm en de maximale PWM-puls-waarde (255). - temp0 = 255 - currentLedPwm[i]; - } else { - // In geval van een 0: temp0 vullen met currentLedPwm aangezien dat de stappen zijn tot de minimale waarde voor een PWM-puls (0). - temp0 = currentLedPwm[i]; - } - // radom() waarde aanmaken tussen het maximale verschil en de helft daarvan. - randomLed[i] = random(temp0/2, temp0); - } - - // Controleren of de LED(-array) feller of zwakker moet gaan branden op basis van countLedUp - if (countLedUp[i] == 1) { - // currentLedPwm met 1 ophogen. - currentLedPwm[i]++; - } else { - // currentLedPwm met 1 verlagen. - currentLedPwm[i]--; - } - - // randomLed met 1 verlagen. - randomLed[i]--; - - // De waarde van currentLedPwm wegschrijven naar de uitgang van de LED(-array) - analogWrite(ledPin[i], currentLedPwm[i]); - } - - // Pauze inlassen met het aantal ms volgens delayPotValueMap - delay(delayPotValueMap); -} - - - diff --git a/Sketch_visualPWM/Sketch_visualPWM.ino b/Sketch_visualPWM/Sketch_visualPWM.ino deleted file mode 100644 index c9262b1..0000000 --- a/Sketch_visualPWM/Sketch_visualPWM.ino +++ /dev/null @@ -1,112 +0,0 @@ -/************************************* - * Kerstboomshield voor Arduino - * Author: Michel Bats - * Website: www.batssoft.nl - * Version: 1.0.0 - * Revision: 20141216 - *************************************/ - -// Bibliotheken -#include -#include -#include -#include - -// Bepalingen -int ledPin[] = { - 6 ,9 ,10,11}; // Uitgangen met PWM-mogelijkheden -int randomLed[] = { - 0 ,0 ,0 ,0 }; // Variabele om te gebruiken bij het aftellen tot het moment van omschakelen -int countLedUp[] = { - 0 ,0 ,0 ,0 }; // Variabele waarbij bij 1 de LED feller moet gaan branden en bij 0 zwakker -int currentLedPwm[] = { - 0 ,0 ,0 ,0 }; // Variabele waarin de huidige PWM-waarde is opgeslagen (0-255) -int ledCount = 4; // Aantal aangesloten LED's (of LED-arrays) -int delayPot = A5; // Ingang potmeter -// Bepalingen Display -#define OLED_ADDR 60 // 60 = 0x3C / 61 = 0x3D -#define SCREEN_WIDTH 128 // OLED-scherm breedte, in pixels -#define SCREEN_HEIGHT 64 // OLED-scherm hoogte, in pixels -#define OLED_RESET 4 - -// Aanmaken benodigde variabelen -int temp0; -int currentLedPwmDisp; - -// Initialisatie Adafruit_SSD1306 -Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); - -void setup() { - // Start Display - display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR,HEX); - display.clearDisplay(); - - // Loop om door het aantal volgens ledCount te gaan - for (int i=0; i <= (ledCount-1); i++){ - // eerst initialisatie van de PWM-puls op de uitgangen - analogWrite(ledPin[i], currentLedPwm[i]); - } -} - -void loop() { - // Uitlezen potmeter voor instelling vertraging (delay()) - int delayPotValue = analogRead(delayPot); - // Gegevens potmeter omzetten naar 1 t/m 25ms voor de delay() - int delayPotValueMap = map(delayPotValue, 0, 1023, 1, 25); - - // Loop om door het aantal volgens ledCount te gaan - for (int i=0; i <= (ledCount-1); i++){ - // Controleren of randomLed 0 of kleiner is zodat deze een nieuwe waarde kan krijgen (random() tussen max in de nieuwe richting en de helft van max en huidige waarde) - if (randomLed[i] <= 0){ - // Waarde countLedUp omdraaien - countLedUp[i] = map (countLedUp[i], 1, 0, 0, 1); - // Controleren of countLedUp nu 1 of 0 is. - if (countLedUp[i] == 1) { - // In geval van een 1: temp0 vullen met de maximaal aantal stappen tussen currentLedPwm en de maximale PWM-puls-waarde (255). - temp0 = 255 - currentLedPwm[i]; - } - else { - // In geval van een 0: temp0 vullen met currentLedPwm aangezien dat de stappen zijn tot de minimale waarde voor een PWM-puls (0). - temp0 = currentLedPwm[i]; - } - // radom() waarde aanmaken tussen het maximale verschil en de helft daarvan. - randomLed[i] = random(temp0/2, temp0); - } - - // Controleren of de LED(-array) feller of zwakker moet gaan branden op basis van countLedUp - if (countLedUp[i] == 1) { - // currentLedPwm met 1 ophogen. - currentLedPwm[i]++; - } - else { - // currentLedPwm met 1 verlagen. - currentLedPwm[i]--; - } - - // randomLed met 1 verlagen. - randomLed[i]--; - - // De waarde van currentLedPwm wegschrijven naar de uitgang van de LED(-array) - analogWrite(ledPin[i], currentLedPwm[i]); - - currentLedPwmDisp = map(currentLedPwm[i], 0, 255, 0, 127); - - // Lijnen tekenen voor visuele weergave (op het scherm) van de gegevens - display.drawLine(0, (16*(i))+7, 127, (16*(i))+7, WHITE); - display.drawLine(0, (16*(i)), 0, (16*(i))+14, WHITE); - display.drawLine(127, (16*(i)), 127, (16*(i))+14, WHITE); - display.drawLine(currentLedPwmDisp, (16*(i))+4, currentLedPwmDisp, (16*(i))+10, WHITE); - //display.fillRect(currentLedPwmDisp, (16*(i)), currentLedPwmDisp, (16*(i))+14, WHITE); - } - - // Uitvoer display - display.display(); - display.clearDisplay(); - - // Pauze inlassen met het aantal ms volgens delayPotValueMap - delay(1); -} - - - - diff --git a/platformio.ini b/platformio.ini index c3307a8..2134292 100644 --- a/platformio.ini +++ b/platformio.ini @@ -1,4 +1,4 @@ -; PlatformIO Project Configuration File +;PlatformIO Project Configuration File ; ; Build options: build flags, source filter ; Upload options: custom upload port, speed and extra flags @@ -8,14 +8,7 @@ ; Please visit documentation for the other options and examples ; https://docs.platformio.org/page/projectconf.html -[platformio] -src_dir = Sketch -src_dir = Sketch_visualPWM - [env:uno] platform = atmelavr board = uno framework = arduino -lib_deps = - Adafruit GFX Library - Adafruit SSD1306 diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..bfc792d --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,118 @@ +/************************************* + * Kerstboomshield voor Arduino + ESP8266 + * Author: Michel Bats + * Website: www.batssoft.nl + * Version: 2.0.0 + * Revision: 20191228 + *************************************/ + +// Bibliotheken +#include + +// Bepalingen +int ledPin[] = { + 6 ,9 ,10,11}; // Uitgangen met PWM-mogelijkheden +int randomLed[] = { + 0 ,0 ,0 ,0 }; // Variabele om te gebruiken bij het aftellen tot het moment van omschakelen +int countLedUp[] = { + 0 ,0 ,0 ,0 }; // Variabele waarbij bij 1 de LED feller moet gaan branden en bij 0 zwakker +int currentLedPwm[] = { + 0 ,0 ,0 ,0 }; // Variabele waarin de huidige PWM-waarde is opgeslagen (0-255) +int ledCount = 4; // Aantal aangesloten LED's (of LED-arrays) +int delayPot = A5; // Ingang potmeter + +// Aanmaken benodigde variabelen +int temp0; +bool state = false; // Wordt gebruikt om de huidige status in weg te schrijven +int sketchDelay = 0; // Om in plaats van een delay een aantal keer geen data te schrijven. + +String inputString = ""; // Een sting om inkomende data in weg te schrijven. + +void serialEvent() { + while (Serial.available()) { + // Haal de nieuwe byte op. + char inChar = (char)Serial.read(); + // Verander het in een string. + inputString = inChar; + // Als de nieuwe waarde iets is om wat mee te doen pas state dan aan. + if(inputString == "1"){ + state = true; + Serial.println("ON"); + } else if(inputString == "0"){ + state = false; + Serial.println("OFF"); + } + inputString = ""; + } +} + +void setup() { + // Loop om door het aantal volgens ledCount te gaan + for (int i=0; i <= (ledCount-1); i++){ + // eerst initialisatie van de PWM-puls op de uitgangen + analogWrite(ledPin[i], currentLedPwm[i]); + } + + // Initialiseer seriƫle verbinding + Serial.begin(9600); + // reserveer 200 bytes voor de inputString: + inputString.reserve(200); +} + +void loop() { + if (state == 1) { + // Uitlezen potmeter voor instelling vertraging (delay()) + int delayPotValue = analogRead(delayPot); + // Gegevens potmeter omzetten naar 1 t/m 25ms voor de delay() + int delayPotValueMap = map(delayPotValue, 0, 1023, 1, 100); + + // Loop om door het aantal volgens ledCount te gaan + if (sketchDelay <= 0) { + for (int i=0; i <= (ledCount-1); i++){ + // Controleren of randomLed 0 of kleiner is zodat deze een nieuwe waarde kan krijgen (random() tussen max in de nieuwe richting en de helft van max en huidige waarde) + if (randomLed[i] <= 0){ + // Waarde countLedUp omdraaien + countLedUp[i] = map (countLedUp[i], 1, 0, 0, 1); + // Controleren of countLedUp nu 1 of 0 is. + if (countLedUp[i] == 1) { + // In geval van een 1: temp0 vullen met de maximaal aantal stappen tussen currentLedPwm en de maximale PWM-puls-waarde (255). + temp0 = 255 - currentLedPwm[i]; + } else { + // In geval van een 0: temp0 vullen met currentLedPwm aangezien dat de stappen zijn tot de minimale waarde voor een PWM-puls (0). + temp0 = currentLedPwm[i]; + } + // radom() waarde aanmaken tussen het maximale verschil en de helft daarvan. + randomLed[i] = random(temp0/2, temp0); + } + + // Controleren of de LED(-array) feller of zwakker moet gaan branden op basis van countLedUp + if (countLedUp[i] == 1) { + // currentLedPwm met 1 ophogen. + currentLedPwm[i]++; + } else { + // currentLedPwm met 1 verlagen. + currentLedPwm[i]--; + } + + // randomLed met 1 verlagen. + randomLed[i]--; + + // De waarde van currentLedPwm wegschrijven naar de uitgang van de LED(-array) + analogWrite(ledPin[i], currentLedPwm[i]); + } + + // Pauze inlassen met het aantal ms volgens delayPotValueMap + // delay(delayPotValueMap); + + sketchDelay = delayPotValueMap; + } else { + sketchDelay--; + } + } + + if(state == false) { + for (int i=0; i <= (ledCount-1); i++){ + analogWrite(ledPin[i], 0); + } + } +}