// библиотека для работы с сервоприводами #include // библиотека для работы с дисплеем #include "QuadDisplay2.h" #include "TimeCheck.h" // буффер запроса char serialbuffer[100]; // создаём объект класса QuadDisplay и передаём номер пина CS QuadDisplay qd(9); // создаём объект для работы с сервоприводом Servo srv; TimeCheck butTime(500); TimeCheck timeOut(5000); TimeCheck autoRun(1000); int but = 2; int srvPin = 3; int ang0 = 110; int ang1 = 140; String wifi = "nameWiFi"; String passwordWifi = "passwordWiFi"; String host = "amperkalikes.000webhostapp.com"; String link = "getLikes.php"; String cmdWifi; String cmdHost; String cmdLink; int pIndex = -1; boolean autoRunOn = false; int fanReceived = -1; int fanMemory = -1; String makeWifi() { String toReturn = "AT+CWJAP=\""; toReturn += wifi; toReturn += "\",\""; toReturn += passwordWifi; toReturn += "\""; return toReturn; } String makeGet() { String toReturn = "GET /"; toReturn += link; toReturn += " HTTP/1.1\r\nHost:"; toReturn += host; toReturn += "\r\n\r\n\r\n"; return toReturn; } String makeHost() { String toReturn = "AT+CIPSTART=\"TCP\",\""; toReturn += host; toReturn += "\",80"; return toReturn; } void setup() { Serial1.begin(115200); Serial.begin(115200); qd.begin(); qd.displayInt(-42); pinMode(but, INPUT); srv.write(ang0); srv.attach(srvPin); srv.write(ang0); cmdWifi = makeWifi(); cmdHost = makeHost(); cmdLink = makeGet(); qd.displayInt(-3); Serial.print("cmdWifi = "); Serial.println(cmdWifi); Serial.print("cmdHost = "); Serial.println(cmdHost); Serial.print("cmdLink = "); Serial.println(cmdLink); } void loop() { if(timeOut.check() && pIndex != -1) { Serial.print("timeOut.check() : last pIndex = "); Serial.println(pIndex); pIndex = -1; } if(buttCheck()) { autoRunOn = !autoRunOn; } switch(pIndex) { case -1: if(autoRun.check() && autoRunOn) { Serial.println("autoRun ON +++++++++++++"); pIndex = 0; } break; case 0: checkStatConn(); pIndex++; timeOut.defer(); break; case 10: startTCP(); pIndex++; timeOut.defer(); break; case 20: requestLikes(); pIndex++; timeOut.defer(); break; case 30: qd.displayInt(fanReceived); fanCheck(); pIndex = -1; autoRun.defer(); break; } while(Serial1.available() > 0) { String tmp = Serial1.readStringUntil('\n'); if (true) { Serial.println(tmp); } int valueStat = getStatus(tmp); switch(valueStat) { //got IP, TCP connection next case 2: pIndex = 10; break; //TCP is good, getLikes next case 3: pIndex = 20; break; //got IP, TCP connection next case 4: pIndex = 10; break; //Problems with WiFi connection case 5: Serial.println("Check Wi-Fi settings"); Serial.print("Wifi settings now : "); Serial.println(cmdWifi); Serial1.println("AT+CWMODE=3"); delay(2000); Serial1.println(cmdWifi); pIndex = -1; break; } if (getConnect(tmp)) { pIndex = 20; } if(getFanCount(tmp) > 0) { pIndex = 30; } } } boolean buttCheck() { if(!digitalRead(but) && butTime.check()) { return true; } else { return false; } } void checkStatConn() { Serial1.println("AT+CIPSTATUS"); } void startTCP() { Serial.println("startTCP"); Serial1.println(cmdHost); } int getStatus(String input) { if (!input.startsWith("STATUS:")) return -1; input.replace("STATUS:",""); return input.toInt(); } boolean getConnect(String input) { if (!input.startsWith("CONNECT")) { return false; } return true; } void doRequest(String input) { Serial1.print("AT+CIPSEND="); Serial1.println(input.length()); if(Serial1.find(">")){ Serial.println(">"); } else { Serial1.println("AT+CIPCLOSE"); Serial.println("Connect timeout"); return; } Serial1.print(input); } void requestLikes() { doRequest(cmdLink); } int getFanCount(String input) { if (!input.startsWith("fan_count=")) { return -1; } input.replace("fan_count=",""); input.replace(",",""); fanReceived = input.toInt(); Serial.print("getFanCount() : fanReceived = "); Serial.println(fanReceived); return input.toInt(); } void giveCandy() { srv.write(ang1); delay(2000); srv.write(ang0); delay(2000); } void fanCheck() { if (fanReceived - fanMemory > 20 || fanReceived < fanMemory) { fanMemory = fanReceived; } else { while (fanMemory < fanReceived) { giveCandy(); ++fanMemory; } } }