Hallo allerseits,
ich experimentiere gerade wieder etwas und hänge schön am Anfang, also es geht um folgendes:
Innerhalb der loop() möchte ich eine float Variable immer wieder als 0 (null) haben, aber irgendiw wird immer da weiter gezählt, wo vorher aufgehört wurde. Ich hoffe Ihr versteht was ich meine...
Die Variable "float ZStand_0;" soll in der loop() immer wieder 0 sein , aber er zählt immer einen dazu. grrrr
Was muss ich wo eintragen, damit "ZStand_0" immer wieder 0 ist ?
Hier der Code den ich bis jetzt fertig habe:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <Ethernet.h> // library for ethernet functions
//ETHERNET-SETTINGS
byte mac[] = { 0x5D, 0xA2, 0xFA, 0x2D, 0x76, 0x8C };// MAC-Adresse des Arduino
byte ip[] = { 192, 168, 178, 142 }; // IP-Adresse des Arduino
byte gateway[] = { 192, 168, 178, 1 }; // Gateway
byte subnet[] = { 255, 255, 255, 0 }; // SubNet
byte server[] = { 192, 168, 178, 111 }; // IP-Adresse des Servers
EthernetClient client;
char host[] = "192.168.178.111"; // Domain
char url[] = "/Arduino/Gas/insert1.php"; // Pfad zur insert1.php
char key[] = "123456";
char lesen[] = "/Arduino/Gas/read.php"; // Pfad zur read.php
char Mail[] = "/Arduino/Mail/mailsender.php"; // Pfad zur mail.php
char Fail[] = "/Arduino/Mail/failmailsender.php"; // Pfad zur mail.php
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 4 line display
byte hoch3[8] = {
B01110, B00010, B00110, B00010,
B01110, B00000, B00000, B00000 }; // erzeugt die ³ bei m³
int PowerLED = 3; // rote kontroll LED
int ReedPin = 8; // Schalter ist mit Pin 8 verbunden
int val; // Variable für den Pin Zustand
int buttonState; // Variable für den letzten Schalterzustand
int buttonPresses = 0; // Wie oft ist der Schalter gedrückt
float ZStand = 903789; // Zählerstand bei Anschluss Reedkontakt
float ZStand_DB; // Zählerstand aus DB
float ZStand_Neu; // Zählerstand Neu
float ZStand_0; // <-- DB Eintrag leer bzw. keine Verbindung
char returnvalue = 0; // rückgabewert
char buffer[10]; // puffer initialisieren mit leerem string
void setup()
{
pinMode(PowerLED, OUTPUT); // Pin rote LED als Ausgang setzten
pinMode(ReedPin, INPUT); // Reedkontakt Pin als Eingang setzten
Serial.begin(9600); // Start der seriellen Kommunikation mit 9600bps
digitalWrite(ReedPin,HIGH); // Strom auf Reedkontaktpin geben
Ethernet.begin(mac, ip); // IP Konfiguration setzten
delay(1000);
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.createChar(0, hoch3);
lcd.setCursor(2, 0); // Zeile 1
lcd.print(F("* Gasduino *")); // Begruessung
delay(1000);
lcd.setCursor(0, 1);
lcd.print(F("wird gesrtartet"));
delay(1000);
lcd.setCursor(0, 1);
lcd.print(F(" "));
delay(1000);
lcd.setCursor(0, 1);
lcd.print(F("wird gesrtartet"));
delay(2000);
lcd.clear();
lcd.setCursor(0, 0); // LCD Zeile 1
lcd.print(F("Ethernet Starten"));
delay(2000);
if(client.connect(server, 8000)) // LCD Anzeige Server verbindung
{
lcd.setCursor(0,1); // Zeile 2
lcd.print(F("verbunden ..."));
delay(2000);
lcd.clear(); // lösche Display
lcd.setCursor(0,0); // Zeile 1
lcd.print(F("Lese aus DB ..."));
delay(1000);
daten_laden(); // DB auslesen beginnen
delay(1000);
ZStand_DB =atof(buffer)/100; // durch 100 teilen, weil in der read.php multipliziert wird (*100)
lcd.clear(); // lösche Display
lcd.setCursor(0 ,0); // Zeile 1
lcd.print(F("Gasstand aus DB"));
lcd.setCursor(4 ,1); // Zeile 2
lcd.print(ZStand_DB); // aktueller Zaehlerstand
lcd.setCursor(11,1);
lcd.print("m");
lcd.setCursor(12, 1);
lcd.write(0);
buttonState = digitalRead(ReedPin); // Anfangszustand lesen
delay(1000);
//Mail_senden(); // Sende Info Mail das Arduino Neu gestartet wurde
client.flush();
client.stop();
} else {
digitalWrite(PowerLED, HIGH);
lcd.setCursor(0, 1); // Keine LAN Verbindung
lcd.print(F(">>> Kein LAN <<<"));
client.flush();
client.stop();
}
}
void loop()
{
val = digitalRead(ReedPin); // Eingabewert lesen und in val speichern
if (val != buttonState) { // Der Zustand des Schalters hat sich verändert
if (val == LOW) { // Ist der Schalter gedrückt?
buttonPresses++; // Inkrementieren der Variablen buttonPresses
daten_laden(); // DB auslesen, wenn beim Start kein Wert eingelen werden konnte
delay(2000);
ZStand_DB =atof(buffer)/100; // durch 100 teilen, weil in der read.php multipliziert wird (*100)
if (ZStand_DB > ZStand/100) // ist DB eintrag grösser als manueller eintrag
{
ZStand_Neu = ZStand_DB*100 + buttonPresses; // DB eintrag + impuls = Neuer Zählerstand
}
else if (ZStand_DB < 1) // ist DB eintrag leer bzw. keine Verbindung
{
ZStand_Neu = ZStand_0 + buttonPresses; // Leere DB + impuls = Neuer Zählerstand
}
else
{
ZStand_Neu = ZStand + buttonPresses; // manueller eintrag + impuls = Neuer Zählerstand
}
lcd.clear();
lcd.setCursor(0 ,0); // Zeile 1
lcd.print(F("Now"));
lcd.setCursor(7, 0);
lcd.print(ZStand_Neu/100);
lcd.setCursor(14,0);
lcd.print("m");
lcd.setCursor(15,0);
lcd.write(0);
lcd.setCursor(0, 1);
lcd.print(F("MySQL"));
lcd.setCursor(7, 1);
if(ZStand_DB < 1){
lcd.setCursor(7, 1);
lcd.print(F("Fail "));
}
lcd.print(ZStand_DB);
lcd.setCursor(14,1);
lcd.print("m");
lcd.setCursor(15,1);
lcd.write(0);
float gz = ZStand_Neu/100;
//Daten_senden(gz); // Zaehlerstand an DB schicken
delay(1000);
}
}
buttonState = val; // Den Zustand merken
}
void daten_laden() // DB Abfragen
{
int index = 0; // zaehlindex auf 0 setzen
client.connect(server, 8000); // connect to server
Serial.print(F("Verbinde ... "));
delay(2000);
if (client.connected()) { // wenn connected, request senden
digitalWrite(PowerLED, LOW); // rote LED aus
client.print(F("GET "));
client.print(lesen);
client.println(F(" HTTP/1.1"));
client.print(("Host: "));
client.print(host);
client.println();
client.println();
delay(100);
}
else {
Serial.println(F("Keine Verbindung..."));
digitalWrite(PowerLED, HIGH); // rote LED an bei Verbindungsfehler
client.flush();
client.stop();
client.connect(server, 8000); // connect to server
delay(1000);
if (client.connected()) {
digitalWrite(PowerLED, LOW); // rote LED aus
}
}
while (client.available() && client.read() != '
Ich hoffe Ihr köönt mich verstehen, weiß nicht wie ich das genauer beschreiben soll... ); // Lese solange Bytes aus der Verbindung und wirf sie weg bis ein $ gefunden wird.
while (client.available() && index < 10) { // einlesen der Nutzdaten. Aufpassen, das wir die Arraygrenze nicht überschreiten
buffer[index++] = client.read(); // solange zeichen vorhanden sind, das aktuelle zeichen in puffer schreiben und zaehlindex erhoehen
}
buffer[index] = 0; // wenn keine zeichen mehr vorhanden, dann puffer am letzten (schon erhoehten) index auf
client.stop();
}
Ich hoffe Ihr köönt mich verstehen, weiß nicht wie ich das genauer beschreiben soll... :blush: