Digital pin heel traag bij uitlezen van high naar low

Is er een manier om de digitale pin sneller uit te lezen want het duurt 4 seconden voordat die terug low wordt.

/*
   DigitalReadSerial
  Reads a digital input on pin 2, prints the result to the serial monitor 
  
  This example code is in the public domain.
  */

// digital pin 2 has a pushbutton attached to it. Give it a name:
int pushButton = 2;

// the setup routine runs once when you press reset:
void setup() {
   // initialize serial communication at 9600 bits per second:
   Serial.begin(9600);
   // make the pushbutton's pin an input:
   pinMode(pushButton, INPUT);
}

// the loop routine runs over and over again forever:
void loop() {
   // read the input pin:
   int buttonState = digitalRead(pushButton);
   // print out the state of the button:
   Serial.println(buttonState);
   delay(1);        // delay in between reads for stability
}

Thanks in advance

moderator: added [code]...[/code] tags

a) delay (1) zal weinig doen aan stabiliteit. b) hoe heb je de schakelaar aangesloten? Pulldown of pullup? Aan de code mankeert niets (op de delay na).

Hoi Atlanta001, en welkom.

Het antwoord op jouw vraag zit in Nico's antwoord verstopt. Lees het maar eens een paar keer door tot je het ziet. Als je iets niet begrijpt aan dat antwoord, moet je dat nog maar eens vragen. Er zijn een aantal manieren om dit probleem op te lossen, maar omdat je zo te zien de voorbeelden aan het volgen bent is het wellicht een goed idee om volgens die geest te blijven werken. Veel plezier bij de ontdekkingstocht in Arduino-land, altijd erg leuk om de vakantie door te komen.

Het lezen van die ene pin, dat kost nauwelijks tijd of moeite voor arduino.

Wat wel... vreemd is is dat een (exact) voorbeeldprogramma een snelheid van 9600baud gebruikt en elke milliseconde een byte data plus.... regeleinde verstuurd.

Inclusief start-/stop-bit neemt elke verstuurde byte nl. 10 bits in beslag. Zelfs zonder regeleinde heb je dus minimaal 10.000 baud nodig om e.e.a. soepel te versturen.

Het zou best kunnen dat er een seriële poort over z'n nek gaat en dat de traagheid daar een resultaat van is.

Mocht dit het probleem zijn, dan kan je de hoeveelheid data verminderen door delay() groter te maken of de communicatiesnelheid verhogen, zodat alle data wel op tijd overkomt.

@Simpson_Jr Jouw verhaal over de seriele poort klopt niet helemaal. De Serial.println(buttonState); zet de data in een locale buffer. Een timer functie leest die buffer en stuurt de data effectief door. Als er niet genoeg plaats in de buffer is wordt de aanroep blokerend. Of met andere woorden: de aanroep van Serial.println(buttonState); keert pas terug nadat de data in de buffer zit. Het niet kunnen volgen van de seriele poort op zich brengt dus geen noodzaak om de delay te verhogen omdat de aanroep van Serial.println(buttonState) langer zal duren.

Met vriendelijke groet Jantje

Heb net datzelfde progje met pullup weerstanden en delay van 100ms gedraaid. loopt als een tiet. Bij 1mS delay loopt die buffer eindeloos achter......