int ledPinRed = D3;
int ledPinGreen = D4;
int ledPinYellow = D2;
int knockSensor = A0;
bool state = false;
int timeToBus = 0;
void setup() {
//initial state of all 3 pins
pinMode(ledPinRed, OUTPUT);
digitalWrite(ledPinRed, LOW);
pinMode(ledPinGreen, OUTPUT);
digitalWrite(ledPinGreen, LOW);
pinMode(ledPinYellow, OUTPUT);
digitalWrite(ledPinYellow, LOW);
//Port Authority webhook
Particle.subscribe("hook-response/bustime", myBusTimeHandler, MY_DEVICES);
//view variable value in console
Particle.variable("timeToBus", timeToBus);
}
void loop() {
//read sensor
int sensorReading = analogRead(knockSensor);
//change state when sensor is pressed
if (sensorReading > 100){
state = !state;
}
//if sensor is pressed, lights respond to the bus time
if( state == true )
{
Particle.publish( "bustime" );
delay( 1000 );
if(timeToBus > 10)
{
digitalWrite(ledPinGreen, HIGH);
digitalWrite(ledPinRed, LOW);
digitalWrite(ledPinYellow, LOW);
}
else if(timeToBus <= 10 && timeToBus > 5)
{
digitalWrite(ledPinYellow, HIGH);
digitalWrite(ledPinRed, LOW);
digitalWrite(ledPinGreen, LOW);
}
else if(timeToBus <= 5 && timeToBus > 3)
{
digitalWrite(ledPinRed, HIGH);
digitalWrite(ledPinYellow, LOW);
digitalWrite(ledPinGreen, LOW);
}
else if(timeToBus <= 3)
{
digitalWrite(ledPinRed, HIGH);
delay(100);
digitalWrite(ledPinRed, LOW);
delay(100);
}
}
else //if sensor is pressed again, state changes to false, lights turn off
{
digitalWrite(ledPinYellow, LOW);
digitalWrite(ledPinRed, LOW);
digitalWrite(ledPinGreen, LOW);
}
}
//method for Port Authority webhook
void myBusTimeHandler(const char *event, const char *data) {
// Handle the integration respo
String busPrediction = String( data );
if( busPrediction.equals( "DUE" ) ){
timeToBus = 0;
}else{
timeToBus = busPrediction.toInt();
}
}
Click to Expand