私は、GPIO13(およびグランド)に接続されたマイクロスイッチを備えたESP8266 ESP-12Eを持っています。シンプルなプログラム:押したボタンの長さと時間を送る方法は?
ESP8266からボタンを押したまま時間を計っている間、ボタンを押してから時間をカウントしています。ここで
は、私がこれまでにコード化されたものです:私はもう一度ボタンを押下する前に完了することが要求を待つ必要があるため
#include <ESP8266WiFi.h>
long duration = 0;
long startTime = 0;
const char* ssid = "SSID";
const char* password = "password";
void sendClick(int startTime, int duration) {
char* server = "192.168.0.15";
Serial.println(server);
WiFiClient client;
if (client.connect(server,80)) {
String postStr = "id=1&time=";
postStr += String(startTime);
postStr +="&duration=";
postStr += String(duration);
postStr += "\n";
client.print("POST /click HTTP/1.1\n");
client.print("Host: ");
client.print(server);
client.print("\n");
client.print("Connection: close\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
client.stop();
}
}
void setup() {
Serial.begin(115200);
pinMode(13, INPUT_PULLUP);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {
if (digitalRead(13) == LOW) {
delay(25); //for eliminating microswitch's bounce
if (digitalRead(13) == LOW) {
duration = 25;
startTime = millis();
while (digitalRead(13) == LOW) {}
duration += millis()-startTime;
Serial.print("Duration: ");
Serial.print(duration);
Serial.print(" startTime: ");
Serial.print(startTime);
Serial.print("\r\n");
sendClick(startTime, duration);
}
}
}
はしかし、私のコードが間違っています。
私は割り込みを使用して、いくつかの配列にduration
とstartTime
を置くことを考えている、例えば:
attachInterrupt(13, buttonClick, CHANGE);
、その後、私は継続的配列は、新たなクリックが含まれているかどうかを確認し、サーバーに送信することができます。
しかし、それがうまくいくかどうか分かりませんし、一般的にはArduino/Cの経験があまりありません。どんな助けもありがとう。