arduino mega2560

goeieavond,

lange tijd geleden heb ik mijn eerste pasjes gedaan met arduino(uno).
Nu moet ik voor mijn dochter haar project op school een kunstwerkje met ledjes erin verwerken.
Het is dacht ik eenvoudig, het is een systeem knight rider maar met 31 ledjes.
Ik heb mijn leds aangesloten op een mega maar, de eerste 10 werken niet de andere 21 wel en volgens sketch.
de lampjes zijn getest en werken wel degelijk, behalve op de arduino mega.
Ik gebruik de digitale pinnen van 22 t.e.m. 53.

enig idee waar mijn fout zou kunnen zitten.

bedankt,
frank

Onmogelijk te zeggen zonder je code te zien.

Pieter

Zet er meteen ook je schema bij.(gnd...?)

const int leds = {22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, }; // Led pins
const int totalLeds = 32 ;
int time = 150; // Default speed

void setup() {
// Initialize all outputs
for (int i = 0; i <= totalLeds; ++i) {
pinMode(leds*, OUTPUT);*

  • }*
    }
    void loop() {
  • for (int i = 0; i < totalLeds - 1; ++i) {*
  • // Scan left to right*
  • // time = analogRead(2);*
    _ digitalWrite(leds*, HIGH);_
    _
    delay(time);_
    _
    digitalWrite(leds[i + 1], HIGH);_
    _
    delay(time);_
    _ digitalWrite(leds, LOW);
    }
    for (int i = totalLeds; i > 0; --i) {
    // Scan right to left*
    * // time = analogRead(2);
    digitalWrite(leds, HIGH);
    delay(time);
    digitalWrite(leds[i - 1], HIGH);
    delay(time);
    digitalWrite(leds, LOW);
    }
    }*_

ga morgen eens proberen op die 10 leds eens aan te sluiten op een uno
heb leds getest afzonderlijk en deze werken stuk voor stuk

Gebruik [code][/code] om je code te posten. Al je indices [i] zijn weggevallen.

Je gebruikt steeds alle MEGA pinnen als uitgang in sketch , ook 0 tot 21 waar geen LEDs mee verbonden zijn.

Hoe zijn de LEDs verbonden?

Verander de setup eens naar iets duidelijker,

void setup() {
  // Initialize all outputs
  for (int i = 22; i <(totalLeds+22); ++i) {
    pinMode(leds[i], OUTPUT);
  }
}

Zijn code was (min of meer) correct, maar:

PieterP:
Gebruik [code][/code] om je code te posten. Al je indices [i] zijn weggevallen.

En als je het helemaal duidelijk wilt maken, gebruik dan:

Code:





```
const uint8_t leds[] = { 22, 23, 24, 25, 26, 27, 28, 29,

30, 31, 32, 33, 34, 35, 36, 37,
                        38, 39, 40, 41, 42, 43, 44, 45,
                        46, 47, 48, 49, 50, 51, 52,
                      }; // Led pins
const size_t nb_leds = sizeofcolor=#000000[/color] / sizeofcolor=#000000[/color];

void setupcolor=#000000[/color] {
 // Initialize all outputs
 for (size_t i = 0; i < nb_leds; i++) {
   pinMode(leds[i], OUTPUT);
 }
}
```

|

Dan zou je merken dat je maar 31 LEDs hebt, terwijl jouw code er 33 probeert te initializeren.

Als je enkel voorwaarts wilt itereren, kan je het volgende gebruiken:

Code:





```
const uint8_t leds[] = { 22, 23, 24, 25, 26, 27, 28, 29,

30, 31, 32, 33, 34, 35, 36, 37,
                        38, 39, 40, 41, 42, 43, 44, 45,
                        46, 47, 48, 49, 50, 51, 52,
                      }; // Led pins

void setupcolor=#000000[/color] {
 // Initialize all outputs
 for (uint8_t const &led : leds) {
   pinMode(led, OUTPUT);
 }
}
```

|

Hey Pieter P,
Deze for constructie vind ik erg handig,

for (uint8_t const &led : leds) {
    pinMode(led, OUTPUT);

Waar kan ik meer info opzoeken over de gebruikte syntax.
(adres van &led die verwijst naar het eerste element van de array leds)

Het is een range-based for loop.

De ampersand is hier geen address-of operator, maar een (read-only) reference naar elk element led als iterator over het volledige array leds.

PieterP:
Het is een range-based for loop.

De ampersand is hier geen address-of operator, maar een read-only reference naar elk element led als iterator over het volledige array leds.

Bedankt zo leer ik ook iedere keer iets bij.