commit a8ae17c219ab50f5264ab65e94f1bd360a70d8ee Author: Michel Date: Tue Dec 16 18:31:37 2014 +0100 v1.0.0 diff --git a/Schemas/Schema.ms13 b/Schemas/Schema.ms13 new file mode 100644 index 0000000..c8d399a Binary files /dev/null and b/Schemas/Schema.ms13 differ diff --git a/Sketch/Sketch.ino b/Sketch/Sketch.ino new file mode 100644 index 0000000..428fdc2 --- /dev/null +++ b/Sketch/Sketch.ino @@ -0,0 +1,77 @@ +/************************************* + * 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 new file mode 100644 index 0000000..a4fe6c5 --- /dev/null +++ b/Sketch_visualPWM/Sketch_visualPWM.ino @@ -0,0 +1,110 @@ +/************************************* + * 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 OLED_RESET 4 + +// Aanmaken benodigde variabelen +int temp0; +int currentLedPwmDisp; + +// Initialisatie Adafruit_SSD1306 +Adafruit_SSD1306 display(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/Tekeningen/Board.dwg b/Tekeningen/Board.dwg new file mode 100644 index 0000000..583a055 Binary files /dev/null and b/Tekeningen/Board.dwg differ diff --git a/Tekeningen/Board.pdf b/Tekeningen/Board.pdf new file mode 100644 index 0000000..5ce3307 Binary files /dev/null and b/Tekeningen/Board.pdf differ diff --git a/Tekeningen/Board.txt b/Tekeningen/Board.txt new file mode 100644 index 0000000..c08c03f --- /dev/null +++ b/Tekeningen/Board.txt @@ -0,0 +1,6 @@ +Uitleg kleuren: +Violet: Tekst +Rood: Onderzijde +Groen: Bovenzijde +Zwart: Onderdeel van het bord +Geel: Toekomst? \ No newline at end of file diff --git a/leesmij.txt b/leesmij.txt new file mode 100644 index 0000000..c58f36b --- /dev/null +++ b/leesmij.txt @@ -0,0 +1,7 @@ ++------------------------------+ +| Kerstboomshield voor Arduino | ++------------------------------+ + +De Kerstboomshield voor Arduino is een PWM-driver voor 4 LED-reeksen (LED-arrays) welke te vinden zijn in mini-kerstboompjes met bijv. 16 LED's (4x4 LED's). +De PWM-pulsen (4x) zijn volledig willekeurig waardoor er geen patroon te herkennen is. +Doormiddel van een potmeter is de snelheid in te stellen. \ No newline at end of file