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
Wasserverbrauchszähler, statische Variablen, komisches Verhalten in der loop()
18.03.2019, 11:02
Beitrag #1
Wasserverbrauchszähler, statische Variablen, komisches Verhalten in der loop()
Hallo zusammen,

könnt Ihr mir bei folgendem Code helfen?

Code:
#define GPIO_WASSER 3
static volatile unsigned int wasserCounter = 0;

void wasserInterrupt (void)
{
  detachInterrupt(digitalPinToInterrupt(GPIO_WASSER));
  ++wasserCounter;
  Serial.print("water: ");
  Serial.println(wasserCounter);
  delayMicroseconds(16000);
  attachInterrupt(digitalPinToInterrupt(GPIO_WASSER), wasserInterrupt, FALLING);
}


void setup()
{
  Serial.begin(9600);
  pinMode(GPIO_WASSER, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(GPIO_WASSER), wasserInterrupt, FALLING);
}

void loop()
{
//  Serial.println("Los gehts...");
//  while(true)
//  {
//    delay(1000);
//  }
}

Dazu drei Fragen:

1) Die Variable wasserCounter ist bei jedem Impuls genau 1. Er zählt nicht hoch. Warum?
2) Ich vermute, dass er bei jedem loop() Durchlauf irgendwie diese statischen Variablen löscht? Kann mir das jmd erklären?
3) Um These 2) zu überprüfen habe ich in der loop() ein paar Zeilen, die nun jedoch auskommentiert sind. Wenn ich diese einkommentieren, dann printet er genau jede Sekunde einmal den Text "Los gehts". Warum das denn? Durch die while-true-Schleife sollte er doch eigentlich immer in der Schleife drinbleiben? Wo ist mein Denkfehler?

Vielen Dank Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2019, 12:04 (Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2019 12:11 von Hilgi.)
Beitrag #2
RE: Wasserverbrauchszähler, statische Variablen, komisches Verhalten in der loop()
Hi,


ich habe deinen Code aufgespielt und ausprobiert, ziehe ich GPIO3 auf GND passiert folgendes:


   

Wie zu erkennen läuft dein Loop nur einmal an und ist dann in der while gefangen,...

Naja jedenfalls habe ich dann mal den Loop wieder kommentiert, die Ausgabe ist dann wie folgt:

   


Du hast keinen Denkfehler, aber irgendwas läuft da falsch, bei mir geht es jedenfalls...


Wäre interessant zu sehen was los ist...


Gruß



_______
EDIT


Sieht eher so aus, als wenn der Neustartet, wie ist denn dein Aufbau zzt.?
Welcher Arduino/ESP, Stromversorgung, Verkabelung....

Nicht denken,...
...nachdenken... Rolleyes

Smarter - LiveData - KLAMM.de
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2019, 12:17
Beitrag #3
RE: Wasserverbrauchszähler, statische Variablen, komisches Verhalten in der loop()
Wofür willst Du einen Interrupt, wenn Du in der Interruptroutine das drin hast:
Code:
delayMicroseconds(16000);

Das wird nie funktionieren und Du brauchst auch keinen Interrupt.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2019, 12:40 (Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2019 12:41 von pzYsTorM.)
Beitrag #4
RE: Wasserverbrauchszähler, statische Variablen, komisches Verhalten in der loop()
Hilgi, danke fürs Testen! Smile
Dann weiß ich nicht, warum ich auf meinem Arduino Mega ein komplett anderes Verhalten habe. Dann kann es ja fast nur an an zwei Punkten liegen:
1) Mein Arduino ist schrott.
2) Die USB-Schnittstelle bzw. der Weg zum Auslesen ist falsch.
Dieser sieht bei mir aktuell so aus. In der Bash rufe ich auf:
Code:
stty -F /dev/ttyUSB0 cs8 9600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts -clocal

while read INFO COUNT </dev/ttyUSB0; do echo "water.count $COUNT `date +%s.%N`" | nc -q0 192.168.0.6 2003; done

(18.03.2019 12:17)Tommy56 schrieb:  Wofür willst Du einen Interrupt, wenn Du in der Interruptroutine das drin hast:
Code:
delayMicroseconds(16000);

Das wird nie funktionieren und Du brauchst auch keinen Interrupt.

Gruß Tommy

Verstehe ich gerade noch nicht so wirklich. Warum funktioniert das nicht?
Mein Punkt ist: Ich brauche den Interrupt, um zeitnah auf den Impuls vom Wasserzähler reagieren zu können. Da reicht mir keine Schleife, die alle 100ms den Zähler abfragt.
Das Delay von 16ms hab ich eingefügt, um den Interrupt zu "entprellen". Sonst wird er tatsächlich manchmal pro Impuls zweimal getriggert.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2019, 12:42 (Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2019 12:50 von Hilgi.)
Beitrag #5
RE: Wasserverbrauchszähler, statische Variablen, komisches Verhalten in der loop()
Ich guck ma eben auf nem Mega.....


_________
EDIT



Also auf einem Arduino UNO und einem MEGA gestestet, geht immer...

Arduino IDE 1.8.8 ( Windows Store - 1.8.19.0 )

Wie ist denn deine Stromversorgung und der Aufbau?

Nicht denken,...
...nachdenken... Rolleyes

Smarter - LiveData - KLAMM.de
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2019, 13:01
Beitrag #6
RE: Wasserverbrauchszähler, statische Variablen, komisches Verhalten in der loop()
(18.03.2019 12:42)Hilgi schrieb:  Ich guck ma eben auf nem Mega.....


_________
EDIT



Also auf einem Arduino UNO und einem MEGA gestestet, geht immer...

Arduino IDE 1.8.8 ( Windows Store - 1.8.19.0 )

Wie ist denn deine Stromversorgung und der Aufbau?

Cool, Danke Dir Smile
Hab noch ne etwas ältere IDE. Weiß ich gerade nicht aus dem Kopf. Auf jeden Fall 1.8.x, vielleicht 1.8.3 oder so. Selbst von der Webseite heruntergeladen - nicht aus dem Store.
Stromversorgung ist eine stabile 5V USB-Verbindung an einen Linux-PC, von dem ich die beiden o.g. Calls absetze. Der Zähler hat eine eigene Versorgung und hat einen potentialfreien Ausgang, sodass ich den direkt an den GPIO und GND anschließe.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2019, 13:18 (Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2019 13:24 von Hilgi.)
Beitrag #7
RE: Wasserverbrauchszähler, statische Variablen, komisches Verhalten in der loop()
Zitat:stabile 5V USB-Verbindung an einen Linux-PC

Naja Tongue


Ich würde mal versuchen das const -> static ( falsch gedacht) zu entfernen, das braucht man wirklich nicht an der Stelle, da es global deklariert wurde, wird es übrigens nicht den wert behalten bei jedem durchlauf.

Tommy hat schon angedeutet, man braucht für den Aufbau so wie er grad ist, nicht unbedingt einen interrupt. Evtl versuche mal eine Erfassung ohne Interrupt, vlt. ist da ja was faul.




(18.03.2019 13:01)pzYsTorM schrieb:  
(18.03.2019 12:42)Hilgi schrieb:  Ich guck ma eben auf nem Mega.....


_________
EDIT



Also auf einem Arduino UNO und einem MEGA gestestet, geht immer...

Arduino IDE 1.8.8 ( Windows Store - 1.8.19.0 )

Wie ist denn deine Stromversorgung und der Aufbau?

Cool, Danke Dir Smile
Hab noch ne etwas ältere IDE. Weiß ich gerade nicht aus dem Kopf. Auf jeden Fall 1.8.x, vielleicht 1.8.3 oder so. Selbst von der Webseite heruntergeladen - nicht aus dem Store.
Stromversorgung ist eine stabile 5V USB-Verbindung an einen Linux-PC, von dem ich die beiden o.g. Calls absetze. Der Zähler hat eine eigene Versorgung und hat einen potentialfreien Ausgang, sodass ich den direkt an den GPIO und GND anschließe.

Nicht denken,...
...nachdenken... Rolleyes

Smarter - LiveData - KLAMM.de
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2019, 13:19
Beitrag #8
RE: Wasserverbrauchszähler, statische Variablen, komisches Verhalten in der loop()
(18.03.2019 12:40)pzYsTorM schrieb:  Das Delay von 16ms hab ich eingefügt, um den Interrupt zu "entprellen". Sonst wird er tatsächlich manchmal pro Impuls zweimal getriggert.
Sorry, ich habe das Microseconds überlesen und war auf 16 Sekunden aus.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Externes "Ansprechen" von Variablen xXIchbinannonymXx 3 174 20.11.2019 20:20
Letzter Beitrag: Tommy56
Sad Sonderbares Verhalten von Relais Arduino Nano Sarkermann 7 386 20.09.2019 12:26
Letzter Beitrag: Bitklopfer
  Kennt jemand einen Stepper Closed Loop Sketch? Holzwurm56 16 1.634 17.06.2019 22:37
Letzter Beitrag: georg01
  For-Loop verschluckt Ausgabe am seriellen Monitor TimeMen 5 616 14.04.2019 17:59
Letzter Beitrag: Tommy56
  Lokale Variable an loop zurück - Fehler Haukini 3 671 26.02.2019 22:33
Letzter Beitrag: Haukini
  char in Variablen aufteilen fv1895 7 791 06.01.2019 11:59
Letzter Beitrag: Tommy56
  Variablen zu einem CHAR verbinden und einbinden Frank_aus_WOB 3 1.023 02.01.2019 09:07
Letzter Beitrag: Tommy56
  Verkettung von Variablen flint74 5 799 30.12.2018 14:33
Letzter Beitrag: Tommy56
  Variablen über Eingabe im Setup beschreiben heini320 3 709 30.12.2018 11:37
Letzter Beitrag: Tommy56
  Loop wird doppelt ausgeführt nanoheld 6 1.057 26.11.2018 21:06
Letzter Beitrag: hotsystems

Gehe zu:


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