Дорогие друзья, поздравляем вас с выполнением лабораторных работ! Вам предстоит решить очень интересную задачу, а именно, вам нужно будет построить два светофора, первый для большого перекрестка и второй - специальный для плохо видящих людей.
Не будем больше ждать, поехали!
Светофор для большого перекрестка - это светофор который постоянно работает. Он состоит из двух светофоров для встречных направлений. Сначала нам нужно будет собрать схему подключения всех элементов светофора, а затем написать программу, которая будет включать и выключать светофоры в определённое время. В этом документе находятся две программы: одна, с помощью которой можно управлять светофорами из приложения Alterozoom, и вторая, которая просто задаёт последовательность работы светофоров.
В основе этого проекта находится схема подключения диода.
Вам нужно подключить ещё жёлтый и зелёный диоды и схема первого светофора готова!
Второй светофор подключается аналогичным образом.
Если мы посмотрим на перекресток повнимательней, то мы заметим, что нам нужно два светофора для одного направления и два светофора для другого направления.
Из-за нехватки контактов на платформе NodeMCU мы просто будем дублировать количество диодов на одном контакте, т.е. рядом с уже подключенными диодами мы будем подключать дополнительные диоды.
На картинке показано как это можно сделать.
Плата NodeMCU подключается к 5В следующим образом: на контакт 3В нужно подключить напряжение, а на контакт G подключить землю.
Прежде чем начать работать с платой NodeMCU почитайте материалы в окне снизу.
Скетч:
Описание команд:
Команда | Описание |
void setup() {} |
Функция которая быполняется только один раз, преднозначена для обявления пинов |
pinMode(пин,режим); |
Обявление пина |
void loop() {} |
Функция которая выполняется много раз, цикл |
digitalWrite(пин,HIGH или LOW); |
Команда с помощью которой включаем светодиод (если HIGH) или выключаем (если LOW) |
delay(время в милисекундах); |
Задержка |
Перед началом работы рекомендуем прочитать материалы, расположенные в ifraim-ах ниже.
Также вам нужно скачать приложение Alterozoom, его вы можете скачать с официального сайта, потом вам нужно установить лицензию.
Для получения лицензии свяжитесь с нами по почте: branislava.jankovic.1998@ gmail.com
Скетч:
#include <ARpcArduStrHlp.h>
#include <ARpcDevice.h>
#include <ARpcDeviceState.h>
#include <ARpcIDevEventsCallback.h>
#include <ARpcIMessageCallback.h>
#include <ARpcIWriteCallback.h>
#include <ARpcRealDeviceMessageDispatch.h>
#include <ARpcSrvReady.h>
#include <ARpcStarNetDevice.h>
#include <ARpcStarNetEndPoint.h>
#include <ARpcStarNetEndPointDevice.h>
#include <ARpcStarNetStreamWriter.h>
#include <ARpcStreamParser.h>
#include <ARpcStreamWriter.h>
#include <ARpcUuid.h>
#include <BearSSLHelpers.h>
#include <CertStoreBearSSL.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiAP.h>
#include <ESP8266WiFiGeneric.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266WiFiScan.h>
#include <ESP8266WiFiSTA.h>
#include <ESP8266WiFiType.h>
#include <WiFiClient.h>
#include <WiFiClientSecure.h>
#include <WiFiClientSecureAxTLS.h>
#include <WiFiClientSecureBearSSL.h>
#include <WiFiServer.h>
#include <WiFiServerSecure.h>
#include <WiFiServerSecureAxTLS.h>
#include <WiFiServerSecureBearSSL.h>
#include <WiFiUdp.h>
#include <ESP8266HTTPClient.h>
uint16_t port=4081;
WiFiServer server(port);
WiFiClient client;
IPAddress bCastSenderIp;
WiFiUDP bCastCli;
bool connecting=false;
const char* ssid="WL3";
const char* password="11111111";
unsigned long lastSyncMillis=0;
const char *deviceName="bigtrafficklight"; // naziv uredjaja
const ARpcUuid deviceId("{61897b19-6fb3-4d7a-b5e1-5ecfa9091eca}");
const char *interfaceStr="<controls>"
"<group title=\"BIG_TRAFFIC_LIGHT_SETTINGS\">"
"<control title=\"BIG TRAFFIC LIGHT ON\" command=\"btlon\"/>"
"<control title=\"BIG TRAFFIC LIGHT Off\" command=\"btloff\"/>"
"</group>"
"</controls>";
class NetWriteCb
:public ARpcIWriteCallback
{
public:
void writeData(const char *d,unsigned long sz)override
{
client.write(d,sz);
}
void writeStr(const char *str)override
{
client.print(str);
}
void writeStr(const __FlashStringHelper *str)override
{
client.print(str);
}
}netCb;
class SerialWriteCb
:public ARpcIWriteCallback
{
public:
void writeData(const char *d,unsigned long sz)override
{
Serial.write(d,sz);
}
void writeStr(const char *str)override
{
Serial.print(str);
}
void writeStr(const __FlashStringHelper *str)override
{
Serial.print(str);
}
}serialCb;
ARpcDevice wifiDev(300,&netCb,&deviceId,deviceName);
ARpcDevice serialDev(300,&serialCb,&deviceId,deviceName);
//callback-класс для обработки команд, вызывается библиотекой ARpc
class EventsCb
:public ARpcIDevEventsCallback
{
public:
explicit EventsCb(ARpcDevice *d)
{
dev=d;
}
virtual void processCommand(const char *cmd,const char *args[],unsigned char argsCount)
{
byte cmdOK = 1;
if (strcmp(cmd,"btlon") ==0) {
digitalWrite(D1,LOW);
digitalWrite(D3,LOW);
digitalWrite(D4,LOW);
digitalWrite(D2,HIGH);
digitalWrite(D5,HIGH);
delay(5000);
digitalWrite(D5,LOW);
delay(500);
digitalWrite(D5,HIGH);
delay(500);
digitalWrite(D5,LOW);
delay(500);
digitalWrite(D5,HIGH);
delay(500);
digitalWrite(D5,LOW);
delay(500);
digitalWrite(D5,HIGH);
delay(500);
digitalWrite(D5,LOW);
delay(500);
digitalWrite(D1,HIGH);
digitalWrite(D4,HIGH);
delay(3000);
digitalWrite(D1,LOW);
digitalWrite(D2,LOW);
digitalWrite(D0,HIGH);
digitalWrite(D4,LOW);
digitalWrite(D3,HIGH);
delay(5000);
digitalWrite(D0,LOW);
delay(500);
digitalWrite(D0,HIGH);
delay(500);
digitalWrite(D0,LOW);
delay(500);
digitalWrite(D0,HIGH);
delay(500);
digitalWrite(D0,LOW);
delay(500);
digitalWrite(D0,HIGH);
delay(500);
digitalWrite(D0,LOW);
delay(500);
digitalWrite(D1,HIGH);
digitalWrite(D4,HIGH);
delay(3000);
wifiDev.disp().writeOk();
}
else if(strcmp(cmd,"btloff") ==0) {
digitalWrite(D1,LOW);
digitalWrite(D2,LOW);
digitalWrite(D3,LOW);
digitalWrite(D4,LOW);
digitalWrite(D5,LOW);
digitalWrite(D0,LOW);
wifiDev.disp().writeOk();
}
else {
wifiDev.disp().writeErr("Unknown cmd");
cmdOK = 0;
}
}
virtual void onSyncMsg()
{
lastSyncMillis=millis();
}
private:
ARpcDevice *dev;
}serialEcb(&serialDev),wifiEcb(&wifiDev);
class SrcReadyCb
:public ARpcISrvReadyCallback
{
public:
void processSrvReadyMsg(const ARpcUuid &srvId,const char *srvName)
{
serialDev.disp().writeInfo("Server detected: ",bCastSenderIp.toString().c_str(),srvName);
if(client.connected()||connecting)return;
serialDev.disp().writeInfo("Connecting to server...");
connecting=true;
client.connect(bCastSenderIp,port);
for(int i=0;i<20;++i)
{
if(client.connected())
break;
delay(100);
}
serialDev.disp().writeInfo("Connected to server");
connecting=false;
wifiDev.resetParser();
lastSyncMillis=millis();
}
}srvReadyCb;
ARpcSrvReady srvReadyParser(200,&srvReadyCb);
void connectWifi()
{
WiFi.begin(ssid,password);
while(WiFi.status()!=WL_CONNECTED)
{
delay(500);
serialDev.disp().writeInfo("Wifi connecting");
}
serialDev.disp().writeInfo("WiFi connected");
}
void setup() {
// pin definition
pinMode(D0,OUTPUT);//GREEN
pinMode(D1,OUTPUT);//YELLOW
pinMode(D2,OUTPUT);//RED
pinMode(D5,OUTPUT);//GREEN D5
pinMode(D4,OUTPUT);//YELLOW
pinMode(D3,OUTPUT);//RED D3
// other stuff
delay(2000);
Serial.begin(9600);
wifiDev.disp().installDevEventsHandler(&wifiEcb);
wifiDev.disp().setControls(interfaceStr);
serialDev.disp().installDevEventsHandler(&serialEcb);
serialDev.disp().setControls(interfaceStr);
connectWifi();
bCastCli.begin(port);
// Start the server
server.begin();
serialDev.disp().writeInfo("Server started");
// Print the IP address
serialDev.disp().writeInfo(WiFi.localIP().toString().c_str());
serialDev.resetStream();
}
void checkBCastCli()
{
static int sz=0;
sz=bCastCli.parsePacket();
if(sz>0)
{
bCastSenderIp=bCastCli.remoteIP();
for(int i=0;i<sz;++i)
srvReadyParser.putByte(bCastCli.read());
}
}
void checkWifiClient()
{
if(client)
{
if(!client.connected())
{
serialDev.disp().writeInfo("Client connection lost");
client=server.available();
if(client)
{
serialDev.disp().writeInfo("Take next pending incoming connection");
lastSyncMillis=millis();
wifiDev.resetStream();
wifiDev.resetParser();
}
delay(100);
}
else
{
while(client.available())
wifiDev.putByte(client.read());
}
}
else
{
client=server.available();
if(client)
{
serialDev.disp().writeInfo("Take next pending incoming connection");
lastSyncMillis=millis();
wifiDev.resetStream();
wifiDev.resetParser();
}
delay(100);
}
}
void loop() {
// while(Serial.available())
// dev.putByte(Serial.read());
while(Serial.available())
serialDev.putByte(Serial.read());
if(WiFi.status()!=WL_CONNECTED)
connectWifi();
checkBCastCli();
checkWifiClient();
if(((millis()-lastSyncMillis)>12000)&&client.connected())
{
client.stop();
checkWifiClient();
}
delay(50);
}
Команда | Описание |
#include <название библиотекы> |
Команда с помощью которой подключаем библотеку |
const char* ssid="название сети к которой подключен локальный сервер"; | Определяем сеть к которой будет подключатся ваше IoT устройство |
const char* password="пароль сети"; | Указиваем пароль сети |
const char *deviceName="название IoT устройства"; | Указиваем название вашего устройства |
const ARpcUuid deviceId("{Id вашего устройства}"); | УказиваемID вашего устройства |
const char *interfaceStr="<controls>" "<group title=\"название настроек\">" "<control title=\"название команды которое будет выдно из проложения Alteroyzoom после нажатия на кнопку Controle device \" command=\"команда\"/>" "</group>" "</controls>"; |
Определение названия команд |
if(strcmp(cmd,"команда") ==0) { чась программы которая выполняется после нажатия кнопки с названием вашей команды из приложения wifiDev.disp().writeOk(); } |
Определяем что должно случится после нажатия вашей команды, если команда существует и она перечислена в разделе controls вы получаете сообщение от парсера что всё хорошо и что он команду узнал. |
wifiDev.disp().writeErr("Unknown cmd"); |
Сообщение которое получаете когда вы указали команду которая не указана в разделе controls |
Данный светофор мало чем отличается от предыдущего. Единственое отличе в том, что теперь нам нужны два светофора для машин, два для людей и кроме того нам нужны две кнопки и "пищалка".
Схема подключения принципиально не отличаетя, она базируется на подключении диода и кнопки. Контакты, к которыми должны подключатся диоды и остальние элементы, можете посмотреть внутры скетча.
Плата NodeMCU питается темже самым способом. На контакт 3В подключаем 5В внешнего источника, а контакт G потключаем к земле.
const int buttonPin = D4; // the number of the pushbutton pin
const int GreenPin = D5; // the number of the LED pin
const int RedPin = D6;
const int S_greenpin = D3;
const int S_yellowpin = D2;
const int S_redpin = D1;
const int soundPin = D0;
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
void setup() {
// initialize the LED pin as an output:
pinMode(GreenPin, OUTPUT);
pinMode(RedPin, OUTPUT);
pinMode(S_greenpin, OUTPUT);
pinMode(S_yellowpin, OUTPUT);
pinMode(S_redpin, OUTPUT);
pinMode(buttonPin, INPUT);
pinMode(soundPin,OUTPUT);
}
void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
if (buttonState == HIGH) {
digitalWrite(S_greenpin,LOW);
delay(500);
digitalWrite(S_greenpin,HIGH);
delay(500);
digitalWrite(S_greenpin,LOW);
delay(500);
digitalWrite(S_greenpin,HIGH);
delay(500);
digitalWrite(S_greenpin,LOW);
delay(500);
digitalWrite(S_greenpin,HIGH);
delay(500);
digitalWrite(S_greenpin,LOW);
digitalWrite(S_yellowpin,HIGH);
delay(2000);
digitalWrite(S_yellowpin,LOW);
digitalWrite(S_redpin,HIGH);
delay(2000);
digitalWrite(GreenPin,HIGH);
digitalWrite(RedPin,LOW);
digitalWrite(soundPin,HIGH);
delay(3500);
digitalWrite(soundPin,LOW);
digitalWrite(GreenPin,LOW);
delay(500);
digitalWrite(soundPin,HIGH);
digitalWrite(GreenPin,HIGH);
delay(500);
digitalWrite(soundPin,LOW);
digitalWrite(GreenPin,LOW);
delay(500);
digitalWrite(soundPin,HIGH);
digitalWrite(GreenPin,HIGH);
delay(500);
digitalWrite(soundPin,LOW);
digitalWrite(GreenPin,LOW);
delay(500);
digitalWrite(soundPin,HIGH);
digitalWrite(GreenPin,HIGH);
delay(500);
digitalWrite(soundPin,LOW);
digitalWrite(GreenPin,LOW);
delay(500);
digitalWrite(soundPin,HIGH);
digitalWrite(GreenPin,HIGH);
delay(500);
digitalWrite(soundPin,LOW);
digitalWrite(GreenPin,LOW);
delay(500);
digitalWrite(soundPin,HIGH);
digitalWrite(GreenPin,HIGH);
delay(500);
digitalWrite(soundPin,LOW);
digitalWrite(GreenPin,LOW);
digitalWrite(RedPin,HIGH);
delay(3000);
digitalWrite(S_yellowpin,HIGH);
delay(1500);
digitalWrite(S_redpin,LOW);
digitalWrite(S_yellowpin,LOW);
} else {
// turn LED off:
digitalWrite(S_greenpin,HIGH);
digitalWrite(RedPin,HIGH);
}
}
В табличке перечислим команды с которыми раньше не сталкивались.
Команда | Описание |
buttonState = digitalRead(buttonPin); |
Переменая ButtonState получает значение в зависимости нажали ли вы кнопку или нет |
if (buttonState == HIGH) { |
Указиваем что должно случится если кнопка нажата. |
#include <ARpcArduStrHlp.h>
#include <ARpcDevice.h>
#include <ARpcDeviceState.h>
#include <ARpcIDevEventsCallback.h>
#include <ARpcIMessageCallback.h>
#include <ARpcIWriteCallback.h>
#include <ARpcRealDeviceMessageDispatch.h>
#include <ARpcSrvReady.h>
#include <ARpcStarNetDevice.h>
#include <ARpcStarNetEndPoint.h>
#include <ARpcStarNetEndPointDevice.h>
#include <ARpcStarNetStreamWriter.h>
#include <ARpcStreamParser.h>
#include <ARpcStreamWriter.h>
#include <ARpcUuid.h>
#include <BearSSLHelpers.h>
#include <CertStoreBearSSL.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiAP.h>
#include <ESP8266WiFiGeneric.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266WiFiScan.h>
#include <ESP8266WiFiSTA.h>
#include <ESP8266WiFiType.h>
#include <WiFiClient.h>
#include <WiFiClientSecure.h>
#include <WiFiClientSecureAxTLS.h>
#include <WiFiClientSecureBearSSL.h>
#include <WiFiServer.h>
#include <WiFiServerSecure.h>
#include <WiFiServerSecureAxTLS.h>
#include <WiFiServerSecureBearSSL.h>
#include <WiFiUdp.h>
#include <ESP8266HTTPClient.h>
uint16_t port=4081;
WiFiServer server(port);
WiFiClient client;
IPAddress bCastSenderIp;
WiFiUDP bCastCli;
bool connecting=false;
const char* ssid="WL3";
const char* password="11111111";
unsigned long lastSyncMillis=0;
const char *deviceName="littletrafficklight"; // naziv uredjaja
const ARpcUuid deviceId("{1c7af6ee-abcb-4e64-8796-d0160d1d0df7}");
const char *interfaceStr="<controls>"
"<group title=\"NODEMCU1_SETTINGS\">"
"<control title=\"LITTLE TRAFFIC LIGHT ON\" command=\"ltlon\"/>"
"<control title=\"LITTLE TRAFFIC LIGHT Off\" command=\"ltloff\"/>"
"</group>"
"</controls>";
const int buttonPin = D4; // the number of the pushbutton pin
const int GreenPin = D5; // the number of the LED pin
const int RedPin = D6;
const int S_greenpin = D3;
const int S_yellowpin = D2;
const int S_redpin = D1;
const int soundPin = D0;
// opšte
int buttonState = 0;
////////////////////////////////////////////////////////////////////////////////////////
class NetWriteCb
:public ARpcIWriteCallback
{
public:
void writeData(const char *d,unsigned long sz)override
{
client.write(d,sz);
}
void writeStr(const char *str)override
{
client.print(str);
}
void writeStr(const __FlashStringHelper *str)override
{
client.print(str);
}
}netCb;
class SerialWriteCb
:public ARpcIWriteCallback
{
public:
void writeData(const char *d,unsigned long sz)override
{
Serial.write(d,sz);
}
void writeStr(const char *str)override
{
Serial.print(str);
}
void writeStr(const __FlashStringHelper *str)override
{
Serial.print(str);
}
}serialCb;
ARpcDevice wifiDev(300,&netCb,&deviceId,deviceName);
ARpcDevice serialDev(300,&serialCb,&deviceId,deviceName);
//callback-класс для обработки команд, вызывается библиотекой ARpc
class EventsCb
:public ARpcIDevEventsCallback
{
public:
explicit EventsCb(ARpcDevice *d)
{
dev=d;
}
virtual void processCommand(const char *cmd,const char *args[],unsigned char argsCount)
{
byte cmdOK = 1;
if (strcmp(cmd,"ltlon") ==0) {
digitalWrite(S_greenpin,LOW);
delay(500);
digitalWrite(S_greenpin,HIGH);
delay(500);
digitalWrite(S_greenpin,LOW);
delay(500);
digitalWrite(S_greenpin,HIGH);
delay(500);
digitalWrite(S_greenpin,LOW);
delay(500);
digitalWrite(S_greenpin,HIGH);
delay(500);
digitalWrite(S_greenpin,LOW);
digitalWrite(S_yellowpin,HIGH);
delay(2000);
digitalWrite(S_yellowpin,LOW);
digitalWrite(S_redpin,HIGH);
delay(2000);
digitalWrite(GreenPin,HIGH);
digitalWrite(RedPin,LOW);
digitalWrite(soundPin,HIGH);
delay(3500);
digitalWrite(soundPin,LOW);
digitalWrite(GreenPin,LOW);
delay(500);
digitalWrite(soundPin,HIGH);
digitalWrite(GreenPin,HIGH);
delay(500);
digitalWrite(soundPin,LOW);
digitalWrite(GreenPin,LOW);
delay(500);
digitalWrite(soundPin,HIGH);
digitalWrite(GreenPin,HIGH);
delay(500);
digitalWrite(soundPin,LOW);
digitalWrite(GreenPin,LOW);
delay(500);
digitalWrite(soundPin,HIGH);
digitalWrite(GreenPin,HIGH);
delay(500);
digitalWrite(soundPin,LOW);
digitalWrite(GreenPin,LOW);
delay(500);
digitalWrite(soundPin,HIGH);
digitalWrite(GreenPin,HIGH);
delay(500);
digitalWrite(soundPin,LOW);
digitalWrite(GreenPin,LOW);
delay(500);
digitalWrite(soundPin,HIGH);
digitalWrite(GreenPin,HIGH);
delay(500);
digitalWrite(soundPin,LOW);
digitalWrite(GreenPin,LOW);
digitalWrite(RedPin,HIGH);
delay(3000);
digitalWrite(S_yellowpin,HIGH);
delay(1500);
digitalWrite(S_redpin,LOW);
digitalWrite(S_yellowpin,LOW);
wifiDev.disp().writeOk();
}
else if(strcmp(cmd,"ltloff") ==0) {
digitalWrite(S_greenpin,HIGH);
digitalWrite(RedPin,HIGH);
wifiDev.disp().writeOk();
}
else {
wifiDev.disp().writeErr("Unknown cmd");
cmdOK = 0;
}
}
virtual void onSyncMsg()
{
lastSyncMillis=millis();
}
private:
ARpcDevice *dev;
}serialEcb(&serialDev),wifiEcb(&wifiDev);
class SrcReadyCb
:public ARpcISrvReadyCallback
{
public:
void processSrvReadyMsg(const ARpcUuid &srvId,const char *srvName)
{
serialDev.disp().writeInfo("Server detected: ",bCastSenderIp.toString().c_str(),srvName);
if(client.connected()||connecting)return;
serialDev.disp().writeInfo("Connecting to server...");
connecting=true;
client.connect(bCastSenderIp,port);
for(int i=0;i<20;++i)
{
if(client.connected())
break;
delay(100);
}
serialDev.disp().writeInfo("Connected to server");
connecting=false;
wifiDev.resetParser();
lastSyncMillis=millis();
}
}srvReadyCb;
ARpcSrvReady srvReadyParser(200,&srvReadyCb);
void connectWifi()
{
WiFi.begin(ssid,password);
while(WiFi.status()!=WL_CONNECTED)
{
delay(500);
serialDev.disp().writeInfo("Wifi connecting");
}
serialDev.disp().writeInfo("WiFi connected");
}
void setup() {
// pin definition
pinMode(GreenPin, OUTPUT);
pinMode(RedPin, OUTPUT);
pinMode(S_greenpin, OUTPUT);
pinMode(S_yellowpin, OUTPUT);
pinMode(S_redpin, OUTPUT);
pinMode(buttonPin, INPUT);
pinMode(soundPin,OUTPUT);
// other stuff
delay(2000);
Serial.begin(9600);
wifiDev.disp().installDevEventsHandler(&wifiEcb);
wifiDev.disp().setControls(interfaceStr);
serialDev.disp().installDevEventsHandler(&serialEcb);
serialDev.disp().setControls(interfaceStr);
connectWifi();
bCastCli.begin(port);
// Start the server
server.begin();
serialDev.disp().writeInfo("Server started");
// Print the IP address
serialDev.disp().writeInfo(WiFi.localIP().toString().c_str());
serialDev.resetStream();
}
void checkBCastCli()
{
static int sz=0;
sz=bCastCli.parsePacket();
if(sz>0)
{
bCastSenderIp=bCastCli.remoteIP();
for(int i=0;i<sz;++i)
srvReadyParser.putByte(bCastCli.read());
}
}
void checkWifiClient()
{
if(client)
{
if(!client.connected())
{
serialDev.disp().writeInfo("Client connection lost");
client=server.available();
if(client)
{
serialDev.disp().writeInfo("Take next pending incoming connection");
lastSyncMillis=millis();
wifiDev.resetStream();
wifiDev.resetParser();
}
delay(100);
}
else
{
while(client.available())
wifiDev.putByte(client.read());
}
}
else
{
client=server.available();
if(client)
{
serialDev.disp().writeInfo("Take next pending incoming connection");
lastSyncMillis=millis();
wifiDev.resetStream();
wifiDev.resetParser();
}
delay(100);
}
}
void loop() {
while(Serial.available())
serialDev.putByte(Serial.read());
if(WiFi.status()!=WL_CONNECTED)
connectWifi();
checkBCastCli();
checkWifiClient();
if(((millis()-lastSyncMillis)>12000)&&client.connected())
{
client.stop();
checkWifiClient();
}
delay(50);
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
if (buttonState == HIGH) {
digitalWrite(S_greenpin,LOW);
delay(500);
digitalWrite(S_greenpin,HIGH);
delay(500);
digitalWrite(S_greenpin,LOW);
delay(500);
digitalWrite(S_greenpin,HIGH);
delay(500);
digitalWrite(S_greenpin,LOW);
delay(500);
digitalWrite(S_greenpin,HIGH);
delay(500);
digitalWrite(S_greenpin,LOW);
digitalWrite(S_yellowpin,HIGH);
delay(2000);
digitalWrite(S_yellowpin,LOW);
digitalWrite(S_redpin,HIGH);
delay(2000);
digitalWrite(GreenPin,HIGH);
digitalWrite(RedPin,LOW);
digitalWrite(soundPin,HIGH);
delay(3500);
digitalWrite(soundPin,LOW);
digitalWrite(GreenPin,LOW);
delay(500);
digitalWrite(soundPin,HIGH);
digitalWrite(GreenPin,HIGH);
delay(500);
digitalWrite(soundPin,LOW);
digitalWrite(GreenPin,LOW);
delay(500);
digitalWrite(soundPin,HIGH);
digitalWrite(GreenPin,HIGH);
delay(500);
digitalWrite(soundPin,LOW);
digitalWrite(GreenPin,LOW);
delay(500);
digitalWrite(soundPin,HIGH);
digitalWrite(GreenPin,HIGH);
delay(500);
digitalWrite(soundPin,LOW);
digitalWrite(GreenPin,LOW);
delay(500);
digitalWrite(soundPin,HIGH);
digitalWrite(GreenPin,HIGH);
delay(500);
digitalWrite(soundPin,LOW);
digitalWrite(GreenPin,LOW);
delay(500);
digitalWrite(soundPin,HIGH);
digitalWrite(GreenPin,HIGH);
delay(500);
digitalWrite(soundPin,LOW);
digitalWrite(GreenPin,LOW);
digitalWrite(RedPin,HIGH);
delay(3000);
digitalWrite(S_yellowpin,HIGH);
delay(1500);
digitalWrite(S_redpin,LOW);
digitalWrite(S_yellowpin,LOW);
} else {
// turn LED off:
digitalWrite(S_greenpin,HIGH);
digitalWrite(RedPin,HIGH);
}
}