#define trigPin 5
#define echoPin 18
#define SOUND_SPEED 0.034
long duration;
float distanceCm;
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define SCREEN_ADDRESS 0x3C
#define LOGO_HEIGHT 16
#define LOGO_WIDTH 16
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
#define ledPin 2
bool ledState = LOW;
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
#define BOTtoken "7662177674:AAF-0aA7WerbVp7Fvb652CHe0Zbq08O2isc" // your Bot Token
#define CHAT_ID "5243833752" //ID
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
int botRequestDelay = 1000; // Checks for new messages every 1 s
unsigned long lastTimeBotRan;
//Inicializar
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT); //ultrasonidos
pinMode(echoPin, INPUT);
display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS); //pantalla OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
pinMode(ledPin, OUTPUT); //LED color
digitalWrite(ledPin, ledState);
WiFi.mode(WIFI_STA); //Telegram
WiFi.begin(ssid, password);
client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.println("Connecting to WiFi..");
}
Serial.println(WiFi.localIP());
display.display();
}
//codigo recibir y enviar mensajes
void handleNewMessages(int numNewMessages)
{ Serial.println("handleNewMessages");
Serial.println(String(numNewMessages));
for (int i=0; i<numNewMessages; i++) {
String chat_id = String(bot.messages[i].chat_id);
if (chat_id != CHAT_ID){
bot.sendMessage(chat_id, "Unauthorized user", "");
continue;
}
String text = bot.messages[i].text;
Serial.println(text);
String from_name = bot.messages[i].from_name;
if (text == "/start") {
String welcome = "Bienvenido " + from_name + ".\n";
welcome += "Abby detecta a cualquier persona a menos de 1,5 metros.\n\n";
welcome += "Si Abby detecta a alguien se encenderá el LED \n";
welcome += "/Distancia para saber la distancia a la que estas \n";
bot.sendMessage(chat_id, welcome, "");
}
if (distanceCm <= 150) {
bot.sendMessage(chat_id, "LED encendida. \n Abby detecta a alguien! \n", "");
ledState = HIGH;
digitalWrite(ledPin, ledState);
}
if (distanceCm > 150) {
bot.sendMessage(chat_id, "LED apagada", "");
ledState = LOW;
digitalWrite(ledPin, ledState);
}
if (text == "/Distancia")
{
bot.sendMessage(chat_id, "Te encuentras a "+ String(distanceCm)+ " cm");
}
}
}
void loop() {
digitalWrite(trigPin, LOW); //Ultrasonido
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distanceCm = duration * SOUND_SPEED/2;
Serial.println("Distancia " + String(distanceCm)+ " cm");
display.clearDisplay();
display.setCursor(10, 10);
display.print("Distancia " + String(distanceCm)+ " cm");
display.display();
if (millis() > lastTimeBotRan + botRequestDelay) {
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
while(numNewMessages) {
Serial.println("got response");
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
lastTimeBotRan = millis();
delay(1000);
};
}