Arduino

Φανάρι & seven segment display

Κώδικας

//Ακροδέκτες LED (αυτοκινήτων και πεζών)
int k=10;
int p=11;
int r=12;
int kp=2;
int pp=13;

//Τα τμήματα a,b,c,d,e,f,g της μονάδας απεικόνισης, έχουν
//συνδεθεί στους ακροδέκτες του Arduino 3 έως 9
//Τμήματα μονάδας απεικόνισης για κάθε ψηφίο 0-F
//Σε προηγούμενη άσκηση είχαμε χρησιμοποιήσει τα ψηφία A-F
int d[17][7]={{HIGH,HIGH,HIGH,HIGH,HIGH,HIGH,LOW},//0
{LOW,HIGH,HIGH,LOW,LOW,LOW,LOW},//1
{HIGH,HIGH,LOW,HIGH,HIGH,LOW,HIGH},//2
{HIGH,HIGH,HIGH,HIGH,LOW,LOW,HIGH},//3
{LOW,HIGH,HIGH,LOW,LOW,HIGH,HIGH},//4
{HIGH,LOW,HIGH,HIGH,LOW,HIGH,HIGH},//5
{HIGH,LOW,HIGH,HIGH,HIGH,HIGH,HIGH},//6
{HIGH,HIGH,HIGH,LOW,LOW,LOW,LOW},//7
{HIGH,HIGH,HIGH,HIGH,HIGH,HIGH,HIGH},//8
{HIGH,HIGH,HIGH,LOW,LOW,HIGH,HIGH},//9
{HIGH,HIGH,HIGH,LOW,HIGH,HIGH,HIGH},//A
{LOW,LOW,HIGH,HIGH,HIGH,HIGH,HIGH},//B
{LOW,LOW,LOW,HIGH,HIGH,LOW,HIGH},//C
{LOW,HIGH,HIGH,HIGH,HIGH,LOW,HIGH},//D
{HIGH,LOW,LOW,HIGH,HIGH,HIGH,HIGH},//E
{HIGH,LOW,LOW,LOW,HIGH,HIGH,HIGH}, //F
{LOW,LOW,LOW,LOW,LOW,LOW,LOW}};//Σβήσιμο

void setup() {

//Οι ακροδέκτες 2 έως 13 θα γίνουν έξοδος
for(int i=2;i<=13;i++)
pinMode(i,OUTPUT);

}

void loop() {

//Φάση 1
//κόκκινο αυτοκινήτων, πράσινο πεζών
digitalWrite(k,HIGH);
digitalWrite(pp,HIGH);
digitalWrite(kp,LOW);

//Εμφάνιση του χρόνου που απομένει (4 δευτερόλεπτα)
for(int i=4;i>=0;i–)
{
display(i);
delay(1000);
}

//Το μηδέν ανάβει τρεις φορές για προειδοποίηση τέλους χρόνου
for(int i=1;i<=3;i++)
{
display(16); //το [16] σβήνει τη μονάδα απεικόνισης
delay(300);
display(0); //Εμφάνιση του μηδέν
delay(700);
}

display(16); //το [16] σβήνει τη μονάδα απεικόνισης

//Φάση 2
//πράσινο αυτοκινήτων, κόκκινο πεζών
digitalWrite(k,LOW);
digitalWrite(r,HIGH);
digitalWrite(pp,LOW);
digitalWrite(kp,HIGH);
delay(7000);

//Φάση 3
//πορτοκαλί αυτοκινήτων
digitalWrite(r,LOW);
digitalWrite(p,HIGH);
delay(2000);
digitalWrite(p,LOW);

} //Τέλος loop()

//Εμφάνιση επιλεγμένου ψηφίου στη μονάδα απεικόνισης επτά τμημάτων
void display(int num)
{
for(int x=3;x<=9;x++)
digitalWrite(x,d[num][x-3]);
}