INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
digitalRead in einer Schleife
15.10.2015, 07:56 (Dieser Beitrag wurde zuletzt bearbeitet: 15.10.2015 08:02 von luto92.)
Beitrag #1
digitalRead in einer Schleife
Hallo Liebe Leute,

ich möchte einen Zähler bauen. Dafür benutze ich eine Schleife (ich denke mal for, aber vielleicht auch eine andere) und möchte innerhalb der Schleife einen Pin lesen mit digitalRead. Blöd gesagt soll er alle 500 ms neu anfangen zu zählen.

Hier mal grob den Code ohne korrekter Synthax und Initialisierung und so aber dass ihr versteht wie ich das meine:

int counter
int pushbuttonpin
pinmode pusbuttonpin input
byte status

loop ()

for (i=0, i<500, i++) // schleife wird 500 mal durchgelaufen dann raus
{counter=0; //counter wird auf 0 gesetzt
status = digitalRead(pushbuttonPin); //abfrage ob schalter zu oder offen
if status = 1
{counter=counter+1;
}
else
{counter=counter+0;
}
delay (1): //hier wird 1 ms gewartet damit die schleife so fast 500ms braucht
} // schleifenende

frequenz= counter * 2; //frequenz ist gleich Anzahl pro sekunde also mal 2

print(frequenz);
println(Hz)......




Die Frage ist nun, ob es berücksichtigt wird wenn der Status vom Pushbutton sich ändert.
Beispielsweise ist die ersten 200 Durchläufe der Schalter nicht gedrückt, bei dem Durchlauf Nr 201 ist der Schalter gedrückt und für den Rest der Durchläufe nicht mehr.
Bekomme ich auch als Ergebnis 2Hz? Wird der geänderte Status des Schalters innerhalb der Schleife berücksichtigt?


Vielen Dank vorab!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.10.2015, 21:02
Beitrag #2
RE: digitalRead in einer Schleife
Hi,
jetzt haette ich Dir beinahe das ganze Ding geschrieben, habe aber in 2 Minuten ein Meeting.
Also: Nein, die Aenderung musst Du selbst detektieren. Mach Dir eine Variable, die den alten Status des Pins festhaelt und vergleiche dann. Nur wenn sich was aendert zaehlst Du. Ansonsten: die 500 ms solltest Du mit millis() messen.
Gruss,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.10.2015, 21:19
Beitrag #3
RE: digitalRead in einer Schleife
Ist ein Schalterprellen auszuschliessen in der Hardware ?
Wenn nicht, könnte man ein kurzes delay einbauen bei Statusänderung, damit man sicher nur einmal zählt.
Nicht zu kurz, sonst passiert es trotzdem, nicht zu lang bei höheren Frequenzen/Drehzahlen.

Grundsätzlich stimme ich dem Pferdekämper zu.

Ein Interrupt wäre auch ne elegante Möglichkeit.

und:
Über zwei Eingänge, 50% versetzt die Sensoren, ist obendrein auch die Drehrichtung erfassbar.
Hierzu muss man nur bei Signal-Flanke des einen von Low auf High schauen, ob der andere Eingang high oder low ist.
(Durchflussmesser oder Messventilatoren z.B.)

Binatone







Binatone
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.10.2015, 21:25
Beitrag #4
RE: digitalRead in einer Schleife
(15.10.2015 21:19)Binatone schrieb:  Ist ein Schalterprellen auszuschliessen in der Hardware ?
Wenn nicht, könnte man ein kurzes delay einbauen bei Statusänderung,
delay zum Entprellen ist immer Pfusch.

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.10.2015, 21:52 (Dieser Beitrag wurde zuletzt bearbeitet: 15.10.2015 22:07 von Binatone.)
Beitrag #5
RE: digitalRead in einer Schleife
(15.10.2015 21:25)Thorsten Pferdekämper schrieb:  
(15.10.2015 21:19)Binatone schrieb:  Ist ein Schalterprellen auszuschliessen in der Hardware ?
Wenn nicht, könnte man ein kurzes delay einbauen bei Statusänderung,
delay zum Entprellen ist immer Pfusch.

Erfahrung hab ich damit noch keine, aber wenigstens die Idee, dies zu beachten, falls ich mal Schalter anklemme. Big Grin

Wie macht man es denn optimalerweise ?

Binatone
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.10.2015, 22:09
Beitrag #6
RE: digitalRead in einer Schleife
@Binatone
Das Entprellen geht am einfachsten mit der Library "bounce":
http://playground.arduino.cc/Code/Bounce

Oder evtl. so, wenn es ein einfacher Sketch ist:
Code:
taster_val = digitalRead(inputPin);           // Wert auslesen
if (taster_val != oldval)
{
    // normale Bearbeitung: losgelassen / gedrückt etc...
    oldval = taster_val;
   delay(10);              // 10 millisekunden warten, eine Änderung danach wird wieder eine echte sein.
}

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  mit if aus do-while oder while Schleife aussteigen Nafetz 6 115 05.12.2016 21:41
Letzter Beitrag: Pit
  Ausschaltverzögerung bei einer PV Heizung Hans_Maulwurf 27 732 29.11.2016 23:38
Letzter Beitrag: georg01
  while Schleife nach sleep mode interrupt tklaus 13 260 23.11.2016 17:40
Letzter Beitrag: Tommy56
  Do-While-Schleife Abbruchbedinung Majera 14 259 22.11.2016 18:07
Letzter Beitrag: Pit
  Schleife Hannes 3 195 16.11.2016 00:54
Letzter Beitrag: Hannes
  Innenwiderstand einer Batterie (Rundzelle 1,5V) Einsteiger94 2 206 24.07.2016 11:42
Letzter Beitrag: SkobyMobil
  Brauche etwas Hilfe bei der Umsetzung einer Idee raspido 3 535 23.04.2016 10:26
Letzter Beitrag: rkuehle
  I2C Ansteuerung einer MSM3 (elv mp3 Box) Voreifel 2 315 09.04.2016 17:56
Letzter Beitrag: Voreifel
  Problem: SDFat - Das Ende einer Datei finden und Schleife beenden MartinK 4 490 01.04.2016 05:49
Letzter Beitrag: MartinK
  Problem: RFID code mit Inhalt einer Textdatei auf einer SD Karte vergleichen MartinK 6 513 29.03.2016 16:45
Letzter Beitrag: MartinK

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste