Even wat kleiner projectjes er tussen doen.
Ik vroeg me af of ik dit goed aangesloten had.
IK vind de led heel fel branden en de led lijkt te flikkeren ?
Even wat kleiner projectjes er tussen doen.
Ik vroeg me af of ik dit goed aangesloten had.
IK vind de led heel fel branden en de led lijkt te flikkeren ?
Welke LED? De RGB LED of de rode LED?
Heb je het vergeleken met de LEDs in het voetgangsoversteekplaats project? Je kunt daar ook tijdelijk een RGB LED in zetten en kijken of daar hetzelfde gebeurt. Wees je ervan bewust dat de RGB led in wokwi misschien wat anders werkt / lijkt te werken dan de normale LED; het lijkt erop dat de eerste wast meer diffuus is dan de tweede.
De RGB led
Ziet er in principe goed uit, maar er zijn 2 soorten RGB leds. gedeelde Anode & gedeelde Kathode.
Ik vind de RGB LED juist wat minder fel (of meer diffuus) dan de rode LED.
Het "flikkeren" (eigenlijk meer een faden) zit 'm zeer waarschijnlijk in wokwi; ik heb geen RGB LED om het in het echte leven te testen. In wokwi heb ik een digitalWrite(redPin, HIGH) in setup gezet en de analogWrite statements uit loop() verwijderd. De RGB led lijkt nog steeds wat te faden.
roelofw heeft de juiste gekozen ![]()
oke
Dan ga ik verder
De opdracht was om met de RGB led de volgende kleuren te maken
En dan de gebruiker met de seriale monitor laten vragen welke kleur de gebruiker wil zien.
Jammer dat ik hier geen switch kan gebruiken.
byte redPin = 11;
byte greenPin = 10;
byte bluePin = 9;
String myColor;
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
Serial.begin(115200);
}
void loop() {
Serial.println("Which colour do you want to see");
while (Serial.available() == 0) {}
myColor=Serial.readString();
switch(myColor) {
case "red":
showLed(255,0,0);
}
}
void showLed(int red, int green, int blue) {
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
}
vanmiddag dan maar eens puzzelen hoe dit op te lossen.
Om een heleboel if then's te gebruiken is ook lelijk
Waarom niet?
case "red" gaat niet werken omdat het een string is en switch mag alleen of een getal zijn of een char ![]()
Error wokwiki
sketch.ino: In function 'void loop()':
sketch.ino:22:17: error: switch quantity not an integer
switch(myColor) {
^
sketch.ino:23:10: error: could not convert '"red"' from 'const char [4]' to '<type error>'
case "red":
^~~~~
Error during build: exit status 1
Dat wilde ik even horen ![]()
Voor de switch heb je al een oplossing met "namen". Je probleem zit in het omzetten van gebruikers invoer naar iets dat gebruikt kan worden in de switch.
klopt, zit te denken om een struct en een lijst te gebruiken om dit werkend te krijgen.
Dit hebben we vaker gedaan.
Maar ik dacht dat jij meer tijd wilde voor je eigen projecten.
Dit zijn korte dingen waar ik niet al te lang over hoef na te denken.
Ben nu dit idee aan het proberen
#define NUMELEMENTS(x) (sizeof(x) / sizeof(x[0]))
struct COLOR {
String name;
int red;
int green;
int blue;
};
COLOR colors[] = {
{"red", 255, 0, 0}
};
byte redPin = 11;
byte greenPin = 10;
byte bluePin = 9;
String myColor;
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
Serial.begin(115200);
}
void loop() {
Serial.println("Which colour do you want to see?");
// Wait until user input is available
while (Serial.available() == 0) {}
for (uint8_t cnt = 0; cnt < NUMELEMENTS(colors); cnt++) {
if (colors[cnt].name == myColor) {
showLeds(colors[cnt].red, colors[cnt].green, colors[cnt].blue);
break;
}
}
}
void showLeds(int red, int green, int blue) {
analogWrite(redPin, red);
analogWrite(bluePin, blue);
analogWrite(greenPin, green);
}
hopelijk werkt het
Wokwi wil weer eens niet meewerken
Even een late lunch (14:15) en dan eens kijken waarom dit niet werkt.
Zie nu alleen de tekst "Which colour do you want to see?) heel snel verschijnen
werkende versie :
#define NUMELEMENTS(x) (sizeof(x) / sizeof(x[0]))
struct COLOR {
String name;
int red;
int green;
int blue;
};
COLOR colors[] = {
{"red", 255, 0, 0}
};
byte redPin = 11;
byte greenPin = 10;
byte bluePin = 9;
String myColor;
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
Serial.begin(115200);
}
void loop() {
Serial.println("Which colour do you want to see?");
// Wait until user input is available
while (Serial.available() == 0) {}
myColor = Serial.readString();
for (uint8_t cnt = 0; cnt < 1 ; cnt++) {
if (colors[cnt].name == myColor) {
showLeds(colors[cnt].red, colors[cnt].green, colors[cnt].blue);
break;
}
}
}
void showLeds(int red, int green, int blue) {
analogWrite(redPin, red);
analogWrite(bluePin, blue);
analogWrite(greenPin, green);
}
nu meer kleuren toevoegen en dan klaar
en het programma is af en werkend
#define NUMELEMENTS(x) (sizeof(x) / sizeof(x[0]))
struct COLOR {
String name;
int red;
int green;
int blue;
};
COLOR colors[] = {
{"red", 255, 0, 0},
{"green", 0, 255, 0},
{"blue", 0, 0, 255},
{"off", 0, 0, 0},
{"yellow", 255, 255, 0},
{"cyan", 92, 255, 255},
{ "magneta", 255, 0, 255},
{"aqua", 0, 255, 255}
};
byte redPin = 11;
byte greenPin = 10;
byte bluePin = 9;
String myColor;
bool found = false;
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
Serial.begin(115200);
}
void loop() {
Serial.println("Which colour do you want to see?");
// Wait until user input is available
while (Serial.available() == 0) {}
myColor = Serial.readString();
for (uint8_t cnt = 0; cnt < NUMELEMENTS(colors) ; cnt++) {
if (colors[cnt].name == myColor) {
showLeds(colors[cnt].red, colors[cnt].green, colors[cnt].blue);
found = true;
break;
}
}
if (!found) {
Serial.println("");
Serial.println("I do not know that color");
Serial.println("");
showLeds(0, 0, 0);
} else {
found = false;
}
}
void showLeds(int red, int green, int blue) {
analogWrite(redPin, red);
analogWrite(bluePin, blue);
analogWrite(greenPin, green);
}
het mooiste zou zijn als er een fade effect zou komen maar dan moet ik denk ik even goed google gebruiken om te zien hoe dat gaat werken.
Denk dat ik hier wel een voldoende heb verdiend
Define "fade effect".
Als je goed weet te beschrijven wat je wil bereiken, kom je misschien wel dichter bij de uitvoering ervan.
Wat ik in mijn hoofd heb, is dat de oude kleur heel langzaam verandert in de nieuwe kleur.
Dus als voorbeeld
de led is rood
En nu voer je paars in
Dat de led dus langzaam verandert van rood naar paars
Er zijn verschillende manieren om dat te doen.
1 manier is
Dan kan je aan de hand van de verstreken tijd berekenen wat dan het resultaat moet zijn voor elke kleur component.
de 3 8-bit waardes kan je elk berekenen door middel van een 16-berekening (floating point hoeft niet) of je zou zelfs de map() functie kunnen gebruiken.
Het is een mooie oefening en niet echt eenvoudig, maar doe een poging en dan help ik je verder.
Hoe je het verder in je programma in past is weer een ander ding natuurlijk.
ik ben nu zover : https://wokwi.com/projects/445530722430353409
maar ik zie even niet hoe ik de rode kleur van de beginkleur krijg
en hoe ik de rode kleur van de eindkleur krijg.
Heb jij een idee ?
Ik weet niet of het wel telt als een poging.
Ik raad je zoieso aan om millis() te gebruiken, maar dmv stapjes is het ongeveer zo.
Je weet waar je begint met tellen, en je weet waar je stopt.
kleur.R = map(dezeStap, beginStap, eindStap, beginKleur.R, eindKleur.R);
Je kan millis() gebruiken, maar dan moet je het begin punt meten, en voordat je de map() functie gebruikt eerst de verstreken tijd berekenen. map() werkt met 16-bit variabelen en millis() met 32-bit. De verstreken tijd (sinds het begin vd fade) zal normaal gesproken niet groter zijn dan 16-bit. Als de fade voorbij is hoef je 'm natuurlijk niet meer te berekenen.