Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Adafruit_Fingerprint.h>
- #include <WiFi.h>
- #include <WiFiClientSecure.h>
- #include <UniversalTelegramBot.h>
- #define mySerial Serial2
- #define RXD2 16
- #define TXD2 17
- #define btn 4
- #define redLED 2
- #define WIFI_SSID "network"
- #define WIFI_PASSWORD "123456789"
- // Telegram BOT Token (Get from Botfather)
- #define BOT_TOKEN "5781435319:AAGaO5tSUXT2BrNy-RoYMTPtWjQ7vXac-lw"
- // @Bus_project_bot
- const unsigned long BOT_MTBS = 1000; // mean time between scan messages
- WiFiClientSecure secured_client;
- UniversalTelegramBot bot(BOT_TOKEN, secured_client);
- unsigned long bot_lasttime; // last time messages' scan has been done
- bool Start = false;
- int totalCountCalculated = 0;
- const int numberOfStudents = 4;
- int totalCount = numberOfStudents;
- int StudentNumber[numberOfStudents] = {0}; // 1 2 3 4
- int ParentNumber[numberOfStudents] = {0}; // 1 2 3 4
- //**************************************************************
- String ParentTelegramID[numberOfStudents] = {"5461258962", "", "", ""}; //Must Set!!!!!!
- //**************************************************************
- String driver_chat_id = "473975732";
- bool parent_1_flag = 0;
- bool parent_2_flag = 0;
- bool parent_3_flag = 0;
- bool parent_4_flag = 0;
- Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
- void setup()
- {
- Serial.begin(9600);
- pinMode(btn, INPUT);
- //pinMode(redLED, OUTPUT);
- //digitalWrite(redLED, 0);
- initWiFi_and_Time_For_Telegram();
- initFingerPrint();
- resetData();
- bot.sendMessage(driver_chat_id, "Bus ONLINE");
- }
- void loop() {
- /////////////////////////////////////////////////////////////////
- //Handle Messages from Parents Telegram
- handel_Messages_Loop();
- //Parent of Child #1
- //ParentNumber[0]=1
- //totalCount = totalCount - ParentNumber[0]
- //Parent of Child #2
- //ParentNumber[1]=1
- //totalCount = totalCount - ParentNumber[1]
- //Parent of Child #3
- //ParentNumber[2]=1
- //totalCount = totalCount - ParentNumber[2]
- //Parent of Child #4
- //ParentNumber[3]=1
- //totalCount = totalCount - ParentNumber[3]
- /////////////////////////////////////////////////////////////////
- if (digitalRead(btn) == 1) {
- Serial.println("Button Pressed!!");
- flashLED(1);
- bot.sendMessage(driver_chat_id, "Bus MOVING -->");
- if (totalCountCalculated != totalCount) {
- flashLED(10);
- Serial.println("totalCountCalculated != totalCount");
- //Send Alert To Driver
- bot.sendMessage(driver_chat_id, "Alert Not all Students on Board !!!!");
- for (int i = 0; i < numberOfStudents; i++) {
- if (ParentNumber[i] == 0 && StudentNumber[i] == 0) {
- String message = "Child #" + String(i + 1) + " did not enter the bus Alert!! and Parents did not pick up" + "\n";
- bot.sendMessage(driver_chat_id, message);
- bot.sendMessage(ParentTelegramID[(i)], "Your Child did not enter the bus Alert!!! [ Problem ]");
- //Send Message to Parent of Child #(i+1) Child did not enter the bus Alert!!
- //Send Message to Driver Child #(i+1) did not enter the bus Alert!! and Parents did not pick up
- }
- }
- }
- else {
- for (int i = 0; i < numberOfStudents; i++) {
- if (ParentNumber[i] == 0 && StudentNumber[i] == 1) {
- bot.sendMessage(ParentTelegramID[(i)], "Your Child is IN the Bus! [ Moving--> ]");
- //flashLED(1);
- }
- }
- }
- }
- getFingerprintID();
- /*
- if (getFingerprintIDez() != -1) {
- /////////////////////////////////////////////////
- if (StudentNumber[getFingerprintIDez() - 1] == 1) {
- StudentNumber[getFingerprintIDez() - 1] = 0;
- totalCountCalculated = totalCountCalculated - 1;
- printStatus();
- //Send Message to Parent Child is OUT of the Bus
- //Send Message to Driver totalCountCalculated/TotalCount
- }
- else {
- StudentNumber[getFingerprintIDez() - 1] = 1;
- totalCountCalculated = totalCountCalculated + 1;
- printStatus();
- //Send Message to Parent Child is IN the Bus
- //Send Message to Driver Child is IN the Bus
- //Send Message to Driver totalCountCalculated/TotalCount
- }
- /////////////////////////////////////////////////
- }
- */
- delay(100);
- }
- uint8_t getFingerprintID() {
- uint8_t p = finger.getImage();
- switch (p) {
- case FINGERPRINT_OK:
- Serial.println("Image taken");
- break;
- case FINGERPRINT_NOFINGER:
- Serial.println("No finger detected");
- return p;
- case FINGERPRINT_PACKETRECIEVEERR:
- Serial.println("Communication error");
- return p;
- case FINGERPRINT_IMAGEFAIL:
- Serial.println("Imaging error");
- return p;
- default:
- Serial.println("Unknown error");
- return p;
- }
- // OK success!
- p = finger.image2Tz();
- switch (p) {
- case FINGERPRINT_OK:
- Serial.println("Image converted");
- break;
- case FINGERPRINT_IMAGEMESS:
- Serial.println("Image too messy");
- return p;
- case FINGERPRINT_PACKETRECIEVEERR:
- Serial.println("Communication error");
- return p;
- case FINGERPRINT_FEATUREFAIL:
- Serial.println("Could not find fingerprint features");
- return p;
- case FINGERPRINT_INVALIDIMAGE:
- Serial.println("Could not find fingerprint features");
- return p;
- default:
- Serial.println("Unknown error");
- return p;
- }
- // OK converted!
- p = finger.fingerSearch();
- if (p == FINGERPRINT_OK) {
- Serial.println("Found a print match!");
- } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
- Serial.println("Communication error");
- return p;
- } else if (p == FINGERPRINT_NOTFOUND) {
- Serial.println("Did not find a match");
- return p;
- } else {
- Serial.println("Unknown error");
- return p;
- }
- /////////////////////////////////////////////////
- if (StudentNumber[(finger.fingerID - 1)] == 1) {
- StudentNumber[(finger.fingerID - 1)] = 0;
- totalCountCalculated = totalCountCalculated - 1;
- printStatus();
- String message = "Total: " + String(totalCountCalculated) + "/" + String(totalCount) + "\n";
- delay(500);
- bot.sendMessage(driver_chat_id, message);
- delay(500);
- bot.sendMessage(ParentTelegramID[(finger.fingerID - 1)], "Your Child is OUT of the Bus! [ Delivered ]");
- // flashLED(1);
- //Send Message to Parent Child is OUT of the Bus
- //Send Message to Driver totalCountCalculated/totalCount
- }
- else {
- StudentNumber[(finger.fingerID - 1)] = 1;
- totalCountCalculated = totalCountCalculated + 1;
- printStatus();
- String message = "Child #" + String(finger.fingerID) + " is IN the Bus \n" + "Total: " + String(totalCountCalculated) + "/" + String(totalCount) + "\n";
- delay(500);
- bot.sendMessage(driver_chat_id, message);
- delay(500);
- bot.sendMessage(ParentTelegramID[(finger.fingerID - 1)], "Your Child is IN the Bus! [ On the Bus ]");
- //flashLED(1);
- //Send Message to Parent Child is IN the Bus
- //Send Message to Driver Child is IN the Bus
- //Send Message to Driver totalCountCalculated/totalCount
- }
- /////////////////////////////////////////////////
- // found a match!
- Serial.print("Found ID #"); Serial.print(finger.fingerID);
- Serial.print(" with confidence of "); Serial.println(finger.confidence);
- //flashLED(1);
- return finger.fingerID;
- }
- // returns -1 if failed, otherwise returns ID #
- int getFingerprintIDez() {
- uint8_t p = finger.getImage();
- if (p != FINGERPRINT_OK) return -1;
- p = finger.image2Tz();
- if (p != FINGERPRINT_OK) return -1;
- p = finger.fingerFastSearch();
- if (p != FINGERPRINT_OK) return -1;
- // found a match!
- Serial.print("Found ID #"); Serial.print(finger.fingerID);
- Serial.print(" with confidence of "); Serial.println(finger.confidence);
- return finger.fingerID;
- }
- void initFingerPrint() {
- Serial2.begin(57600, SERIAL_8N1, RXD2, TXD2);
- while (!Serial);
- delay(100);
- Serial.println("\n\nAdafruit finger detect test");
- delay(5);
- if (finger.verifyPassword()) {
- Serial.println("Found fingerprint sensor!");
- } else {
- Serial.println("Did not find fingerprint sensor :(");
- while (1) {
- delay(1);
- }
- }
- Serial.println(F("Reading sensor parameters"));
- finger.getParameters();
- Serial.print(F("Status: 0x")); Serial.println(finger.status_reg, HEX);
- Serial.print(F("Sys ID: 0x")); Serial.println(finger.system_id, HEX);
- Serial.print(F("Capacity: ")); Serial.println(finger.capacity);
- Serial.print(F("Security level: ")); Serial.println(finger.security_level);
- Serial.print(F("Device address: ")); Serial.println(finger.device_addr, HEX);
- Serial.print(F("Packet len: ")); Serial.println(finger.packet_len);
- Serial.print(F("Baud rate: ")); Serial.println(finger.baud_rate);
- finger.getTemplateCount();
- if (finger.templateCount == 0) {
- Serial.print("Sensor doesn't contain any fingerprint data. Please run the 'enroll' example.");
- }
- else {
- Serial.println("Waiting for valid finger...");
- Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
- }
- }
- void resetData() {
- StudentNumber[numberOfStudents] = 0;
- ParentNumber[numberOfStudents] = 0;
- totalCount = numberOfStudents;
- totalCountCalculated = 0;
- parent_1_flag = 0;
- parent_2_flag = 0;
- parent_3_flag = 0;
- parent_4_flag = 0;
- }
- void handel_Messages_Loop() {
- if (millis() - bot_lasttime > BOT_MTBS)
- {
- 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);
- }
- bot_lasttime = millis();
- }
- }
- void initWiFi_and_Time_For_Telegram() {
- Serial.println();
- // attempt to connect to Wifi network:
- Serial.print("Connecting to Wifi SSID ");
- Serial.print(WIFI_SSID);
- WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
- secured_client.setCACert(TELEGRAM_CERTIFICATE_ROOT); // Add root certificate for api.telegram.org
- while (WiFi.status() != WL_CONNECTED)
- {
- Serial.print(".");
- delay(500);
- }
- Serial.print("\nWiFi connected. IP address: ");
- Serial.println(WiFi.localIP());
- Serial.print("Retrieving time: ");
- configTime(0, 0, "pool.ntp.org"); // get UTC time via NTP
- time_t now = time(nullptr);
- while (now < 24 * 3600)
- {
- Serial.print(".");
- delay(100);
- now = time(nullptr);
- }
- Serial.println(now);
- }
- void handleNewMessages(int numNewMessages)
- {
- Serial.println("handleNewMessages");
- Serial.println(String(numNewMessages));
- for (int i = 0; i < numNewMessages; i++)
- {
- String chat_id = bot.messages[i].chat_id;
- String text = bot.messages[i].text;
- String from_name = bot.messages[i].from_name;
- if (from_name == "")
- from_name = "Guest";
- if (text == "/send_test_action")
- {
- bot.sendChatAction(chat_id, "typing");
- delay(4000);
- bot.sendMessage(chat_id, "Did you see the action message?");
- // You can't use own message, just choose from one of bellow
- //typing for text messages
- //upload_photo for photos
- //record_video or upload_video for videos
- //record_audio or upload_audio for audio files
- //upload_document for general files
- //find_location for location data
- //more info here - https://core.telegram.org/bots/api#sendchataction
- }
- /////////////////////////////////////
- if (text == "/child1pickedup63518926")
- {
- if (parent_1_flag == 0) {
- parent_1_flag = 1;
- delay(500);
- bot.sendMessage(chat_id, "Child (1) picked up by Parent. Driver will be notified");
- delay(500);
- bot.sendMessage(driver_chat_id, "Child (1) picked up by Parent.");
- ParentNumber[0] = 1;
- totalCount = totalCount - ParentNumber[0];
- printStatus();
- String message = "Total: " + String(totalCountCalculated) + "/" + String(totalCount) + "\n";
- delay(500);
- bot.sendMessage(driver_chat_id, message);
- //flashLED(1);
- }
- else {
- delay(500);
- bot.sendMessage(chat_id, "Driver notified already, Thank you.");
- delay(500);
- bot.sendMessage(driver_chat_id, "Child (1) Parent sent message again");
- printStatus();
- //flashLED(1);
- }
- }
- /////////////////////////////////////
- if (text == "/start")
- {
- String welcome = "Welcome to Universal Arduino Telegram Bot library, " + from_name + ".\n";
- welcome += "This is Chat Action Bot example.\n\n";
- welcome += "/send_test_action : to send test chat action message\n";
- bot.sendMessage(chat_id, welcome);
- }
- }
- }
- void printStatus() {
- Serial.print("Student Array: \t\t");
- Serial.print(StudentNumber[0]); Serial.print(" , ");
- Serial.print(StudentNumber[1]); Serial.print(" , ");
- Serial.print(StudentNumber[2]); Serial.print(" , ");
- Serial.println(StudentNumber[3]);
- Serial.print("Parent Array: \t\t");
- Serial.print(ParentNumber[0]); Serial.print(" , ");
- Serial.print(ParentNumber[1]); Serial.print(" , ");
- Serial.print(ParentNumber[2]); Serial.print(" , ");
- Serial.println(ParentNumber[3]);
- Serial.print("Total Calculated Count:"); Serial.println(totalCountCalculated);
- Serial.print("Total Count:"); Serial.println(totalCount);
- }
- void flashLED(int n) {
- for (int i = 0; i < n; i++) {
- //digitalWrite(redLED, 1);
- //(100);
- //digitalWrite(redLED, 0);
- //delay(100);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment