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
Schalterzustand mit App ändern
01.01.2021, 15:38
Beitrag #1
Schalterzustand mit App ändern
Moin zusammen,
mit meinem Sketch wird mit einem Nano und einem Blutooth Shield ( HC 05) über eine App ( diese habe ich übernommen) eine H- Brücke ( L298) umgeschaltet. Mit dem delay ist es so, dass der Ausgang der H- Brücke für 800 ms die positive Eingangsspg der H- Brücke ( +12V) bekommt und danach LOW wird. Beim nächsten Umschaltvorgang für 800 ms der H- Brückenausgang die negative Eingangsspg ( -12V) bekommt. Dies funkioniert soweit ohne Probleme. Nun wollte ich das delay durch das timing mit den Moba Tools ersetzen. So wie in dem Sketch habe ich es bereits in etlichen anderen Anwendungen durchgeführt und es hat immer funktioniert. Deswegen bin ich im Moment etwas ratlos.
Im 2 ten Sketch funktioniert das delay nachwievor.

Code:
#include <SoftwareSerial.h>

#define JA_STRAIGHT 2 // motorischer Antrieb
#define JA_BRANCH 3

SoftwareSerial Bluetooth(12, 13); // RX, TX

bool stringComplete = false;
String inputString = "";

void setup() {
  Serial.begin(9600);
  Bluetooth.begin(9600);
  inputString.reserve(4);

  pinMode(JA_STRAIGHT, OUTPUT);
  pinMode(JA_BRANCH, OUTPUT);
}
void loop() {

  if (stringComplete) {
    if (inputString.charAt(0) == 'j' ) {  // Schalterbetätigung
      if (inputString.charAt(1) == 'a') { // Schalter a
        if (inputString.charAt(2) == '0' ) { //Stellung 1
          digitalWrite(JA_STRAIGHT, LOW);  // Umschaltung mit L298
          digitalWrite(JA_BRANCH, HIGH);
          delay (800);
        }
        digitalWrite(JA_STRAIGHT, HIGH);

        if (inputString.charAt(2) == '1') { // Stellung 2
          digitalWrite(JA_BRANCH, LOW);  // Umschaltung mit L 298
          digitalWrite(JA_STRAIGHT, HIGH);
          delay (800);
        }
        digitalWrite(JA_BRANCH, HIGH);
      }
    }
    inputString = "";
    stringComplete = false;
  }
  bluetoothEvent();
}

void bluetoothEvent() {
  if (Bluetooth.available()) {
    char inChar = (char)Bluetooth.read();
    inputString += inChar;
    if (inChar == 'z') {
      stringComplete = true;
    }
  }
}
Mit diesem Sketch funtioniert nur der 2te Teil mit dem delay

Code:
#include <MobaTools.h>
#include <SoftwareSerial.h>

#define JA_STRAIGHT 2
#define JA_BRANCH 3

SoftwareSerial Bluetooth(12, 13); // RX, TX

bool stringComplete = false;
String inputString = "";
MoToTimer delayZeit1;
int x = 0;


void setup() {
  Serial.begin(9600);
  Bluetooth.begin(9600);
  inputString.reserve(4);

  pinMode(JA_STRAIGHT, OUTPUT);
  pinMode(JA_BRANCH, OUTPUT);
}

void loop() {
  if (stringComplete) {
    if (inputString.charAt(0) == 'j' ) {
      if (inputString.charAt(1) == 'a') {
        if (inputString.charAt(2) == '0' && x == 0) {
          delayZeit1.setTime(800);
          digitalWrite(JA_STRAIGHT, LOW);
          digitalWrite(JA_BRANCH, HIGH);
          x = 1;
        }
        if ( delayZeit1.expired()) {
          digitalWrite(JA_STRAIGHT, HIGH);
        }
        if (inputString.charAt(2) == '1') {
          digitalWrite(JA_BRANCH, LOW);
          digitalWrite(JA_STRAIGHT, HIGH);
          delay (800);
        }
        digitalWrite(JA_BRANCH, HIGH);
      }
    }
    inputString = "";
    stringComplete = false;
  }
  bluetoothEvent();
}

void bluetoothEvent() {
  if (Bluetooth.available()) {
    char inChar = (char)Bluetooth.read();
    inputString += inChar;
    if (inChar == 'z') {
      stringComplete = true;
    }
  }
}

Mit freundlichen Grüßen
Norbert
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.01.2021, 10:46
Beitrag #2
RE: Schalterzustand mit App ändern
Habe noch eine Änderung vorgenommen ( int x herausgenommen).Es sieht nun so, dass bei der ersten Schaltänderung if (inputString.charAt(2) == '0' ) { keine Veränderung des Zustandes stattfindet und bei der zweiten
if (inputString.charAt(2) == '1') { die Veränderung navh 800 ms stattfindet.
Hat jemand eine Idee für das problem?

Code:
#include <MobaTools.h>
#include <SoftwareSerial.h>

#define JA_STRAIGHT 2
#define JA_BRANCH 3

SoftwareSerial Bluetooth(12, 13); // RX, TX

bool stringComplete = false;
String inputString = "";
MoToTimer delayZeit1;
void setup() {
  Serial.begin(9600);
  Bluetooth.begin(9600);
  inputString.reserve(4);

  pinMode(JA_STRAIGHT, OUTPUT);
  pinMode(JA_BRANCH, OUTPUT);
}

void loop() {
  if (stringComplete) {
    if (inputString.charAt(0) == 'j' ) {
      if (inputString.charAt(1) == 'a') {
        if (inputString.charAt(2) == '0' ) {
          delayZeit1.setTime(800);
          digitalWrite(JA_STRAIGHT, LOW);
          digitalWrite(JA_BRANCH, HIGH);
        }
        if ( delayZeit1.expired()) {
          digitalWrite(JA_STRAIGHT, HIGH);
        }
        if (inputString.charAt(2) == '1') {
          digitalWrite(JA_BRANCH, LOW);
          digitalWrite(JA_STRAIGHT, HIGH);
          delay (800);
        }
        digitalWrite(JA_BRANCH, HIGH);
      }
    }
    inputString = "";
    stringComplete = false;
  }
  bluetoothEvent();
}

void bluetoothEvent() {
  if (Bluetooth.available()) {
    char inChar = (char)Bluetooth.read();
    inputString += inChar;
    if (inChar == 'z') {
      stringComplete = true;
    }
  }
}

Mit freundlichen Grüßen
Norbert
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.01.2021, 19:11
Beitrag #3
RE: Schalterzustand mit App ändern
Hallo Norbert,
Aufgrund des Titels habe ich hier nicht reingeschaut - mit Apps habe ich nichts am Hut Wink. Aufgrund deiner PM habe ich erst bemerkt, dass es hier auch um die MobaTools geht.
Ich denke, dein Problem ist, dass du diesen Block:
Code:
if ( delayZeit1.expired()) {
          digitalWrite(JA_STRAIGHT, HIGH);
        }
tief in deinen Empfangs-ifs vergraben hast.
Der muss auf der obersten Ebene im loop stehen, unabhängig von deinen anderen if's.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.01.2021, 10:33
Beitrag #4
RE: Schalterzustand mit App ändern
(10.01.2021 19:11)MicroBahner schrieb:  Hallo Norbert,
Aufgrund des Titels habe ich hier nicht reingeschaut - mit Apps habe ich nichts am Hut Wink. Aufgrund deiner PM habe ich erst bemerkt, dass es hier auch um die MobaTools geht.
Ich denke, dein Problem ist, dass du diesen Block:
Code:
if ( delayZeit1.expired()) {
          digitalWrite(JA_STRAIGHT, HIGH);
        }
tief in deinen Empfangs-ifs vergraben hast.
Der muss auf der obersten Ebene im loop stehen, unabhängig von deinen anderen if's.

Moin Franz Peter,
ich habe den Block an anderen Stellen positioniert, aber leider ohne Erfolg.
M.E: wäre es auch nicht richtig, da mit
digitalWrite(JA_STRAIGHT, LOW);
digitalWrite(JA_BRANCH, HIGH);
eine Positionsänderung erfolgt, die wiederum nach 800ms mit
if ( delayZeit1.expired()) {
digitalWrite(JA_STRAIGHT, HIGH);
geändert werden soll. Vielleicht ist aufgrund der erforderlichen if Anweisungen nur ein delay möglich.

Mit freundlichen Grüßen
Norbert
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.01.2021, 12:23
Beitrag #5
RE: Schalterzustand mit App ändern
(11.01.2021 10:33)RCudino schrieb:  M.E: wäre es auch nicht richtig, da mit
digitalWrite(JA_STRAIGHT, LOW);
digitalWrite(JA_BRANCH, HIGH);
eine Positionsänderung erfolgt, die wiederum nach 800ms mit
if ( delayZeit1.expired()) {
digitalWrite(JA_STRAIGHT, HIGH);
geändert werden soll. Vielleicht ist aufgrund der erforderlichen if Anweisungen nur ein delay möglich.
Es geht immer ohne delay. delayZeit1.expired() wird nur 'true' wenn Du die Zeit vorher auch aufgezogen hast. 800ms nach deinem 'stringComplete' läuft er in den Block if ( stringComplete ) gar nicht mehr rein, da würde auch das expired() nicht mehr abgefragt. Deshalb muss das auf jeden Fall unabhängig von jeder anderen Bedingung im loop abgefragt werden.
Und Du solltes den MoToTimer auch nicht mit delay mischen. Sonst kannst Du nicht regelmäßig prüfen, ob er abgelaufen ist.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.01.2021, 15:25 (Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2021 15:26 von RCudino.)
Beitrag #6
RE: Schalterzustand mit App ändern
Hallo Franz Peter,
ich habe den code wie folgt umgebaut:
den gesamten Bereich mit Zeit setzen und Zeit abfragen , alles nach
if (inputString.charAt(2) == '0' ) { direkt hinter den loop
Es funktioniert wie es soll. Vielen Dank für deinen Input.
Es lassen sich so die motorischen Weichen von LGB per App schalten

Code:
#include <MobaTools.h>
#include <SoftwareSerial.h>

#define JA_STRAIGHT 2
#define JA_BRANCH 3

SoftwareSerial Bluetooth(12, 13); // RX, TX

bool stringComplete = false;
String inputString = "";
MoToTimer delayZeit1;
MoToTimer delayZeit2;

void setup() {
  Serial.begin(9600);
  Bluetooth.begin(9600);
  inputString.reserve(4);

  pinMode(JA_STRAIGHT, OUTPUT);
  pinMode(JA_BRANCH, OUTPUT);
}
void loop() {
  if (inputString.charAt(2) == '0'  ) {
    delayZeit1.setTime(800);
    digitalWrite(JA_STRAIGHT, LOW);
    digitalWrite(JA_BRANCH, HIGH);
  }
  if ( delayZeit1.expired()) {
    Serial.println ("ok");
    digitalWrite(JA_STRAIGHT, HIGH);
  }
  if (inputString.charAt(2) == '1') {
    delayZeit2.setTime(800);
    digitalWrite(JA_BRANCH, LOW);
    digitalWrite(JA_STRAIGHT, HIGH);
  }
  if ( delayZeit2.expired()) {
    digitalWrite(JA_BRANCH, HIGH);
  }
  if (stringComplete) {
    if (inputString.charAt(0) == 'j' ) {
      if (inputString.charAt(1) == 'a') {
      }
    }
    inputString = "";
    stringComplete = false;
  }
  bluetoothEvent();
}
void bluetoothEvent() {
  if (Bluetooth.available()) {
    char inChar = (char)Bluetooth.read();
    inputString += inChar;
    if (inChar == 'z') {
      stringComplete = true;
    }
  }
}

Mit freundlichen Grüßen
Norbert
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.01.2021, 15:39 (Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2021 15:39 von MicroBahner.)
Beitrag #7
RE: Schalterzustand mit App ändern
Hallo Norbert,
super, wenn's jetzt funktioniert. Aber was versprichst Du dir von diesen Abfragen:
(11.01.2021 15:25)RCudino schrieb:  
Code:
if (inputString.charAt(0) == 'j' ) {
      if (inputString.charAt(1) == 'a') {
      }
    }
Da die Anweisungsblöcke leer sind, sind die eigentlich sinnfrei, da passiert ja nichts.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.01.2021, 15:52
Beitrag #8
RE: Schalterzustand mit App ändern
(11.01.2021 15:39)MicroBahner schrieb:  Hallo Norbert,
super, wenn's jetzt funktioniert. Aber was versprichst Du dir von diesen Abfragen:
(11.01.2021 15:25)RCudino schrieb:  
Code:
if (inputString.charAt(0) == 'j' ) {
      if (inputString.charAt(1) == 'a') {
      }
    }
Da die Anweisungsblöcke leer sind, sind die eigentlich sinnfrei, da passiert ja nichts.

Da hast du Recht. Ich kann sie herausnehmen und der Ablauf ist der selbe. Jetzt hat sich allerdings ein Folgeproblem aufgetan.
Auf der App sind 4 Schalter a,b,c,d mit j sind die Schalter als solches definiert.
So wie der code jetzt läuft , läßt sich der Zustand des motorischen Antriebes mit jedem Schalter ändern. Das war natürlich vorher nicht so. Daher wohl auch die if Verschachtelung

Mit freundlichen Grüßen
Norbert
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Farbe und Helligkeit der LED im Code ändern Mutz 11 640 01.12.2020 21:58
Letzter Beitrag: Tommy56
  Wertebereich Analog PIN ändern AGK 54 5.840 22.06.2020 21:06
Letzter Beitrag: Bitklopfer
  1.8 Zoll adafruit tft lcd mit bluetooth die Anzeige ändern JaimyS 8 1.310 24.01.2020 10:41
Letzter Beitrag: hotsystems
  LED Helligkeit zu bestimmter Uhrzeit ändern Schneggl 5 1.109 19.10.2019 21:26
Letzter Beitrag: hotsystems
  Ändern der Reihenfolge eines "Lauflichtes" rebeldesigned 3 1.527 05.11.2018 12:07
Letzter Beitrag: rebeldesigned
  OLED Schriftart ändern Klawino 1 2.542 07.03.2018 23:07
Letzter Beitrag: Tommy56
  [Frage] Unterschied zwischen &=~ und ^= beim Bit ändern auf dem Port? avoid 13 3.796 11.01.2018 00:53
Letzter Beitrag: avoid
  Countdown - Werte ändern am Touchscreen ElAleMaNo 2 2.065 04.07.2017 18:43
Letzter Beitrag: Tommy56
  Sketch ändern für ACS712 Sandro2504 3 1.887 04.06.2017 05:55
Letzter Beitrag: Bitklopfer
  SD-Library pins ändern. möglich? stefan-87 3 2.471 14.03.2017 11:46
Letzter Beitrag: Tommy56

Gehe zu:


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