Hoe maak ik een staart met led ?

Chips

Dan moeten dus de getallen allemaal de andere kant op ?

O, ik ben nu met de staart bezig en pas als die werkt , ga ik eens denken aan het afknippen van de staart of de snelheid van het draaien aanpassen.

Een probleem per keer

Laten we eerst kijken of we dit kunnen aanpassen en daarna als ik het nog leuk vindt , gaan we verder.

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.

of kan het handiger zijn om de weerstanden te verplaatsen en op de 5v te zetten dus de rode lijnen.

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.

oke

IK heb de getallen verandert maar ik zie nog steeds niet veel verandering tussen de leds

Dat komt omdat je niks doet om een andere LED aan te gaan sturen.
Je moet nog ergens iets gaan optellen of aftrekken.

Je moet het aanpassen van currentLed dus nog activeren

Verder is de simulatie van de helderheid van de LEDs niet heel erg goed, dat zal er in werkelijkheid heel anders uitzien.

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.

Dat weet ik .

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.

Ik ben benieuwd :wink:

oke, ga eerst de bedrading veranderen zodat ik de getallen ga gebruiken die je me verteld.

Daarna alle trails op 0 zetten.
Wacht eens even. is dit niet eigenlijk het uitzetten wat ik niet zie.

@MAS3 is dit wat je bedoeld:

// 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.

Ben ik met je eens.
Maar om een beginners kit te kopen en dan na een aantal weken opzij te leggen, vindt ik ook zonde.

Heb zelf het idee dat het niet zo soepel loopt als toen er een led brande.Maar dat kan ook komen doordat de helderheid niet zichtbaar is.

Zo maar laten en morgen de code schrijven om naar de andere kant te bewegen ?

En ben ik een goede leerling ?

Het gaat de goede kant op.
En als ie de andere kant op gaat, is dat ook goed :rofl:

Denk dat ik eens ga spelen met de delay om te kijken of de beweging wat soepeler kan.

En dan de andere kant op implementeren.

Alles geimplementeerd maar het draait niet goed als de waarde van de potmeter hoger is dan 512. Eens goed nadenken waar dat aan kan liggen.

OKe

Deze code lijkt te werken :

// 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 ; 
    } 
  }

}

Alleen vindt ik het draaien nog niet echt mooi.