Helemaal goed.
Als ik mijn post aanpas, zal ik daarvoor kleurtjes gebruiken om zo misverstanden te en/of een te groot aantal berichten te voorkomen.
Kijk dus ook eens terug of je kleurtjes ziet verschijnen in mijn berichten.
Het maakt voor mij en voor de Arduino niet uit of je hardwarematige of softwarematige aanpassingen maakt.
Ale je uiteindelijk ook maar er voor zorgt dan eventueel commentaren wel kloppen.
Ook moet je er nog voor zorgen dat de LED die niet niet meer aanstuurt omdat ze buiten de staart gevallen zijn, dat je die uitzet.
Ik ga nu even wat anders doen, kijk vanavond weer verder.
Wilde eerst zeker weten of ik alles tot nu toe goed begrepen heb.
Denk erna om de weerstanden te verplaatsen.
Wordt de code en de helderheid wel beter van denk ik.
Zit weer eens vast met het uitzetten van de goede leds.
Code tot zover :
// Alle pinnen van de leds
const uint8_t ledPins[] = { 9, 11, 10, 6, 3, 5 };
// de pin van de potmeter
byte Potpin = A3;
// de waarde die de potmeter aangeeft
int Potvalue;
// houdt de index bij van de huidige brandende led
byte currentLed = 0;
// houdt de index bij van de eerste led van de staart
byte trail1 = 1 ;
// houdt de index bij van de tweede led van de staart
byte trail2 = 2 ;
// houdt de index bij van de derde led van de staart
byte trail3 = 3;
void setup()
{
// Zet de seriele monitor aan
Serial.begin(115200);
Serial.println(F("Start"));
for (uint8_t cnt = 0; cnt < sizeof(ledPins); cnt++)
{
// Zet alle leds uit
digitalWrite(ledPins[cnt], HIGH);
// Zet de pin mode op output
pinMode(ledPins[cnt], OUTPUT);
}
}
void loop()
{
// Lees de waarde van de potmeter
Potvalue = analogRead(Potpin);
if (Potvalue < 512)
{
////////////////////////
// aansturen LEDs
////////////////////////
Serial.print(F("Aan: "));
Serial.println(currentLed);
Serial.print(F("Trail1: "));
Serial.println(trail1);
Serial.print(F("Trail2: "));
Serial.println(trail2);
Serial.print(F("Trail3: "));
Serial.println(trail3);
// Zet de led die de index currentLed heeft aan.
analogWrite(ledPins[currentLed], 0);
analogWrite(ledPins[trail1], 138);
analogWrite(ledPins[trail2], 201);
analogWrite(ledPins[trail3], 230);
Serial.print(F("Uit: "));
if (currentLed == 0)
{
Serial.println(sizeof(ledPins) - 1);
digitalWrite(ledPins[sizeof(ledPins) - 1], HIGH);
}
else
{
Serial.println(currentLed - 1);
// UIzetten van de goede leds
// Dit zie ik even niet. Kan trail3-x gebruiken maar dan kan er weer een negatieve index komen.
}
/*
////////////////////////
// aanpassen currentLed
////////////////////////
currentLed++;
if (currentLed == sizeof(ledPins))
{
Serial.println(F("Overflow"));
currentLed = 0;
}
}
if (Potvalue > 512)
{
////////////////////////
// aansturen LEDs
////////////////////////
Serial.print(F("Aan: "));
Serial.println(currentLed);
digitalWrite(ledPins[currentLed], LOW);
Serial.print(F("Uit: "));
if (currentLed == sizeof(ledPins) - 1)
{
Serial.println(ledPins[0]);
digitalWrite(ledPins[0], HIGH);
}
else
{
Serial.println(currentLed + 1);
digitalWrite(ledPins[currentLed + 1], HIGH);
}
////////////////////////
// aanpassen currentLed
////////////////////////
if (currentLed == 0)
{
Serial.println(F("Overflow"));
currentLed = sizeof(ledPins) - 1;
} else {
currentLed--;
}
*/
}
delay(500);
}
Ik heb je laatste code nog niet bekeken, maar je hoeft de juiste LEDs niet uit te zetten.
Zet ze allemaal uit, net voordat je de goede weer aanzet.
Hoef je er verder niet over na te denken.
Dit zal zo snel gaan dat je het met je eigen ogen nooit zal zien.
Zet bij het definieren van trail1 t/m trail3 ze allemaal op dezelfde waarde als currentLed.
sterretje had daar een opmerking over, maar het is juist mijn bedoeling dat dit zo gedaan wordt en sterretje's bezwaar is echt niet van toepassing.
Wanneer je dit werkend hebt zul je zien waarom dit zo bedoeld is.
// Alle pinnen van de leds
const uint8_t ledPins[] = { 9, 11, 10, 6, 3, 5 };
// de pin van de potmeter
byte Potpin = A3;
// de waarde die de potmeter aangeeft
int Potvalue;
// houdt de index bij van de huidige brandende led
byte currentLed = 0;
// houdt de index bij van de eerste led van de staart
byte trail1 = 0 ;
// houdt de index bij van de tweede led van de staart
byte trail2 = 0 ;
// houdt de index bij van de derde led van de staart
byte trail3 = 0;
void setup()
{
// Zet de seriele monitor aan
Serial.begin(115200);
for (uint8_t cnt = 0; cnt < sizeof(ledPins); cnt++)
{
// Zet alle leds uit
analogWrite(ledPins[cnt], 0);
// Zet de pin mode op output
pinMode(ledPins[cnt], OUTPUT);
trail1 = 2;
trail2 = 3;
trail3 = 4;
}
}
void loop()
{
// Lees de waarde van de potmeter
Potvalue = analogRead(Potpin);
if (Potvalue < 512)
{
////////////////////////
// aansturen LEDs
////////////////////////
// Zet de led die de index currentLed heeft aan.
analogWrite(ledPins[currentLed], 255);
analogWrite(ledPins[trail1], 117);
analogWrite(ledPins[trail2], 54);
analogWrite(ledPins[trail3], 25);
delay(500);
analogWrite(ledPins[trail1],0);
analogWrite(ledPins[trail2],0);
analogWrite(ledPins[trail3], 0);
trail3 = trail2;
trail2 = trail1;
trail1 = currentLed;
////////////////////////
// aanpassen currentLed
////////////////////////
currentLed++;
if (currentLed == sizeof(ledPins))
{
Serial.println(F("Overflow"));
currentLed = 0;
}
}
}
het lijkt te werken alleen zie ik de led nu wel aan en uit flikkeren.
Bijna, maar nog niet helemaal.
Je definieert trail1, trail2 en trail3 met de inhoud nul en vervolgens geef je er in setup een andere waarde aan.
Dat gedeelte in setup mag je weghalen en trail1,2,3 gewoon laten zoals ze zijn.
Die worden in loop() verder behandeld.
Verder moet ik nog even kijken want ergens gaat er nog iets mis en zie ik ook iets knipperen waar dat niet hoort.
Ik heb even wat gespeeld, en na de wijzigingen hier geadviseerd lijkt het wel goed te gaan en zie ik niets meer ongewild knipperen.
Ik moet wel zeggen dat ik niet heel erg gecharmeerd ben van dat Wokwi, omdat het toch niet helemaal toont wat je werkelijk zou zien en wel blijft zeuren of je niet wil gaan betalen voor het gebruik ervan, maar dat heeft verder niets met jouw sketch zelf te maken.
// Alle pinnen van de leds
const uint8_t ledPins[] = { 9, 11, 10, 6, 3, 5 };
// de pin van de potmeter
byte Potpin = A3;
// de waarde die de potmeter aangeeft
int Potvalue;
// houdt de index bij van de huidige brandende led
byte currentLed = 0;
// houdt de index bij van de eerste led van de staart
byte trail1 = 0 ;
// houdt de index bij van de tweede led van de staart
byte trail2 = 0 ;
// houdt de index bij van de derde led van de staart
byte trail3 = 0;
void setup()
{
// Zet de seriele monitor aan
Serial.begin(115200);
for (uint8_t cnt = 0; cnt < sizeof(ledPins); cnt++)
{
// Zet alle leds uit
analogWrite(ledPins[cnt], 0);
// Zet de pin mode op output
pinMode(ledPins[cnt], OUTPUT);
}
}
void loop()
{
// Lees de waarde van de potmeter
Potvalue = analogRead(Potpin);
////////////////////////
// aansturen LEDs
////////////////////////
// Zet de led die de index currentLed heeft aan.
analogWrite(ledPins[currentLed], 255);
analogWrite(ledPins[trail1], 117);
analogWrite(ledPins[trail2], 54);
analogWrite(ledPins[trail3], 25);
delay(200);
analogWrite(ledPins[trail1],0);
analogWrite(ledPins[trail2],0);
analogWrite(ledPins[trail3], 0);
trail3 = trail2;
trail2 = trail1;
trail1 = currentLed;
if (Potvalue < 512)
{
////////////////////////
// aanpassen currentLed
////////////////////////
currentLed++;
if (currentLed == sizeof(ledPins))
{
currentLed = 0;
}
}
if (Potvalue > 512) {
currentLed --;
if (currentLed == 0) {
currentLed = sizeof(ledPins) -1 ;
}
}
}