Even kort voorstellen ik ben Daan normaliter meer bezig meer bezig met reparatie en bouwen van elektronika (hardwired) maar sinds kort ook de smaak te pakken gekregen nadat ik op eigen houtje met wat gerommel het Nightrider effect voor elkaar heb kunnen krijgen.
Maar nu loop ik vast op de Curly braces { in mijn sketch ik probeer in ipv van een led meerdere leds om de beurt te laten faden.
Om te beginnen met uitgang pin 10 en pin 11
Maar krijg steeds de melding dat de invoer niet correct is.
Ik heb uiteraard eerst gegoogled op de foutcode's die ik kreeg maar dat gaf mij niet de juiste richting tot in tegenstelling van mijn eerdere project.
Plaats a.u.b. geen plaatjes van je programma of van foutmelding; het is een nachtmerrie om dat over te typen / kopiëren. Zie Hoe haal je het meeste uit het forum.
Waarin moet ik dit dan veranderen? want als ik deze 3 regels verwijder dan werkt het helemaal niet meer.
Maar als ik deze file aanpas met alleen pinMode naar pin 10 en analogWrite naar pin 10 en ik laat dan int led op 9 staan dan werkt het wel dan licht pin 10 op.
En ga zo maar door naar de aantal pwm pinnen die de arduino heeft.?
Ik had wel al 2x de pinMode en analogWrite gebruikt maar wat is beter of werkt beter?
Zo:
void setup () {
pinMode(10 OUTPUT) ;
Void setup() {
pinMode(11 OUTPUT);
}
void loop() {
analogwrite(10, brightness);
void loop() {
analogWrite(11, brightness);
En dan de rest van de onderstaande tekst?
Of
void setup() {
pinMode( 10, OUTPUT);
}
void loop() {
analogWrite( 10, brightness);
En dan de rest van de onderstaande tekst met daarachter het complete stukje van de aansturing voor de volgende led? (led 11 )
Rest me nog een vraag ik zit ook op Circuits Online daar wordt het gewaardeerd dat je ook oplossingen achterlaat zodat anderen er ook wat aan hebben is hier ook een sectie of een draadje dat als het werkt dat ik het hier kan posten zodat ik iemand anders er mee kan helpen?
Dit is niet optimaal. Je geeft zelf aan "En ga zo maar door naar de aantal pwm pinnen die de arduino heeft.?" en als je meer PWM pinnen wilt gebruiken wordt het een zooitje.
Dan kun je beter arrays gaan gebruiken. Hieronder een voorbeeld
// array met led pinnen
int ledPins[] = { 10, 11 };
void setup()
{
// zet all led pinnen als uitgang
for (uint8_t cnt = 0; cnt < 2; cnt++)
{
pinMode(ledPins[cnt], OUTPUT);
}
}
void loop()
{
digitalWrite(ledPins[0], HIGH);
delay(500);
digitalWrite(ledPins[0], LOW);
digitalWrite(ledPins[1], HIGH);
delay(500);
digitalWrite(ledPins[1], LOW);
delay(500);
}
Wees je er van bewust dat het eerste element van een array de index 0 heeft.
loop() zal nog steeds wat gecompliceerd zijn op deze manier maar de juiste benadering hangt ervan af wat je uiteindelijk wilt bereiken.
Als je het aanpast naar 3 LEDs wordt de eerste regel b.v. int ledPins[] = { 10, 11, 12 }; en moet je de for-loop aanpassen naar for (uint8_t cnt = 0; cnt < 3; cnt++).
Er is altijd een kans dat je één van de twee vergeet en je programma niet doet wat je verwacht. Dat kun je oplossen door een macro te gebruiken die berekent hoeveel elementen er in een array zitten. Zet het onderstaande aan het begin van je programma.
// macro die het aantal elementen van enig array (byte, int, float, struct etc) berekent
#define NUMELEMENTS(x) (sizeof(x) / sizeof(x[0]))
en de for-loop wordt dan
// zet all led pinnen als uitgang
for (uint8_t cnt = 0; cnt < NUMELEMENTS(ledPins); cnt++)
Op deze manier is het gemakkelijk aan te passen (pin meer, pin minder) en is er geen risico op fouten.
int ledPin1 = 3; // LED connected to digital pin 9
int ledPin2 = 5;
int ledPin3 = 6;
int ledPin4 = 9;
int ledPin5 = 10;
int ledPin6 = 11;
void setup() {
// nothing happens in setup
}
void loop() {
// fade in from min to max in increments of 5 points:
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
// sets the value (range from 0 to 255):
analogWrite(ledPin1, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(50);
}
// fade out from max to min in increments of 5 points:
for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {
// sets the value (range from 0 to 255):
analogWrite(ledPin1, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(50);
}
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
// sets the value (range from 0 to 255):
analogWrite(ledPin2, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(50);
}
// fade out from max to min in increments of 5 points:
for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {
// sets the value (range from 0 to 255):
analogWrite(ledPin2, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(50);
}
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
// sets the value (range from 0 to 255):
analogWrite(ledPin3, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(50);
}
// fade out from max to min in increments of 5 points:
for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {
// sets the value (range from 0 to 255):
analogWrite(ledPin3, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(50);
}
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
// sets the value (range from 0 to 255):
analogWrite(ledPin4, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(50);
}
// fade out from max to min in increments of 5 points:
for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {
// sets the value (range from 0 to 255):
analogWrite(ledPin4, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(50);
}
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
//sets the value ( range from 0 to 255):
analogWrite(ledPin5, fadeValue) ;
// wait for 30 milliseconds to see the dimming effect
delay(50);
}
//fade out from max to min in increments of 5 points:
for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {
//sets the value (range from 0 to 255):
analogWrite(ledPin5, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(50) ;
}
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
//sets the value ( range from 0 to 255):
analogWrite(ledPin6, fadeValue) ;
// wait for 30 milliseconds to see dimming effect
delay(50) ;
}
//fade out from max to min in increments of 5 points:
for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {
//sets the value ( range from 0 to 255):
analogWrite (ledPin6, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(50) ;
}
}
Ik heb het voor elkaar gekregen door op via google voorbeelden te bekijken hoe ik de sketch kon uitbreiden of samen kon voegen.
En met ook jullie hulp werkt het nu.
Door nu op de uitgangen mosfetts ( transistors) aan te sluiten kun je er meerdere heldere leds of nog mooier gloeilampjes mee aansturen.
Dit kun je doen door een transistor in de low side aan te sturen.
Zo kun je een kerstboompje laten twinkelen of een sterrenhemel maken voor de kinderkamer.
Ik hoop dat anderen er wat aan hebben.
Nogmaals bedankt .
grt Daan
Je hebt wel een erg vreemde delay. Een delay(50) die 30ms duurt Oftewel: een commentaar dat niet overeenkomt met wat het programma doet kun je net zo goed achterwege laten
Nog meer gezeur over commentaren:
Ledpin1 = 3; wordt er van beschuldigd dat ie op pin 9 terechtkomt, en daar geloof ik helemaal niets van.
Verder nog iets over de delays:
Elke LED loopt nu van maximaal naar minimaal, en dan weer andersom, daarna is de volgende LED aan de beurt.
Iedere LED heeft daar dus 102 stapjes van 50 milliseconden voor nodig, ruim 5 seconden.
Dat is prima voor een voorbeeld, maar hiermee is de code niet erg efficient.
Verder zul je het dimmen, wanneer je er heel goed op let, niet mooi zien verlopen.
Want voor het oog zal er niet veel gebeuren tussen het ene stapje en de volgende.
Dat komt omdat onze licht sensoren (ogen) een meer logarithmische gevoeligheid hebben.
Het opbouwen kun je daarom beter doen door de waarde telkens te verdubbelen, en hoe je het afbouwen dan kunt doen kun je wel raden.
Daarmee kom je wel op minder stapjes uit.
Wanneer je werkelijk een sterrenhemel wil maken, kom je er met deze code niet, omdat je dan niet een voor een je lampjes wil aansturen.