#define led_Red 13 //red leed
#define led_Green 11 //green led
#define led_Orange 12 //orange led
#define di_pin1 9 // dig 1 pin for seven segment
#define di_pin2 10 //dig 2 pin for seven segment
unsigned int dig[6]={di_pin1,di_pin2,led_Red,led_Green,led_Orange};
unsigned int seg[8]={2,3,4,5,6,7,8};// for pins a,b,c,d,e,f,g
static unsigned int count_time=0;
unsigned int i=0;
unsigned char count1=0;
typedef enum {Red_Flag,Orange_Flag,Green_Flag}led__Flag;
typedef enum {RED_ON,RED_OFF}Red__state;
typedef enum {Green_ON,Green_OFF}Green__state;
typedef enum {Orange_ON,Orange_OFF}Orange__state;
typedef enum {TIME_20,TIME_60}count__flag ;
led__Flag led_Flag;
Red__state Red_state;
Green__state Green_state;
Orange__state Orange_state;
count__flag count_flag;
const byte digitPatterns[10] = {
B11000000, // 0
B11001111, // 1
B10100100, // 2
B10110000, // 3
B10011001, // 4
B10010010, // 5
B10000010, // 6
B11111000, // 7
B10000000, // 8
B10010000, // 9
};
/* it will display the seven segment */
void display_pin(int num ,int num2)
{
for(int i=0;i<5;i++)
{
digitalWrite(dig[i],LOW);
}
for(int i=0;i<8;i++)
{
digitalWrite(seg[i],LOW);
}
for(int i=0;i<10;i++)
{
digitalWrite(seg[i],bitRead(digitPatterns[num], i));
// Serial.println(bitRead(digitPatterns[num], i));
//delay(1000);
}
digitalWrite(dig[num2], HIGH);
}
/*this main function for sven segment*/
void seven_segment(int count)
{
// int time=count%100;
// Serial.println(time);
while(i<count)
{
for(int j=0;j<10;j++)
{
display_pin(i,0);
display_pin(j,1);
}
i++;
}
// Serial.println(time);
if(count==2)
{
//Serial.println("hi i am in count==6 ");
count_flag=TIME_20;
Orange_state=Orange_OFF;
}
if(count==6)
{
count=0;
//time=0;
// Serial.println("hi");
count_flag=TIME_60;
Green_state=Green_OFF;
Red_state=RED_OFF;
}
i=count;
// Serial.println(count);
//Serial.println(i);
}
/*this for red led*/
int light_Red()
{ if(Red_state==RED_ON)
{
digitalWrite(led_Red,HIGH);
// Red_state=RED_ON;//
}
else if(Red_state==RED_OFF)
{
//Serial.println("hi i am in red_off");
led_Flag=Orange_Flag;
Orange_state=Orange_ON;
digitalWrite(led_Red,HIGH);
return led_Flag;
}
// state_switch();
}
/*this for green led*/
int light_green()
{ if(Green_state==Green_ON)
{
// Serial.print("HI");
digitalWrite(led_Green, HIGH);
// delay(100);
}
else if(Green_state==Green_OFF)
{
led_Flag=Red_Flag;
Red_state=RED_ON;
digitalWrite(led_Green,LOW);
// count_time=0;
}
return led_Flag;
Serial.println(led_Flag);
// state_switch();
}
/*this for Orange led*/
int light_Orange()
{ if(Orange_state==Orange_ON)
{
// Serial.println("hi i am in oragnge_on");
digitalWrite(led_Orange,HIGH);
}
else if(Orange_state==Orange_OFF)
{
led_Flag=Green_Flag;
Green_state=Green_ON;
digitalWrite(led_Orange,LOW);
count_time=0;
return led_Flag;
}
// state_switch();
}
/* this function is used for switch the function*/
void state_switch(led__Flag current_flag)
{ Serial.println(current_flag);
switch(current_flag)
{
case Red_Flag:
current_flag= light_Orange();
//Serial.print(count_time);
break;
case Orange_Flag:
current_flag= light_green();
//Serial.print(led_Flag);
//fun_init();
//reset();
break;
case Green_Flag:
current_flag= light_Red();
break;
default:
break;
}
}
/*ISR IS CLLED FOR HERE */
ISR(TIMER1_COMPA_vect) {
TCNT1=0;
//OCR1A += 6250;
count_time++;
count_time=count_time%100;
}
/*Timer is set here*/
void time_set()
{
// TCCR0A=0;
// TCCR0B=0;
TCCR1B = 0;
TCCR1A = 0;
OCR1A = 62499;
OCR0A=625;
// TCCR0B |= B00000100; // Set prescaler to 256
// TIMSK0 |= B00000011; // Enable Timer1 compare match state_led unsigned interrupt
TCCR1B |= B00000100; // Set prescaler to 256
TIMSK1 |= B00000011; // Enable Timer1 compare match state_led unsigned interrupt
Serial.begin(9600);
}
/*this function is decleard here*/
void pin_dec()
{
for(int i=0;i<6;i++)
{
pinMode(dig[i], OUTPUT);
}
for(int i=0;i<7;i++)
{
pinMode(seg[i], OUTPUT);
}
}
void setup() {
time_set();
pin_dec();
fun_init();
// put your setup code here, to run once:
}
/* here we will init function*/
void fun_init(void)
{
led_Flag=Green_Flag;
Red_state=RED_ON;
// count_time=0;
// i=0;
}
void reset(void)
{
led_Flag=Green_Flag;
Red_state=RED_ON;
count_time=0;
i=0;
}
void loop() {
cli();
// put your main code here, to run repeatedly:
task1();
// Serial.println("hi");
sei();
}
/* task1 we will call call function here*/
void task1()
{
// Serial.println(count_time);
if(count_time<=6)
{
seven_segment(count_time);
state_switch(led_Flag);
}
else{
count_time=0;
i=0;
}
}