Led kubus programma "while loop" probleem

Beste,

Ik probeer een 8x8x8 led kubus aan te sturen.
het programma werkte. (De leds gaan één voor één aan en uit.
Beginnend links onder. (Rij 1 kolom 1, rij 1 kolom 2 etc.)
Na de onderste laag (Layer) te hebben gehad licht led Rij 1 kolom 1, rij 1 kolom 2 etc. op van de tweede layer enz.

Echter nadat ik een while loop rond de for loop heb toegevoegd werkt het niet meer.
Ik moet al tijdens de reset de variabele "Switch" laag houden(button indrukken) om led A1, A2 etc. te laten oplichten. (Ik had verwacht dat de for loop juist zou blijven lopen als "Switch" HIGH was
en zou stoppen indien ik hem LOW maakte.

Waar ga ik de fout in?

// read the state of the pushbutton value and store value in variable Switch:
  Switch = digitalRead(switchState);
  while (Switch == HIGH);
  {

    for (int RowA = 1; RowA < 129; RowA = RowA * 2)
    {
      digitalWrite(SRCK, LOW); // Disable shift data

      shiftOut(DATA, RCK, MSBFIRST, RowH);
      shiftOut(DATA, RCK, MSBFIRST, RowG);
      shiftOut(DATA, RCK, MSBFIRST, RowF);
      shiftOut(DATA, RCK, MSBFIRST, RowE);
      shiftOut(DATA, RCK, MSBFIRST, RowD);
      shiftOut(DATA, RCK, MSBFIRST, RowC);
      shiftOut(DATA, RCK, MSBFIRST, RowB);
      shiftOut(DATA, RCK, MSBFIRST, RowA);
      shiftOut(DATA, RCK, LSBFIRST, Layer);

      digitalWrite(SRCK, HIGH); // Shift data out

      delay(Rowspeed); // counter speed
    }
  }

Zie ook de volledige code.

Bijj voorbaat dank.

Kubus_row_by_row.ino (7.41 KB)

een INT is niet HIGH dat moet een boolean zijn.

Hij leest die switch niet meer in die while loop.

Pas op met je namen van variabelen.
switch (das dus iets anders als Switch) is ook een commando.
Voor jezelf en voor anderen die je code lezen moet je dus heel erg oppassen dat je daar geen verwarring mee zaait.

@Nico: Dat antwoord leest wat vreemd, denk dat er een verkeerd woord is ingeslopen, maar je hebt natuurlijk wel gelijk.
Een while lus is blokkerende code, maar hier is ie zeer blokkerend want als ie er eenmaal in zit, zal ie er nooit meer uit komen.
Dat is gelijk het grote risico van een while lus.
Maar deze sketch schroomt sowieso geen blokkerende code.

Als je alle blokkerende code er uit haalt, en een paar variabelen toevoegt, dan gaat ie een heel stuk beter lopen.
Zie mijn handtekening hieronder.

Beste Nico, Mas3,

Ik begrijp niet waarom de "while loop" blocking code is?
Op het moment dat ik button druk wordt niet meer aan de while voorwaarde voldaan (variabele Switch is LOW i.p.v. HIGH).
Mag ik er niet van uitgaan dat hij uit de while loop springt als er meer aan de voorwaarde wordt voldaan?

Bij voorbaat dank voor jullie uitleg / reactie.

M.v.g.

Shadowbiker

Om met shooter's Cruijffiaanse teksten mee te doen:

"As je niet kijk, dan zie je niets."

shadowbiker88:
Op het moment dat ik button druk wordt niet meer aan de while voorwaarde voldaan (variabele Switch is LOW i.p.v. HIGH).

Fout... Alleen voor de while geef je de variabele Switch een waarde. In de while loop doe je dat vervolgens nooit meer. Switch zal niet automagisch de actuele waarde van de schakelaar bevatten. Alleen als je

Switch = digitalRead(switchState);

doet update je de variabele en dat doe je nooit meer in de loop.

Waarom doe je niet gewoon

while(digitalRead(switchState)){

En lees je de schakelaar direct (ipv via een omweg in een variabele)?

Overigens is switchState een debiele naam voor een pin waar een schakalaar aan hangt. Zou een goeie naam zijn voor de variabele waar je de state van de schakelaar inleest ipv Switch, dat wel. const byte SwitchPin zou een logischere naam zijn.

ofwel om kort te gaan, je kijkt naar de switchstate (dat moet eigenlijk een switchpin zijn, en de uitkomst is een switchstate.
dan zolang die state hoog is ga je iets doen, maar die state wordt niet meer laag want er staat een while voor ofwel zolang als die state high is blijft hij in het stukje,

blocking code betekent dat er tijdens de uitvoering nergens anders naar gekeken wordt (behalve interupt maar die gebruik je niet.

ach dat zijn de kleine beginnersongemakken.
laat maar eens zien wat je ervan gemaakt hebt.