diff --git a/platformio.ini b/platformio.ini index 83ee477..41867f4 100644 --- a/platformio.ini +++ b/platformio.ini @@ -1,10 +1,4 @@ -[platformio] -;src_dir = src_visualpwm - [env:uno] platform = atmelavr board = uno framework = arduino -lib_deps = -; adafruit/Adafruit GFX Library@^1.4.9 ; Only used in src_visualpwm -; adafruit/Adafruit SSD1306@^1.2.9 ; Only used in src_visualpwm diff --git a/src/main.cpp b/src/main.cpp index 9ab1703..0a40b59 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,22 +4,46 @@ * Website: www.batssoft.nl *************************************/ +// 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 +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() { @@ -29,57 +53,82 @@ void setup() // 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() { - // 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++) + if (state == 1) { - // 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); - } + // 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); - // Controleren of de LED(-array) feller of zwakker moet gaan branden op basis van countLedUp - if (countLedUp[i] == 1) + // Loop om door het aantal volgens ledCount te gaan + if (sketchDelay <= 0) { - // currentLedPwm met 1 ophogen. - currentLedPwm[i]++; + 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 { - // currentLedPwm met 1 verlagen. - currentLedPwm[i]--; + sketchDelay--; } - - // 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); + if (state == false) + { + for (int i = 0; i <= (ledCount - 1); i++) + { + analogWrite(ledPin[i], 0); + } + } } diff --git a/src_visualpwm/main.cpp b/src_visualpwm/main.cpp deleted file mode 100644 index 1f8da57..0000000 --- a/src_visualpwm/main.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/************************************* - * arduino-kerstboomshield-visualpwm - * Author: Michel Bats - * Website: www.batssoft.nl - *************************************/ - -// Bibliotheken -#include -#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); -}