byte segValue[10][7] = {//យើងប្រកាសធាតុជាArayក្នុងមួយArayមាន7ធាតុ
{0,0,0,0,0,0,1}, //0
{1,0,0,1,1,1,1}, //1
{0,0,1,0,0,1,0}, //2
{0,0,0,0,1,1,0}, //3
{1,0,0,1,1,0,0}, //4
{0,1,0,0,1,0,0}, //5
{0,1,0,0,0,0,0}, //6
{0,0,0,1,1,1,1}, //7
{0,0,0,0,0,0,0}, //8
{0,0,0,0,1,0,0} //9
};
byte segPin[8]={2,3,4,5,6,7,8,9}; //{a,b,c,d,e,f,g,dp}
byte digitPin[2] = {A0,A1}; //segment seven segment
//segment LED(red,yellow,green)
int red = 13;
int yellow = 12;
int green = 11;
void setup(){
for(int i=0;i<10;i++){//ប្រកាស់អញាតិបើសិនលេខនិងស្មើ10អោយវានិងត្រលប់ទៅស្មើនិង0វិញ
pinMode(segPin[i], OUTPUT);//អោយវាបង្ហាញទិន្នន័យនៃ(i)
}
pinMode(digitPin[0], OUTPUT);//ដំណាងអោយA0
pinMode(digitPin[1], OUTPUT);//ដំណាងអោយA1
digitalWrite(digitPin[0], LOW); //ដំណាងអោយA0
digitalWrite(digitPin[1], LOW); //ដំណាងអោយA1
Serial.begin(9600);
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
}
void loop() {
digitalWrite(green, HIGH);//បើក
for (int i = 25; i > 0; i--) {//កន្លែងនេះមានន័យថាឲពណ៍បៃតង លោតលេខថយក្រោយក្នុង25s
if(i<6){//លក្ខណប្រសិនបើលេខ25និងចុះមកសល់ក្រោម6sឲពណ៍បៃតងបិទឲពណ័លឿងបើកវិញ
digitalWrite(green, LOW);//បិទ
digitalWrite(yellow, HIGH);//បើក
}
display_N(i);//បើសិនជានាទី25និងវាសល់0ឲពណ័លឿងនឹងបិទ
delay(1);// បង្ហាញទិន្នន័យក្នុងរយៈពេល1s
digitalWrite(yellow, LOW);//បិទ
}
digitalWrite(red, HIGH);//ឲពណ៍ក្រហមបើក
for (int i = 20; i>0; i--) {//ក្នុង20វិនាទី(រាប់ថយក្រោយដូចគ្នា)
display_N(i);
delay(1); // បង្ហាញទិន្នន័យក្នុងរយៈពេល1s
}
digitalWrite(red, LOW);//បិទ
}
void display_N(int num)
{
// Convierte unidades y decenas
int und = num % 10;// យកចំនួននិងចែកនិង10
int dec = (num % 100) / 10 ; // យកចំនួននិងចែកនិង100 យកសំណល់ចែកនិង10
// Refresco dinamico
for(int i=0; i<400; i++)//កន្លែងនេះយើងកំនត់នាទីកុំឲវាលោតលឿនពេក
{
segOutput(1, und, 1); // seven segment ti 1
segOutput(0, dec, 1); // seven segment ti 2
delay(2);
}
//ឲវាបង្ហាញទិនន័័យលើ7 segment នីមួយៗ
Serial.print(dec);
Serial.println(und);
}
//LED of seven segment
//clear data of seven segment
void segClear(){
for(int i=0;i<8;i++){//បានន័យថាឲ(byte segPin)ដែលយើងបានកំណត់នូវខាងដើមនិងវាដំណើរការឡើងវិញ
digitalWrite(segPin[i], HIGH); //ឲ្យវាលោតតាមលំដាប់ដែលយើងបានកំណត់
//(កន្លែងនិងបើយើងដាក់lowវានឹងភ្លឺ8អំពូលនៃ7segmentរបស់យើង)
}
}
//LED
void segOutput(int d, int Number, int dp){
segClear();
digitalWrite(digitPin[d], HIGH);
for(int i=0;i<7;i++){
digitalWrite(segPin[i], segValue[Number][i]);
}
//ពន្យាពេលនៃការបង្ហាញទិន្នន័យ
digitalWrite(segPin[7], dp);
delayMicroseconds(100);
digitalWrite(digitPin[d], LOW);
}