[gelöst] trotz schalter springt die anzeige & was tun bei "inf"

hallo,

ich konnte danke diesem und weiteren foren mein projekt fast vollständig umsetzen, aber jetzt komme ich nicht weiter.

  1. ich möchte das unterhalb einer geschwindigkeit von 5km/h "--" angezeigt wird, aber sobald der flankenwert zu groß -> geschwindigkeit zu klein wird (pwm ist bei stillstand eine 5V gleichspannung), wird "inf" im display und im serial monitor angezeigt. wie schaffe ich es das bei keinem signaleingang "--" angezeigt wird?

  2. ich möchte auf dem display je nach schalterposition 3 werte anzeigen: geschwindigtkeit, temperatur oder bordspannung (im moment nur text)
    wenn ich ein high signal auf pin11 für temperaturanzeigen lege klappt alles problemlos, wenn ich ein high signal auf die spannungsanzeige lege springt sie in der vorgegenen wartezeit zwischen geschwindigkeit und spannung geschwindigkeit hin und hier :disappointed_relieved:
    pulldown wiederstände mit 100kOhm sind verbaut

Hallo,
"inf"

teilst Du irgendwo durch "0"?
der Compiler könnte falschen Code erzeugen…

Hast Du FehlerMeldungen aus der IDE?

Defekte Hardware?

Ich nehme an, Du rechnest an einer Stelle falsch- oder falsche Werte Zuweisung.

Es sieht so aus, als wenn Du ein TFT/OLED nutzt. Dort ist es besser, nur den
Teil der Anzeige zu löschen, der sich ändert.
Der Arduino ist zu schnell für langsame OLED/TFT´s. Soll heißen: während das TFT
nocht fummelt, macht der Arduino schon etwas anderes-
dann kann er sich schon einmal verschlucken…

Pulldown Wiederstände nehme ich nie höher als 10k
Gruß und Spaß
Andreas

Auf inf(inity) kann man auch abfragen:

http://www.nongnu.org/avr-libc/user-manual/group__avr__math.html#ga18a7409e0b2341afaa41993960961772

zu problem 1:

das es daran liegt das ich durch null teile habe ich auch schon gedacht und den code dementspreechend umgeschschieben, jedoch keine verbesserung :confused:
oberhalb von 5km/h passt alle
zwischen 2 km/h und 5km/h wird zuverlässig wie gewünscht "--" angezeigt
unterhalb von 2km/h ab und zu "inf" und ohne signaleingang oder bei gleichspannung dauerhaft

ich schätze es gefällt ihm einfach nicht das er keine positive flanke messen kann, aber wie sag ich ihm das wenn da nichts ist er 0 annehmen soll?

zu 2:

bei 10kOhm springt die anzeige weiterhin

in der IDE werden keine fehler angezeigt. mir ist gerade aufgefallen das die geschwindigkeit sogar im serial monitor angezeigt wird, obwohl die in der if schleife nicht vorkommt.
irgendwie arbeitet er erst die if abfrage ab wie er soll und springt dann nach delay in der else abfrage zu landen um dann nach delay wieder (so wie es soll) die spannung anzuzeigen

Hallo,
positive oder negative Flanken kannst Du mit einen IRQ feststellen.

Also,
wenn Flanke positiv- dann mache etwas.

"bei 10kOhm springt die anzeige weiterhin"

wenn Du analog mist, dann zappelt das meistens wie wild.
Du darfst nur "einmal" messen, über logische Abfrage geht das ganz gut.

Hole analog einmal
mache etwas
Hole analog einmal
mache etwas
u.s.w

Wenn das im serillen Monitor funktioniert, und mit dem TFT nicht, dann kannst
Du Dich fast darauf verlassen, das Dein TFT den Arduino ausbremmst.

Wenn der Arduino etwas schnell machen soll, und es auf einem TFT darstellen
soll, dann wird das recht tricky, das zu programmieren.

Am besten geht:

eingabe der Daten
verarbeiten der Daten
ausgabe der daten

Erst- wenn die Ausgabe der Daten beendet ist, dann wieder- eingabe der Daten.

Arduino und schnell- und TFT/OLED ist fast immer Müll, das ist nicht so
einfach.
Schreibe Deinen Sketch doch mal nur für den seriellen Monitor. Also alles
"Anzeige auf TFT/OLED" raus.

Wenn das dann läuft, probierst Du es wieder mit dem TFT/OLED.
Gruß und Spaß
Andreas

ich glaube wir reden aneinander vorbei :slight_smile:

das oled wird über I2C angesprochen und zeigt exakt das an was auch im serial monitor angezeigt wird, also kann man es als fehlerursache wohl ausschließen.

schalter position1 -> temperaturen werden angezeigt (so wie es soll) -> if pin 8 high
schalter position2 -> display springt ziwschen geschwindigkeit und spannung hin und der (nicht so wie es soll) -> if pin11 high

schalter position0 -> geschwindigkeit km/h (so wie es soll) -> else

geschwindigkeit (pwm) wird über den digital pin 2 eingelesen
temperaturen über zwei analog pins
spannung wird derzeit nur als text ausgegeben, kommt aber noch

wenn er die termperatur anzeigt beendet er ordnungsgemäß den if ablauf
wenn er den text anzeigt durchläuft er den if ablauf und geht dann in den else ablauf :stuck_out_tongue:

ich habe jetzt alle rausgeschmissen was geht, sogar das display und sämtliche libarys.
Fehler ist weiterhin...

wahrscheinlich seht ihr den fehler gleich auf den ersten blick nur ich als neuling sehe es nicht.

int MFAschalterP1 = 9;
int MFAschalterP0 = 11;
int test = 8;

void setup() {
  Serial.begin(9600);


  pinMode(MFAschalterP1, INPUT);
  pinMode(MFAschalterP0, INPUT);
  pinMode(test, INPUT);

}

void loop() {
  if (digitalRead(MFAschalterP1) == HIGH) {                                          
    Serial.println("pin9 bruecke gesteckt");
    delay(500);
  }

  if (digitalRead(MFAschalterP0) == HIGH) {                                          
    Serial.println("pin11 bruecke gesteckt");
    delay(500);
  }

  if (digitalRead(MFAschalterP1 & MFAschalterP0 & test) == LOW) {
    Serial.println("keine bruecke gesteckt");
    delay(500);
  }

  if (digitalRead(test) == HIGH) {                                          
    Serial.println("pin 8 bruecke gesteckt");
    delay(500);
  }
}

auf dem ersten bild seht ihr den aufbau mit 10kOhm widerständen
das weiße kabel ist mein schalter

auf den restlichen bildern ist zu sehen, dass wenn keine brücke gesteckt ist alles funktioniert und wenn das kabel bei pin 8 ist auch alles funktionert

wenn ich pin 9 oder pin11 stecke zeigt erst den richtigen an, dann den "flaschen" und wieder zurück.

Was zum teufel nochmal ist an pin8 anders, besser.... als bei den anderen? -_-

 if (digitalRead(MFAschalterP1 & MFAschalterP0 & test) == LOW) {
...

macht nicht, was du wahrscheinlich denkst.

Der folgende Code (zum Beispiel) macht hingegen was du anscheinend willst:

 if (digitalRead(MFAschalterP1)==LOW && digitalRead(MFAschalterP0)==LOW && digitalRead(test) == LOW)) {
...

P.S.:
Bitte lade Bilder doch direkt hier im Forum hoch (verwende nicht "Quick Reply" sondern "Reply", dort kannst du unter "Attachments and other options" Bilder direkt hochladen).
Die Werbung bei der "abload"-Seite ist ziemlich penetrant, das schauen sich wohl nur wenige Leute freiwillig an. :slight_smile:

vielen dank, ich hatte gleich 2 denk fehler :grinning:

  1. das von dir beschriebene
  2. bin ich davon ausgegangen das alle if abfragen abgearbeitet werden und dann auf else gewechselt wird. aber scheinbar muss unter JEDES if ein else

Beispeil:

ich hatte:
if
if
if
else

es muss aber scheinbar heißen:
if
else

if
else

if
else

nochmal vielen dank ;D

jetzt muss ich nur noch mein "inf" problem in den Griff bekommen :stuck_out_tongue:
es sind ja schon das stichwort "IRQ" und den link avr-libc: <math.h>: Mathematics

probiere es erstmal damit:

das nächste man werde ich die bilder intern hochladen :wink:

EDIT: gerade auch den eigentlichen sktech aufgespielt, auch hier funtioniert es jetzt :smiley:
praktisch wenn man mehrere arduinos und steckbretter im haus hat :slight_smile:

fertig :slight_smile:

alles funktioniert wie gewünscht, ich muss nur noch die spannungsmessung realisieren

hier die funktion die Serenifly empfohlen hat:

  if (Geschwindigkeit <=5 || isinf(Geschwindigkeit) )        {......}

vielen dank an alle helfer :slight_smile: