Для моего проекта я пытаюсь измерить расстояние между моим датчиком и объектом, чтобы вызвать тревогу. Если сработала сигнализация, на мою учетную запись Telegram будет отправлено сообщение с библиотекой (UniversalTelegramBot). Для определения расстояния я использую петлю для расстояния между датчиком и объектом, но для проверки, получаю ли я какие-либо сообщения, мне также нужно использовать петлю. Я хочу сделать так, чтобы с комментарием "/ off" расстояние снова запутывалось, но когда вы набираете что-то еще, оно ждет, пока комментарий "/ off" снова не будет использован. Пока включен будильник и он проверяет сообщения, я хочу использовать «/ start» в качестве комментария, чтобы увидеть, какие другие комментарии использовать и как его использовать, не возвращаясь в цикл сообщений снова.
Мой главныйпроблема в том, что когда сработала сигнализация и я что-то набрал, неважно, что цикл снова начинает обмениваться сообщениями, но я хочу, чтобы он снова возвращался к обработке сообщений, когда я набираю "/ off" в телеграмме.
Мой код:
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
UniversalTelegramBot bot(TELEGRAM_BOT_TOKEN, client);
int delayBetweenChecks = 250;
unsigned long lastTimeChecked;
void handleNewMessages(int numNewMessages) {
for (int i = 0; i < numNewMessages; i++) {
String chat_id = String(bot.messages[i].chat_id);
String text = bot.messages[i].text;
String from_name = bot.messages[i].from_name;
if (from_name == "")
from_name = "Gast";
Serial.print("De volgende knop is ingedrukt: ");
Serial.println(text);
if (text == F("/off")) {
digitalWrite(LED_PIN, LOW);
alarmStatus = 0;
noTone(buzzer);
}
if (text == "/start") {
String welcome = "Welkom bij jouw alarmsysteem, " + from_name + ".\n";
welcome += "/off : om het alarm uit te zetten\n";
bot.sendMessage(chat_id, welcome, "Markdown");
}
}
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
// Convert the time into a distance
cm = (duration / 2) / 29.1; // Divide by 29.1 or multiply by 0.0343
inches = (duration / 2) / 74; // Divide by 74 or multiply by 0.0135
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
while (cm <= 9) {
Serial.println("ALARM!");
digitalWrite(LED_PIN, HIGH);
tone(buzzer, 250);
alarmStatus = 1;
if (alarmStatus = 1) {
if (millis() > lastTimeChecked + delayBetweenChecks) {
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
handleNewMess ages(numNewMessages);
if (numNewMessages) {
Serial.println("got response");
handleNewMessages(numNewMessages);
}
lastTimeChecked = millis();
}
}
break;
}
delay(250);
}