Forum: Mikrocontroller und Digitale Elektronik frage zu if, else if usw.


von Christoph R. (derbro)


Lesenswert?

Moin... ich bin grad am programmieren an einem arduino. Ich habe 10 
verschiedene inputs und jedes soll jederzeit abgerufen  werden 
können(durch knopfdruck). Ich frag mich ob ich das so machen kann oder 
ob die Chance nur 1 zu 10 steht dass der knopf reagiert weil das 
programm (in einer while schleife) durchgehend durchläuft.
1
While (meinebedingung >= 4)
2
If (digitalread (inpineins == high)) {
3
   Macht etwas
4
   Delay (200) }
5
Else if(digitalread (inpinzwei == high)) {
6
  Macht etwas anderes
7
  Delay(10) }
8
Else if  usw.....
Bin für Vorschläge offen...
Gruß Christoph

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Wenn die Delay nicht wären, würde diese Schleife pro Sekunde viele 
Zehn-tausend mal durchlaufen. Was denkst du, wie groß die Chance ist, 
dass du einen Knopf innerhalb von (sgaen wir mal) 1 Zehntausendstel 
Sekunde drücken und wieder loslassen kannst, so dass der µC sie nicht 
bemerkt.

Wie gesagt: Wenn die delays nicht wären. Die verfälschen das. Aber 
selbst dann: 200 Millisekunden sind 0.2 Sekunden. Kannst du innerhalb 
dieser Zeit einen Knopf drücken und wieder loslassen?

: Bearbeitet durch User
von Patrick (Gast)


Lesenswert?

Christoph Rohloff schrieb:
> ch frag mich ob ich das so machen kann oder
> ob die Chance nur 1 zu 10 steht dass der knopf reagiert weil das
> programm (in einer while schleife) durchgehend durchläuft.

Hm? - Ich verstehe die Frage nicht...

Ansonsten steht doch alles da: Endlosschleife außen herum, innen drin 
(vmtl.) zehn if-else-Konstrukte, d. h. inpineins wird mit höchster 
Priorität behandelt, inpinzwei mit nächstgeringerer etc.
Ob diese implizite Priorisierung gewünscht ist, das ist eine andere 
Frage.

von мальеикий тролл (Gast)


Lesenswert?

Mach die Delays raus, die sind quatsch.

von Stefan F. (Gast)


Lesenswert?

> if (digitalread (inpineins == high)) ...

Ist das so richtig? Ich kenne mich mit Arduino nicht aus, aber das sieht 
seltsam aus.

Ich hätte sowas erwartet: if (digitalread(inpineins)==high) ....

Oder in C: if (PINA & 2) ...

von Markus (Gast)


Lesenswert?

Stefan us schrieb:
> Ich hätte sowas erwartet: if (digitalread(inpineins)==high) ....

Ja, hast recht, so wäre es richtig.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.