For this tutorial, you’ll need:
Watch this full video:
First Version of Code:
#define Working 12 #define led1 10 #define led2 9 #define led3 8 int led=0; void setup() { // put your setup code here, to run once: for (int i=led3; i<=led1; i++) { pinMode(i, OUTPUT); } pinMode(Working, OUTPUT); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led1, LOW); digitalWrite(Working, HIGH); } void loop() { // put your main code here, to run repeatedly: switch(led){ case 0: digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led1, HIGH); delay(1000); led++; break; case 1: digitalWrite(led1, LOW); digitalWrite(led3, LOW); digitalWrite(led2, HIGH); delay(1000); led++; break; case 2: digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, HIGH); delay(1000); led=0; break; default: digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); break; } }
Second Version of Code (First Arduino):
#include <SoftwareSerial.h> SoftwareSerial s(5,6); // (Rx, Tx) #define Working 12 #define led1 10 #define led2 9 #define led3 8 int led=0; int availability =0; void check_if_available(int ); void setup() { s.begin(9600); delay(1000); for (int i=led3; i<=led1; i++) { pinMode(i, OUTPUT); } pinMode(Working, OUTPUT); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led1, LOW); check_if_available(10); } void loop() { // put your main code here, to run repeatedly: switch(led){ case 0: digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led1, HIGH); delay(1000); check_if_available(0); led++; break; case 1: digitalWrite(led1, LOW); digitalWrite(led3, LOW); digitalWrite(led2, HIGH); delay(1000); check_if_available(1); led++; break; case 2: digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, HIGH); delay(1000); check_if_available(2); led=0; break; default: digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); check_if_available(100); break; } } void check_if_available(int a) { s.write(a); //Hello delay(10); if(s.available()>0) //check if there is incoming data { int data = s.read(); if(data==11) //Hello back { digitalWrite(Working, HIGH); return 1; } if((data==0)||(data==1)||(data==2)) //Data Received { digitalWrite(Working, HIGH); return 1; } else { digitalWrite(Working, LOW); return 0; } } else { digitalWrite(Working, LOW); return 0; } }
Second Version of Code (Backup Arduino):
#include <SoftwareSerial.h> SoftwareSerial s(6,5); //(RX, TX) int unavailable=0; int state=0; int received_data=0; #define Working 13 #define led1 10 #define led2 9 #define led3 8 int led=0; int counter=0; int time1=1000; void setup() { Serial.begin(9600); // put your setup code here, to run once: s.begin(9600); delay(1000); for (int i=led3; i<=led1; i++) { pinMode(i, OUTPUT); } pinMode(Working, OUTPUT); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led1, LOW); digitalWrite(Working, LOW); if(s.available()>0) { if(s.read()==10) { s.write(11); //Hello back } } } void loop() { while (unavailable!=1) { if(s.available()>0) //check if there is incoming data { received_data=s.read(); if(received_data==10) //Hello { s.write(11); //Hello back unavailable =0; counter=0; } if((received_data==0)||(received_data==1)||(received_data==2)) { s.write(received_data); state=received_data; unavailable=0; counter =0; } } else { counter = counter +1; delay(500); if(counter ==30) { unavailable =1; } } } if(unavailable ==1) { digitalWrite(Working, HIGH); switch(state){ case 0: digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led1, HIGH); delay(1000); state++; break; case 1: digitalWrite(led1, LOW); digitalWrite(led3, LOW); digitalWrite(led2, HIGH); delay(1000); state++; break; case 2: digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, HIGH); delay(1000); state=0; break; default: digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); break; } } }