Hallo zusammen,
ich habe ein Beispiel, wie ich Daten in eine Datenbank im Internet senden kann, an meine Bedürfnisse angepasst. Siehe hier:
// Demo using DHCP and DNS to perform a web client request.
// 2011-06-08 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php
#include <EtherCard.h>
// ethernet interface mac address, must be unique on the LAN
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x32 };
byte Ethernet::buffer[700];
static uint32_t timer;
char website[] PROGMEM = "www.meineDomain.de";
int sensorPin1 = A0; // select the input pin for the potentiometer
int sensorValue1 = 0; // variable to store the value coming from the sensor
int sensorPin2 = A1; // select the input pin for the potentiometer
int sensorValue2 = 0; // variable to store the value coming from the sensor
void setup () {
Serial.begin(57600);
Serial.println("\n[webClient]");
if (ether.begin(sizeof Ethernet::buffer, mymac,53) == 0)
Serial.println( "Failed to access Ethernet controller");
if (!ether.dhcpSetup())
Serial.println("DHCP failed");
ether.printIp("IP: ", ether.myip);
ether.printIp("GW: ", ether.gwip);
ether.printIp("DNS: ", ether.dnsip);
if (!ether.dnsLookup(website))
Serial.println("DNS failed");
ether.printIp("SRV: ", ether.hisip);
}
void loop () {
sensorValue1 = analogRead(sensorPin1);
sensorValue2 = analogRead(sensorPin2);
daten_an_web_senden(sensorValue1,sensorValue2,20000);
}
// called when the client request is complete
static void my_callback (byte status, word off, word len) {
Serial.println(">>>");
Ethernet::buffer[off+300] = 0;
Serial.print((const char*) Ethernet::buffer + off);
Serial.println("...");
}
void daten_an_web_senden (int T1, int T2, int Sek) {
ether.packetLoop(ether.packetReceive());
String web1 = "T1=";
String web2 = "&T2=";
String web3 = "&key=123";
String webg = "";
webg = web1 + T1 +web2 + T2 + web3;
char charBuf[100];
webg.toCharArray(charBuf, 100);
if (millis() > timer) {
timer = millis() + Sek;
Serial.println();
Serial.print("<<< REQ ");
ether.browseUrl(PSTR("/db/senden.php?"), charBuf, website, my_callback);
}
}
Funktioniert auch. Jetzt kommt das große ABER:
Die Funktion wird alle 20 Sek. aufgerufen, was ja auch richtig ist wegen:
daten_an_web_senden(sensorValue1,sensorValue2,20000);
Ich möchte aber, dass die Funktin daten_an_web_senden immer nur einmal aufrufen wird, wenn ein bestimmtes Ereignis eintritt, z. B. wenn ein Eingang auf high ist oder so.
Mir gelingt es nicht, die Funktion entsprechend umzuschreiben.
In der Anlage ist die Libary.
Brauche Eure Hilfe!!!!
ethercard_master.zip (81.8 KB)