0% found this document useful (0 votes)
57 views15 pages

Listing Program Arduino

This Arduino program controls 4 sets of traffic lights on an automated schedule or manually via Bluetooth. It reads the schedule from EEPROM memory, including hours, minutes, and delay for 5 events each day. The main loop gets the current time, switches the lights through their sequences, and can respond to Bluetooth commands to change individual light states or update the schedule which is saved to EEPROM.

Uploaded by

Rizky Syahputra
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
57 views15 pages

Listing Program Arduino

This Arduino program controls 4 sets of traffic lights on an automated schedule or manually via Bluetooth. It reads the schedule from EEPROM memory, including hours, minutes, and delay for 5 events each day. The main loop gets the current time, switches the lights through their sequences, and can respond to Bluetooth commands to change individual light states or update the schedule which is saved to EEPROM.

Uploaded by

Rizky Syahputra
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 15

Listing Program Arduino

#include <Wire.h>// Library Wire


#include "RTClib.h" // Library RTC (Real Time Clock
#include <EEPROM.h> // library eeprom
#include <SoftwareSerial.h> // library Komunikasi Serial

// deklarasi variabel RTC


RTC_DS1307 RTC;
// Deklarasi variabel waktu
DateTime now;
// Deklarasi variabel jam dan menit dan detik
String jam,menit,detik;
// Deklarasi Komunikasi Serial - RX,TX
SoftwareSerial mySerial(11, 10);

// Deklarasi Pin TL-1


int Red1 = 5;
int Yellow1 = 6;
int Green1 = 7;
// Deklarasi Pin TL-2
int Red2 = 2;
int Yellow2 = 3;
int Green2 = 4;
// Deklarasi Pin TL-3
int Red3 = 8;
int Yellow3 = 9;
int Green3 = 12;
// Deklarasi Pin TL-4
int Red4 = A0;
int Yellow4 = A1;
int Green4 = A2;
// Deklarasi waktu jeda TL (Traffic Light)
int wait = 6000;
int waitY = 2000;
// Deklarasi timer
unsigned long timer,timerupdate;
// Deklarasi variabel temporary
int cmd = 0;
int tmp_i = 0;
// Deklarasi variabel data jadwal
byte j_jam[5],j_menit[5],t_detik[5];
// Deklarasi variabel data komunikasi
String InData = "";
// Deklarasi variabel mode sistem
bool isAuto = true;

bool thefirst = false;

void setup()
{

Serial.begin(9600); // set baudrate serial port comp


mySerial.begin(9600); // set baudrate serial bluetooth

Wire.begin(); // set begin Wire


RTC.begin(); // set begin RTC
if (!RTC.isrunning()) // cek apakah RTC ready
{
// jika tidak, set Time ke default
RTC.adjust(DateTime(__DATE__, __TIME__));
Serial.println("set time");

}
now = RTC.now();// ambil nilai waktu sekarang

// deklarasi pin Led sebagai pin Output

pinMode(Red1,OUTPUT);
pinMode(Yellow1,OUTPUT);
pinMode(Green1,OUTPUT);

pinMode(Red2,OUTPUT);
pinMode(Yellow2,OUTPUT);
pinMode(Green2,OUTPUT);

pinMode(Red3,OUTPUT);
pinMode(Yellow3,OUTPUT);
pinMode(Green3,OUTPUT);

pinMode(Red4,OUTPUT);
pinMode(Yellow4,OUTPUT);
pinMode(Green4,OUTPUT);

OffAll(); // padamkan semua led


ReadData(); // baca data eeprom
thefirst = false;

void loop() {

if (mySerial.available()>0)
{
char inChar= (char)mySerial.read();
if(inChar != '*')
{
InData += (String)inChar;

}else{
InData.trim();
// Cek Terima Data - Mode //
if(InData== "auto")
{
isAuto = true;
}else if(InData == "manual")
{
isAuto = false;
OffAll();
cmd = 0;
}else if(InData == "sync")
{
// Syncronisasi data ke smartphone //
KirimData();
}else if(InData == "save")
{
// save data ke eeprom //
WriteData();
thefirst = false;
}
// Cek Terima Data - Mode Manual //
if(isAuto == false)
{
if(InData == "1R1")
{
digitalWrite(Red1,1);
}else if(InData == "1R0")
{
digitalWrite(Red1,0);
}else if(InData == "2R1")
{
digitalWrite(Red2,1);
}else if(InData == "2R0")
{
digitalWrite(Red2,0);
}else if(InData == "3R1")
{
digitalWrite(Red3,1);
}else if(InData == "3R0")
{
digitalWrite(Red3,0);
}else if(InData == "4R1")
{
digitalWrite(Red4,1);
}else if(InData == "4R0")
{
digitalWrite(Red4,0);
}else if(InData == "1Y1")
{
digitalWrite(Yellow1,1);
}else if(InData == "1Y0")
{
digitalWrite(Yellow1,0);
}else if(InData == "2Y1")
{
digitalWrite(Yellow2,1);
}else if(InData == "2Y0")
{
digitalWrite(Yellow2,0);
}else if(InData == "3Y1")
{
digitalWrite(Yellow3,1);
}else if(InData == "3Y0")
{
digitalWrite(Yellow3,0);
}else if(InData == "4Y1")
{
digitalWrite(Yellow4,1);
}else if(InData == "4Y0")
{
digitalWrite(Yellow4,0);
}else if(InData == "1G1")
{
digitalWrite(Green1,1);
}else if(InData == "1G0")
{
digitalWrite(Green1,0);
}else if(InData == "2G1")
{
digitalWrite(Green2,1);
}else if(InData == "2G0")
{
digitalWrite(Green2,0);
}else if(InData == "3G1")
{
digitalWrite(Green3,1);
}else if(InData == "3G0")
{
digitalWrite(Green3,0);
}else if(InData == "4G1")
{
digitalWrite(Green4,1);
}else if(InData == "4G0")
{
digitalWrite(Green4,0);
}
}
// Cek Terima Data - Schedule Waktu //
//---------- Data Jam -------------- //
if(InData.substring(0,2)== "j1")
{
tmp_i = InData.substring(2).toInt();
j_jam[0] = (byte)tmp_i;
}else if(InData.substring(0,2)== "j2")
{
tmp_i = InData.substring(2).toInt();
j_jam[1] = (byte)tmp_i;
}else if(InData.substring(0,2)== "j3")
{
tmp_i = InData.substring(2).toInt();
j_jam[2] = (byte)tmp_i;
}else if(InData.substring(0,2)== "j4")
{
tmp_i = InData.substring(2).toInt();
j_jam[3] = (byte)tmp_i;
}else if(InData.substring(0,2)== "j5")
{
tmp_i = InData.substring(2).toInt();
j_jam[4] = (byte)tmp_i;
}

//---------- Data Menit -------------- //


if(InData.substring(0,2)== "m1")
{
tmp_i = InData.substring(2).toInt();
j_menit[0] = (byte)tmp_i;
}else if(InData.substring(0,2)== "m2")
{
tmp_i = InData.substring(2).toInt();
j_menit[1] = (byte)tmp_i;
}else if(InData.substring(0,2)== "m3")
{
tmp_i = InData.substring(2).toInt();
j_menit[2] = (byte)tmp_i;
}else if(InData.substring(0,2)== "m4")
{
tmp_i = InData.substring(2).toInt();
j_menit[3] = (byte)tmp_i;
}else if(InData.substring(0,2)== "m5")
{
tmp_i = InData.substring(2).toInt();
j_menit[4] = (byte)tmp_i;
}

//---------- Data Delay -------------- //


if(InData.substring(0,2)== "d1")
{
tmp_i = InData.substring(2).toInt();
t_detik[0] = (byte)tmp_i;
}else if(InData.substring(0,2)== "d2")
{
tmp_i = InData.substring(2).toInt();
t_detik[1] = (byte)tmp_i;
}else if(InData.substring(0,2)== "d3")
{
tmp_i = InData.substring(2).toInt();
t_detik[2] = (byte)tmp_i;
}else if(InData.substring(0,2)== "d4")
{
tmp_i = InData.substring(2).toInt();
t_detik[3] = (byte)tmp_i;
}else if(InData.substring(0,2)== "d5")
{
tmp_i = InData.substring(2).toInt();
t_detik[4] = (byte)tmp_i;
}

InData = "";

}
}

if(millis() >= timerupdate + 1000)


{
// ambil waktu dari RTC setiap 1 detik //
GetTime();
timerupdate = millis();
}
if(!isAuto) return;

switch(cmd)
{
case 0:
cmd = 5;
break;
case 5:
// Mode Auto - Traffic Light //
OffAll();
digitalWrite(Green1,1);
digitalWrite(Red2,1);
digitalWrite(Red3,1);
digitalWrite(Red4,1);
timer = millis();
cmd = 10;
break;
case 10:
if(millis() >= timer + wait)
{
OffAll();
digitalWrite(Yellow1,1);
digitalWrite(Red2,1);
digitalWrite(Red3,1);
digitalWrite(Red4,1);
timer = millis();
cmd = 12;
}
break;

case 12:
if(millis() >= timer + waitY)
{
OffAll();
digitalWrite(Red1,1);
digitalWrite(Yellow2,1);
digitalWrite(Red3,1);
digitalWrite(Red4,1);
timer = millis();
cmd = 15;
}
break;
case 15:
if(millis() >= timer + waitY)
{
OffAll();
digitalWrite(Red1,1);
digitalWrite(Green2,1);
digitalWrite(Red3,1);
digitalWrite(Red4,1);
timer = millis();
cmd = 20;
}
break;
case 20:
if(millis() >= timer + wait)
{
OffAll();
digitalWrite(Red1,1);
digitalWrite(Yellow2,1);
digitalWrite(Red3,1);
digitalWrite(Red4,1);
timer = millis();
cmd = 22;
}
break;

case 22:
if(millis() >= timer + waitY)
{
OffAll();
digitalWrite(Red1,1);
digitalWrite(Red2,1);
digitalWrite(Yellow3,1);
digitalWrite(Red4,1);
timer = millis();
cmd = 25;

}
break;

case 25:
if(millis() >= timer + waitY)
{
OffAll();
digitalWrite(Red1,1);
digitalWrite(Red2,1);
digitalWrite(Green3,1);
digitalWrite(Red4,1);
timer = millis();
cmd = 30;
}
break;
case 30:
if(millis() >= timer + wait)
{
OffAll();
digitalWrite(Red1,1);
digitalWrite(Red2,1);
digitalWrite(Yellow3,1);
digitalWrite(Red4,1);
timer = millis();
cmd = 32;
}
break;

case 32:
if(millis() >= timer + waitY)
{
OffAll();
digitalWrite(Red1,1);
digitalWrite(Red2,1);
digitalWrite(Red3,1);
digitalWrite(Yellow4,1);
timer = millis();
cmd = 35;

}
break;
case 35:
if(millis() >= timer + waitY)
{
OffAll();
digitalWrite(Red1,1);
digitalWrite(Red2,1);
digitalWrite(Red3,1);
digitalWrite(Green4,1);
timer = millis();
cmd = 40;
}
break;
case 40:
if(millis() >= timer + wait)
{
OffAll();
digitalWrite(Red1,1);
digitalWrite(Red2,1);
digitalWrite(Red3,1);
digitalWrite(Yellow4,1);
timer = millis();
cmd = 42;
}
break;

case 42:
if(millis() >= timer + waitY)
{
OffAll();
digitalWrite(Yellow1,1);
digitalWrite(Red2,1);
digitalWrite(Red3,1);
digitalWrite(Red4,1);
timer = millis();
cmd = 45;

}
break;
case 45:
if(millis() >= timer + waitY)
{
cmd = 5;
}
break;

}
}
//-------------- FUNCTION -------------//
// default jumlah jadwal : 5 (07:00, 12:00 , 17:00, 00:00 , 03:00 )
//
// Config Data :
// 1 - 2 : jadwal waktu (jam-menit)
// 3 : delay traffic (detik)

void ReadData()
{
byte def_jam[5],def_menit[5];
byte def_delay[5];

def_jam[0] = 7; def_menit[0] = 0; // jam 07:00


def_jam[1] = 12; def_menit[0] = 0; // jam 12:00
def_jam[2] = 17; def_menit[0] = 0; // jam 17:00
def_jam[3] = 0; def_menit[0] = 0; // jam 00:00
def_jam[4] = 3; def_menit[0] = 0; // jam 03:00

def_delay[0] = 10; // 10 detik


def_delay[1] = 10; // 10 detik
def_delay[2] = 10; // 10 detik
def_delay[3] = 10; // 10 detik
def_delay[4] = 10; // 10 detik

// baca memori eeprom //


Serial.println("========== READ MEMORY =============");
for(int i =0; i<5; i++)
{
int addr = i * 3;
j_jam[i] = EEPROM.read(addr) == 255 ? def_jam[i] : EEPROM.read(addr);
j_menit[i] = EEPROM.read(addr+1) == 255 ? def_menit[i] : EEPROM.read(addr+1);

t_detik[i]= EEPROM.read(addr+2) == 255 ? def_delay[i] : EEPROM.read(addr+2);

Serial.println("EEPROM(" + (String)(addr+1) + ") == Jam : " + (String)j_jam[i] + " menit :


" + (String)j_menit[i] + " delay : " + (String)t_detik[i] ) ;
}

void WriteData()
{
Serial.println("========== WRITE MEMORY =============");
for(int i =0; i<5; i++)
{
int addr = i * 3;
EEPROM.write(addr,j_jam[i]);

EEPROM.write(addr+1,j_menit[i]);

EEPROM.write(addr+2,t_detik[i]);

Serial.println("EEPROM(" + (String)(addr+1) + ") == Jam : " + (String)j_jam[i] + " menit : "


+ (String)j_menit[i] + " delay : " + (String)t_detik[i] ) ;
}
}

void KirimData()
{
for(int i=0; i<5; i++)
{
mySerial.println("j"+ (String)(i+1) + (String)j_jam[i]);
mySerial.println("m"+ (String)(i+1) + (String)j_menit[i]);
mySerial.println("d"+ (String)(i+1) + (String)t_detik[i]);
}
}

void ClearData()
{
for(int i=0; i<255; i++)
EEPROM.write(i,255);
}

void GetTime()
{
now = RTC.now(); // ambil nilai waktu sekarang
jam = (String)now.hour(); // ambil data jam
menit = (String)now.minute();// ambil data menit
detik = (String)now.second();// ambil data detik

//Serial.println(jam + ":" + menit + ":" + detik);

for(int i=0; i<5; i++)


{
if (thefirst == false)
{

int tnow = (now.hour() * 60) + now.minute();


int tmin = (j_jam[i] * 60) + j_menit[i];
int tmax = 0;

if(i == 4)
{
tmax = (j_jam[0] * 60) + j_menit[0];
}else{
tmax = (j_jam[i+1] * 60) + j_menit[i+1];
}

thefirst = true;
if(tnow >= tmin && tnow < tmax)
{
wait = t_detik[i]*1000;
}

Serial.println("tnow : " + (String) tnow + " tmin:" + (String) tmin + " tmax:" + (String)
tmax + "delay :" + (String) wait);
}

// =============================== Cek Time ==========================


//

if((j_jam[i] == (byte)now.hour()) && (j_menit[i] == (byte)now.minute()))


{
wait = t_detik[i]*1000;
}

}
}

void OffAll()
{
for(int i=2; i<=9; i++)
digitalWrite(i,LOW);
digitalWrite(12,LOW);
digitalWrite(Red4,LOW);
digitalWrite(Yellow4,LOW);
digitalWrite(Green4,LOW);
}

You might also like