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
if Bedingung einfügen
19.03.2016, 23:14 (Dieser Beitrag wurde zuletzt bearbeitet: 19.03.2016 23:30 von ardu_arne.)
Beitrag #1
if Bedingung einfügen
Hallo,

irgendwie stehe ich gerade auf dem Schlauch, bei folgendem Code würde ich gerne noch eine if Anweisung einfügen (direkt nach void loop() ), scheitere aber gerade irgendwie daran:

Code:
#include <ESP8266WiFi.h>
const char* SSID = "SSID";
const char* PASS = "pass";
char server[] = "mail.smtpcorp.com";

WiFiClient client;
void setup()
{
  Serial.begin(115200);
  delay(10);
  Serial.println("");
  Serial.println("");
  Serial.print("Connecting To ");
  Serial.println(SSID);
  WiFi.begin(SSID, PASS);

  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi Connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  byte ret = sendEmail();
}

void loop()
{

Hier soll meine if Anweisung rein, z.b. so:

  if (analogRead(sensorPin) < 10) {


byte sendEmail()
{
  byte thisByte = 0;
  byte respCode;

  if (client.connect(server, 2525) == 1) {
    Serial.println(F("connected"));
  } else {
    Serial.println(F("connection failed"));
    return 0;
  }
  if (!eRcv()) return 0;

  Serial.println(F("Sending EHLO"));
  client.println("EHLO www.example.com");
  if (!eRcv()) return 0;
  Serial.println(F("Sending auth login"));
  client.println("auth login");
  if (!eRcv()) return 0;
  Serial.println(F("Sending User"));
  // Change to your base64, ASCII encoded user
  client.println("xxxxxx"); //<---------User
  if (!eRcv()) return 0;
  Serial.println(F("Sending Password"));
  // change to your base64, ASCII encoded password
  client.println("yyyyyyyy");//<---------Passw
  if (!eRcv()) return 0;
  Serial.println(F("Sending From"));
  // change to your email address (sender)
  client.println(F("MAIL From: cccc@gmail.com"));
  if (!eRcv()) return 0;
  // change to recipient address
  Serial.println(F("Sending To"));
  client.println(F("RCPT To: xxx@yormai.com"));
  if (!eRcv()) return 0;
  Serial.println(F("Sending DATA"));
  client.println(F("DATA"));
  if (!eRcv()) return 0;
  Serial.println(F("Sending email"));
  // change to recipient address
  client.println(F("To:  xxx@yormai.com"));
  // change to your address
  client.println(F("From: yyyyy@gmail.com"));
  client.println(F("Subject: Esp8266 email test\r\n"));
  client.println(F("This is from my ESP8266\n"));
  client.println(F("This is line 2 from my ESP8266"));
  client.println(F("This is line 3 from my ESP8266"));

  client.println(F("."));
  if (!eRcv()) return 0;
  Serial.println(F("Sending QUIT"));
  client.println(F("QUIT"));
  if (!eRcv()) return 0;
  client.stop();
  Serial.println(F("disconnected"));
  return 1;
}

byte eRcv()
{
  byte respCode;
  byte thisByte;
  int loopCount = 0;

  while (!client.available()) {
    delay(1);
    loopCount++;
    // if nothing received for 10 seconds, timeout
    if (loopCount > 10000) {
      client.stop();
      Serial.println(F("\r\nTimeout"));
      return 0;
    }
  }

  respCode = client.peek();
  while (client.available())
  {
    thisByte = client.read();
    Serial.write(thisByte);
  }

  if (respCode >= '4')
  {
    //  efail();
    return 0;
  }
  return 1;
}
}

Das heißt, die Email soll nur gesendet werden sobald analogRead(sensorPin) < 10).
Aber ich bekomme da vom Compiler immer nur: 'sendEmail' was not declared in this scope. Da ist wohl die Zeile: byte ret = sendEmail(); vor dem loop gemeint.

Bestimmt nur irgend ein doofer Klammersetzungs Anfänger Fehler Wink

Kann mir da bitte mal kurz einer helfen?

Edit: Codebereich formatiert
Gruß Arne
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.03.2016, 23:28
Beitrag #2
RE: if Bedingung einfügen
Hallo,

Code:
void loop()
{

// Hier soll meine if Anweisung rein, z.b. so:

  if (analogRead(sensorPin) < 10) {
    sendEmail()
}

byte sendEmail()

Irgendwo fehlt dann warscheinlich noch ein }

Gruß
Arne

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.03.2016, 23:30
Beitrag #3
RE: if Bedingung einfügen
Du möchtest doch in eine Funktion springen, dann musst du die auch entsprechend aufbauen.

Code:
void sendmail() {

//usw
Deine als Variable deklarierte Zeile kennt der kompiler nicht.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.03.2016, 23:33 (Dieser Beitrag wurde zuletzt bearbeitet: 19.03.2016 23:34 von gronph.)
Beitrag #4
RE: if Bedingung einfügen
(19.03.2016 23:30)hotsystems schrieb:  Du möchtest doch in eine Funktion springen, dann musst du die auch entsprechend aufbauen.

Code:
void sendmail() {

//usw
Deine als Variable deklarierte Zeile kennt der kompiler nicht.

oweh, genau da enden meine Programier kentnisse Blush

p.s. danke fürs richtige formatieren, Arne
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.03.2016, 00:18
Beitrag #5
RE: if Bedingung einfügen
(19.03.2016 23:33)gronph schrieb:  
(19.03.2016 23:30)hotsystems schrieb:  Du möchtest doch in eine Funktion springen, dann musst du die auch entsprechend aufbauen.

Code:
void sendmail() {

//usw
Deine als Variable deklarierte Zeile kennt der kompiler nicht.

oweh, genau da enden meine Programier kentnisse Blush

p.s. danke fürs richtige formatieren, Arne

Naja, kein Problem, das kann man lernen. Wink

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.03.2016, 13:56 (Dieser Beitrag wurde zuletzt bearbeitet: 20.03.2016 14:00 von gronph.)
Beitrag #6
RE: if Bedingung einfügen
habs hinbekommen Big Grin

Code:
#include <ESP8266WiFi.h>
const char* SSID = "xxxx";
const char* PASS = "xxxx";
char server[] = "smtp.email.de";

boolean statusCheck = false;

WiFiClient client;
void setup()
{
  Serial.begin(115200);
  delay(10);
  Serial.println("");
  Serial.println("");
  Serial.print("Connecting To ");
  Serial.println(SSID);
  WiFi.begin(SSID, PASS);

  //  pinMode(sensorPin, INPUT);

  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi Connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
//  byte ret = sendEmail();
}

void loop()

{

  int sensorValue = analogRead(A0);
  float voltage = sensorValue * (5.0 / 1023.0);

  if ((voltage < 2) && statusCheck == false)
  {
    if (sendEmail()) Serial.println(F("Email sent"));
    else Serial.println(F("Email failed"));
    statusCheck = true;
  }
  else if (voltage > 2)
  {
    statusCheck = false;
  }
}




byte sendEmail()
{
  byte thisByte = 0;
  byte respCode;

  if (client.connect(server, 25)) {
    Serial.println(F("connected"));
  } else {
    Serial.println(F("connection failed"));
    return 0;
  }
  if (!eRcv()) return 0;

  Serial.println(F("Sending EHLO"));
  client.println("EHLO email.de");
  if (!eRcv()) return 0;
  Serial.println(F("Sending auth login"));
  client.println("auth login");
  if (!eRcv()) return 0;
  Serial.println(F("Sending User"));
  // Change to your base64, ASCII encoded user
  client.println("xxxxx"); //<---------User
  if (!eRcv()) return 0;
  Serial.println(F("Sending Password"));
  // change to your base64, ASCII encoded password
  client.println("xxxxx");//<---------Passw
  if (!eRcv()) return 0;
  Serial.println(F("Sending From"));
  // change to your email address (sender)
  client.println(F("MAIL From: arduino@email.de"));
  if (!eRcv()) return 0;
  // change to recipient address
  Serial.println(F("Sending To"));
  client.println(F("RCPT To: test@email.de"));
  if (!eRcv()) return 0;
  Serial.println(F("Sending DATA"));
  client.println(F("DATA"));
  if (!eRcv()) return 0;
  Serial.println(F("Sending email"));
  // change to recipient address
  client.println(F("To:  test@email.de"));
  // change to your address
  client.println(F("From: test@email.de"));
  client.println(F("Subject: Blabla\r\n"));
  client.println(F("This is line 1 from my ESP8266\n"));
  // client.println(F("This is line 2 from my ESP8266"));
  // client.println(F("This is line 3 from my ESP8266"));

  client.println(F("."));
  if (!eRcv()) return 0;
  Serial.println(F("Sending QUIT"));
  client.println(F("QUIT"));
  if (!eRcv()) return 0;
  client.stop();
  Serial.println(F("disconnected"));
  return 1;
}

byte eRcv()
{
  byte respCode;
  byte thisByte;
  int loopCount = 0;

  while (!client.available()) {
    delay(1);
    loopCount++;
    // if nothing received for 10 seconds, timeout
    if (loopCount > 10000) {
      client.stop();
      Serial.println(F("\r\nTimeout"));
      return 0;
    }
  }

  respCode = client.peek();
  while (client.available())
  {
    thisByte = client.read();
    Serial.write(thisByte);
  }

  if (respCode >= '4')
  {
    //  efail();
    return 0;
  }
  return 1;
}

Soweit funktioniert das auch problemlos und die Email wird versendet wenn die Bedingung schon beim Start des Arduinos erfüllt ist.
Ist jedoch die Bedingung beim Start noch nicht erfüllt und wird erst später erfüllt, bekomme ich leider nur noch ein "connection failed" und "Email failed".
Gibt es da ein Timeout? Wie kann ich das verhindern?

Wäre nett wenn da nochmal jemand kurz drüberschauen könnte Shy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  If-Bedingung funktioniert nicht bei Serial1.write Datatom 6 226 16.09.2016 20:36
Letzter Beitrag: Datatom
  Teensy- Tastaturblöcke in Schreiben einfügen Modinox 19 1.408 10.01.2016 19:09
Letzter Beitrag: Modinox
  Bitte Hilfe bei IF-Bedingung DL1AKP 5 665 07.10.2015 21:04
Letzter Beitrag: hotsystems
  gesucht: C-Funktion zum Einfügen eines Teilstrings in einen größeren HaWe 1 864 25.05.2015 10:30
Letzter Beitrag: HaWe
  If- Bedingung DHT11 piper0931 8 2.509 23.05.2015 17:27
Letzter Beitrag: rkuehle
  Arduino-Code in Word 2013 einfügen Cray-1 2 1.740 12.01.2015 09:08
Letzter Beitrag: alpenpower
  Wie Interrupt einfügen? citycar 12 1.825 21.11.2014 00:15
Letzter Beitrag: Thorsten Pferdekämper
  Switch Case, LEDs bleiben an, Bedingung aber falsch luto92 4 1.447 16.11.2014 16:52
Letzter Beitrag: luto92
  LCD mit HC-SR04 Formel einfügen? power-dodge 2 1.796 16.11.2013 13:51
Letzter Beitrag: power-dodge

Gehe zu:


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