[gelöst]Einfache Frage zu IF

Guten Abend zusammen,

ich habe folgenden Tab in einem Sketch. Aufrufen tue ich die Funktion im Hauptprogramm

String TXFhemVoltage=String();
String TXFhemCurrent=String();
String TXFhemIsMowing=String();
String result;
String Test;

void FHEMTX()
{

TXFhemVoltage="setreading 3dMower batteryVoltage ";
TXFhemVoltage+=BatteryVoltage;

TXFhemCurrent="setreading 3dMower current ";
TXFhemCurrent+="not available";

Test="forward";

_fhem.LoadFromServer(TXFhemVoltage);
_fhem.LoadFromServer(TXFhemCurrent);


result = _fhem.LoadFromServer("{MowerControl()}");


Serial.print(Test);
Serial.print(result);


if (result==Test){
Serial.print("Hallo");
}


}

Meine recht Simple Frage ist, warum der IF Zweig nicht ausgeführt wird? Im Serial Monitor sehe ich, dass in Test sowie result das gleiche drin steht.

Jedoch sehe ich nie ein "Hallo" im Serial Monitor.

Vom Verständnis her müsste ebenfalls folgendes funktionieren, wenn in "result" forward steht.

if (result == "forward"){

Serial.print("Hallo"); }

Aber auch hier nichts!

Alles kein Hexenwerk,aber das blicke ich nicht.

Grüße, und einen schönen Abend noch.

Esjaycc: ... Jedoch sehe ich nie ein "Hallo" im Serial Monitor. ...

Wird die serielle Schnittstelle überhaupt initialisiert (mit Serial.begin())?

Gruß

Gregor

Poste den kompletten Sketch, dann sehen wir evtl. mehr.

Besser poste einen compilierbaren Minimum Sketch, der den Fehler zeigt. Der gesamte Sketch dürfte recht umfangreich sein.

Danke für die raschen Antworten.

@Gregor

Wie gesagt sehe ich ja im Serial Monitor das Serial.print(result) sowie Serial.print(Test)…

Also ja :slight_smile:

Tab1

/* Comment this out to disable prints and save space */
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SoftwareSerial.h>
#include <FHEM.h>

SoftwareSerial NodeMCU(D2,D3);   //RXD2 TXD3

FHEM _fhem("http://XXXXXXXXXXX:8083/fhem"); //if you do not use Basic Auth

//#define LED LED_BUILTIN

#define LED D4      // on various NODEMCU boards the LED Pin is different.....

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "RXXXXXXXXXXXXXXXXXXXXXXXXN";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "XXXXXXXXXX";
char pass[] = "XXXXXXXXXXX";

int buttonState = 0;
char  Version[16];

// RX Variables
float val_VoltNow;                  // Battery Voltage from MEGA
float BatteryVoltage;               // Voltage read last RX
int Loop_Cycle_Mowing;              // Current Loop Cycle from MEGA


int Mower_Parked;
int Mower_Parked_Low_Batt;
int Mower_Docked;
int Mower_Docked_Filter;
int Mower_Running;
int Mower_Running_Filter;
int Mower_Lost;
int Charge_Detected;
int Tracking_Wire;
int Compass_Heading_Lock;

int i;                              // Transmit blank code

bool Mower_Already_Started = 0;
bool Going_Home_Already = 0;

int j;
int k;
int transmit_blynk_code = 0;

bool Manuel_Mode;
bool Automatic_Mode;


int loopstatus = 0;
int All;
int RX_Data_Recieved;
int lastConnectionAttempt = millis();
int connectionDelay = 5000; // try to reconnect every 5 seconds


BlynkTimer timer;
WidgetLCD lcd(V6);


// This function sends Arduino's up time every second to Virtual Pin (5).
// In the app, Widget's reading frequency should be set to PUSH. This means
// that you define how often to send data to Blynk App.

void myTimerEvent()  {
  if (  (BatteryVoltage > 10) && (BatteryVoltage < 15) ){
      Blynk.virtualWrite(V3, BatteryVoltage);
  }

  Blynk.virtualWrite(V5, Loop_Cycle_Mowing);


}

void setup()
{
  Serial.begin(9600);
  NodeMCU.begin(9600);
  Serial.println();
  Serial.println("Setting up NODEMCU........");
  Serial.println("");
  pinMode(D2,INPUT);
  pinMode(D3,OUTPUT);
  digitalWrite(LED, HIGH);                          // Turn off LED Light
  WIFI_Connect();                                   // Connect to the WIFI
  Clear_APP();
  lcd.clear();
  pinMode(LED, OUTPUT);
  
}



//Functions
//***********************************


void WIFI_Connect() {
  
  int mytimeout = millis() / 1000;
  Serial.println();
  Serial.println("*********************************************");
  Blynk.begin(auth, ssid, pass);
  
  
  while (Blynk.connected() != WL_CONNECTED) {
    delay(500);
      if((millis() / 1000) > mytimeout + 3){                      // try for less than 4 seconds to connect to WiFi router
      break;
    }
  }
  
  if(!Blynk.connected()) {
    digitalWrite(LED, HIGH);
    Serial.println("NODEMCU Disconnected");
    Serial.println("Reconnecting . . . . . . ");
    WIFI_Connect();

    }
  else {
    digitalWrite(LED, LOW);
    Serial.println("Connected. . . . . .");
    // Setup a function to be called every second
    timer.setInterval(1000L, myTimerEvent);
    }
  }

void loop()  {
  FHEMTX();                                     // FHEM
  
  loopstatus = loopstatus + 1 ;
  RX_Data_Recieved = 0;                         // resets the data received bool 
  
  if(!Blynk.connected()) {
    Blynk.run();
    timer.run();  
    digitalWrite(LED, HIGH);
    Serial.println("------------------------");
    Serial.println("NODEMCU Disconnected");
    Serial.println("Reconnecting ... ");
    WIFI_Connect() ;
    }
  else {
    Blynk.run();
    timer.run();  
    digitalWrite(LED, LOW);         //LED is inverted on a MODEMCU...
    Receive_All_From_MEGA();
    Update_Blynk_App_With_Status();
    Serial.println("");     // new line serial monitor
  }

}

Dies ist der “Main Tab”. Die restlichen Tabs bestehen aus Funktionen, welche aufgerufen werden.

Edit:
Zur besseren Übersicht den Tab 2 nochmal hinzugefügt.

String TXFhemVoltage=String();
String TXFhemCurrent=String();
String TXFhemIsMowing=String();
String result;
String Test;

void FHEMTX()
{

TXFhemVoltage="setreading 3dMower batteryVoltage ";
TXFhemVoltage+=BatteryVoltage;

TXFhemCurrent="setreading 3dMower current ";
TXFhemCurrent+="not available";

Test="forward";

_fhem.LoadFromServer(TXFhemVoltage);
_fhem.LoadFromServer(TXFhemCurrent);


result = _fhem.LoadFromServer("{MowerControl()}");


Serial.print(Test);
Serial.print(result);


if (result==Test){
Serial.print("Hallo");
}


}

Hi

Bleiakku bei 13,8 V voll, bei 10,5 V leer. Gasungsspannung müssten 14,4V gewesen sein. Deine 15 und 10 sehen mir etwas ungesund aus!

Hast Du Dir die Antwort mal als HEX-Zahlen anzeigen lassen? Wenn dort \r\n angehangen ist oder sonst ein Schmarn, kann die Prüfung auf GLEICH nicht passen.

MfG

Da muss man erstmal drauf kommen. Ich habe jetzt einfach mal eine 2 Variable gesetzt, und schwups funktioniert es.

Es scheint also wirklich so, dass irgendetwas durch "result = _fhem.LoadFromServer("{MowerControl()}");"

mitgeschickt wird, was ich so nicht sehe.

Bezogen auf deine Äußerung bezüglich der Batterie Geschichte, muss man sagen, das der Original Code nicht von mir stammt, sondern von hier.

https://github.com/REPALphilread/ReP_AL-3D-Lawn-Mower

Ich versuche gerade nur eine Art Schnittstelle für meinen Fhem Server zu schreiben, damit ich den Kumpel so flexibel wie möglich steuern kann.

Alles andere werde ich mir dann nochmal anschauen.

Da ja jetzt der Winter kommt, ist eh nicht viel mit Rasen mähen.

Ich danke dir zumindest für den Hinweis.

LG

Du solltest ausserdem millis() nicht einem int zuweisen sondern einem 'uint32_t' oder einem 'unsigned long' sonst kann Dir das irgendwann auf die Füsse fallen, da der Wertebereich von int dafür zu beschränkt ist.

LG Stefan

Deltaflyer: ... da der Wertebereich von int dafür zu beschränkt ist.

Nach 32 Sekunden (-32767...32768) oder bei unsigned nach 65 Sekunden (65535).

MfG