Go Down

Topic: Sicherheit gegen Signalunterbrechung (Read 851 times) previous topic - next topic

Kelevra86

Hallo zusammen,
kleine Frage: Ich habe ein Programm, bei dem ich einen Motor per Bluetooth über PWM steuer. Hier ein bisschen vom Code:
Code: [Select]

void setup() {
Serial.begin(115200);
}

void loop() {
switch(value) {

case 1:
digitalWite(12, HIGH);
analogWrite(6, 60);
break;

case 2:
digitalWite(12, LOW);
analogWrite(6, 0);
break;
}
}


Die Frage ist nun, gibt es eine Möglichkeit dass der Motor stoppt, FALLS DIE BT-VERBINDUNG ABREIßT??


Greetings,
K86

sth77

Quick&dirty: Ich würde im Sekundentakt ein Dummy-Byte senden. Wenn dieses Byte ausbleibt, kann man den Motor einfach stoppen.
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Kelevra86

Das geht leider nicht :(
Ich benutze zur Steuerung ein Android-Phone (Amarino, kennt vllt jemand). Den Datentransfer kann ich nicht editieren.

jurs


Die Frage ist nun, gibt es eine Möglichkeit dass der Motor stoppt, FALLS DIE BT-VERBINDUNG ABREIßT??


Gegen hängende Programme aller Art hilft die Installation eines Watchdogs.

Wenn der Watchdog-Timer überläuft ohne vorher resettet worden zu sein, resettet dann das ganze Programm. Du mußt dann nur die Schaltung so ausgelegt haben, dass im Fall eines Programm-Resets der Motor steht.

Using Watchdog timer in Arduino projects:
http://tushev.org/articles/electronics/48-arduino-and-watchdog-timer

MaFu


Das geht leider nicht :(
Ich benutze zur Steuerung ein Android-Phone (Amarino, kennt vllt jemand). Den Datentransfer kann ich nicht editieren.


Das würde schon gehen. Allerdings kann man dann nicht die Amarino Anwendung verwenden, sondern muss sich mittels der Amarino Bibliothek ein eigenes Android Programm schreiben.
_______
Manfred

Kelevra86

@MaFu: Eigentlich will ich nichts extra schreiben.
@jurs: Über den WDT habe ich auch schonmal nachgedacht. Das Problem ist, bevor ich die verbindung zwischen handy und smartphone hergestellt habe vergehen meist ca. 30sec. bis dahin hat mir der WDt schon dem µC resettet.

Es muss doch irgendeine Abfrage o.ä. geben, ob eine serielle Verbindung zum Bluetooth-Device besteht oder nicht ... :~

sth77

Welches Bluetooth-Modul/-Shield verwendest du denn? Ist jemandem bekannt, wie die Steuerleitungen RTS/CTS auf Verbindungsabbrüche reagieren? Vielleicht kann man dort ansetzen.
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8


jurs


@jurs: Über den WDT habe ich auch schonmal nachgedacht. Das Problem ist, bevor ich die verbindung zwischen handy und smartphone hergestellt habe vergehen meist ca. 30sec. bis dahin hat mir der WDt schon dem µC resettet.


1. Wieso soll das ein Problem darstellen?
Wird Deine loop-Funktion für 30 Sekunden blockiert und läuft in der Zeit nicht, während die Verbindung hergestellt wird?

2. Falls die loop beim Herstellen der Verbindung tatsächlich blockiert sein sollte:
Einen Watchdog-Timer kannst Du zu jedem beliebigen Zeitpunkt im Programm aktivieren (und auch deaktivieren), das muß nicht unbedingt in der setup()-Funktion stattfinden. Das kannst Du jederzeit auch später in der loop()-Funktion irgendwann machen.

Kelevra86

{Solved}
Aaah Danke Jurs!
Habe den WDT jetzt in einer meiner Funktionen erst initialisiert. Dadurch klappt es so wie es will  ;)

Go Up