hulp bij een while loop project

ik ben met een school project bezig en loop tegen een bepaalde dingen aan ik heb een arduino uno met een rich shield board de vragen is :Sluit een LED en een button aan en maak een programma zodat de LED aangaat
nadat er 3x op de button is gedrukt. Na nog een keer 3x drukken gaat de LED weer
uit. Maak gebruik van een while loop. ik zal hieronder mijn code plaatsen advies of aanpassen zou ik graag waarderen .

void setup()
{
  pinMode(8, INPUT_PULLUP);
  pinMode(4, OUTPUT);
  
}
void loop() {
delay(100);
int buttonpush = 0;
  
  while (buttonpush < 3){
    if (8 ==true )
    {
     buttonpush = buttonpush +1
    }
  }
  if (8 == false);
  {
    4 = true ;
  }
  if (8 == true)
  {
    4= false;
  }
}

See also led does not go on or of - Programming Questions - Arduino Forum for more information

Zie ook led does not go on or of - Programming Questions - Arduino Forum voor meer informatie

Hoi.

Die code werkt niet volgens de beschrijving die de leraar aan je gesteld heeft (de code werkt helemaal niet).

Ik zie ook dat je al 57 berichten hebt geplaatst sinds 1 maart, en dat 54 daarvan over dit vraagstuk gaan maar de meesten daarvan in het Engels zijn en dat dat niet helemaal vlekkeloos verlopen is.

Jouw code heeft veel problemen en de meesten daarvan zijn al besproken maar het lijkt er op dat de informatie die gegeven word, niet word begrepen.
Aangezien dit een schoolopdracht is (en we gaan er voorlopig dus ook van uit dat jouw toekomstige vragen dat ook zullen zijn), kun je niet verwachten dat iemand voor jou even jouw opdracht gaat uitvoeren.
Want dan lever je misschien de opdracht wel in, maar heel erg veel zul je er dan niet van geleerd hebben terwijl dat wel de bedoeling van de opdracht was.

De while loop word ongelofelijk snel doorlopen.
Sneller dat de drukknop kan worden ingedrukt door een persoon (zelfs al sneller dan de knop werkelijk mechanisch een contact kan maken en weer breken).
Dat is 1 van de redenen waarom de code niet zal werken.
Je moet niet alleen maar kijken of de knop is ingedrukt want anders klopt er niets van.
Verder is het getal 8 altijd true, want groter dan nul.
Er zijn een aantal redenen waarom dit zo is of kan zijn.

Ik kan je alleen maar aanraden om eens opnieuw te beginnen en even te bedenken wat je allemaal al geleerd had voor je met deze opdracht begon want het lijkt er op dat je inmiddels in de stress hierover een aantal basis dingen vergeten hebt.

die 8 dat moet zijn digitalRead(8). en om het wat netter te houden kijken of het HIGH of LOW moet zijn. en dat dan ook schrijven.
verder is 4 ook geen goed antwoord maar zoek dat even uit mety de reference want het is de bedoeling dat jij het leert. Wij kennen het al.
en schrijf commentaar bij wat er gebeurt dan kun je anderen uitleggen waarom je iets doet.
de delay direct als eerste in de loop is hier wel nodig maar is slecht programmeren.

bedankt heren voor de info ik weet dat het onlogisch programmeren is maar moet dit al als 2e opdracht maken . met een if en else lukt het wel alleen is deze afgekeurd . ik zal hiereven mij code posten omdat ik een error krijg weet niet wat dit inhoud (exit status 1too few arguments to function 'void digitalWrite(uint8_t, uint8_t)')

void setup()
{
  pinMode(8, INPUT_PULLUP);
  pinMode(4, OUTPUT);
  
}
void loop() {
delay(100);
int buttonpush = 0;
  
  while (buttonpush < 3){
    if (digitalRead(8) == true )
    {
     buttonpush = buttonpush +1;
    }
  }
  if (digitalRead(8) == LOW);
  {
    digitalWrite (4 , HIGH) ;
  }
  if (digitalRead(8) == HIGH);
  {
    digitalWrite (4 , LOW);
  }
}

Kun je deze bladzijde doorlezen, en let dan vooral op waar de punt-comma staat: if - Arduino Reference.

dit is flauw

// toggle LED every 3rd button press

const byte LedPin       = 4;
const byte ButPin       = 8;

int   buttonPushCounter = 0;
byte  butLast           = HIGH;
byte  ledState          = HIGH;

void setup()
{
    Serial.begin (9600);
    pinMode(ButPin, INPUT_PULLUP);      // configure with pullup

    pinMode(LedPin, OUTPUT);
    digitalWrite (LedPin, LOW);
}

void loop() {
    byte  but = digitalRead(ButPin);    // read pin

    if (butLast != but)  {              // check for a change
        butLast = but;                  // capture new state

        if (LOW == but)  {              // check if FALLING
            buttonPushCounter++;
            Serial.println (buttonPushCounter);
        }
    }

    while (3 == buttonPushCounter && HIGH == ledState)  {
        ledState = LOW;
    }

    while (6 == buttonPushCounter && LOW == ledState)  {
        ledState = HIGH;
        buttonPushCounter = 0;
    }

    digitalWrite (LedPin, ledState);
}

bedankt voor de code maar hierbij worden byte gebruikt dit werd afgekeurd namelijk er moet iets gemaakt gemaakt worden zonder die byte ik zit me al hele week te ergeren dat mede forum leden zeggen dat het zo niet kan of slecht programmeren is

dus verander het van byte naar int

ledstatus kan je die ook verwerken in de 2 while

dus doe het

ik zei "dit is gek"

dan krijg je een error omdat ik 2 while erin heb gegooid , als ik heb begrepen kan je nooit 2 while achter elkaar doen

als ik de code aanpas moet ik bij elke klik de led aansturen dit doet die het tot 3 maar niet tot 6 waarom ?

int count = 0; 
int buttonState = 0;         
void setup()
{
  Serial.begin (9600);
  pinMode(8, INPUT_PULLUP);      

  pinMode(4, OUTPUT);
  digitalWrite (4, LOW);
}

void loop() {
  delay(100);
  buttonState = digitalRead(8);
  
    if (buttonState == LOW)   {              
      count++;                   
{
  
}
      { 
        
        Serial.println (count);
      }


      while (3 == count)  {
        digitalWrite (4, HIGH);
      }

      
      }
while (6 == count )  {
        digitalWrite (4, LOW);
        count = 0;
    }
}

heb je geen 2 while-lussen op een rij?

ik neem aan dat je laatste code zeer snel pin 4 HOOG instelt en verder niets doet.

gezien het feit dat lus () 100.000 seconden per seconde uitvoert, hoe vaak denkt u dat de telling wordt verhoogd wanneer de knop ingedrukt wordt gehouden?

en kun je beschrijven wat een while-lus doet? misschien, als je jezelf hardop beschrijft, zul je het begrijpen

wat verandert de waarde van count in de "while" -lus?

waarom is er geen probleem met de 2e while-lus die test of count == 6 is?

hij doorloopt snel die lus krijg op geen ander manier die 6 lijkt alsof hij bij 3 stopt niet verder kijkt naar de andere while . hoe kan ik dit het beste oplossen welke stukje code

de code zit vast in de while (3 == count) lus. waarom?

omdat hij zijn waarde 3 heeft gedaan en klaar is met zijn loop niet verder kijkt of begrijp ik het verkeerd

Ik vroeg je om uit te leggen wat een while-lus doet. probeer alsjeblieft te antwoorden. wat zorgt ervoor dat de lus wordt uitgevoerd?
wat doet het aan het einde van de lus? wat zorgt ervoor dat het stopt met uitvoeren?

wordt een code buiten de lus uitgevoerd terwijl de lus wordt uitgevoerd?

Een while lus wordt continu herhaald tot hij een stop krijgt .
wordt een code buiten de lus uitgevoerd terwijl de lus wordt uitgevoerd? deze vraag snap ik niet helemaal

Can you have two while loops?
It is impossible to run two WHILE loops in parallel in the same program. One of them must have priority and must complete before the other can take the next step

wat zorgt ervoor dat de while stopt met uitvoeren?

waar gaat het heen als het wordt beëindigd?

Can you have two while loops?

natuurlijk kan je dat. Ik heb je antwoord # 6 laten zien, evenals in je code.

twee lussen kunnen elkaar opvolgen of genest zijn

    while (condition1)  {
        do something

        while (condition2) {
            do somthing
        }

        do somthing
    }

maar telkens als een while-lus wordt gebruikt, moet er iets zijn dat er uiteindelijk voor zorgt dat de conditie waarvoor het test onwaar wordt