ေလ့လာျခင္း

in #news7 years ago (edited)

Arduino & 7 Segment Display (၃)
— ထြန္းေအာင္ေက်ာ္

displaySegments function ကို ဆက္ၿပီး ရွင္းျပပါမယ္။ ဒီ function က ကၽြန္ေတာ္တို႔ ေပးသြင္းတဲ့ ဂဏန္းကို ရာဂဏန္း၊ ဆယ္ဂဏန္း၊ ခုဂဏန္း ခြဲၿပီး sevenSegmentsWrite function ကို တဆင့္ ေခၚေပးဖို႔ ေရးထားတာပါ။

Function အျပည့္အစံုက ဒီလိုပါ။

void displaySegments(byte number, bool leadingZero) {
if (number > 99) {
sevenSegmentsWrite(number/100, 0);
sevenSegmentsWrite((number%100)/10, 1);
sevenSegmentsWrite(number % 10, 2);
}
else if (number > 9) {
if (leadingZero) {
sevenSegmentsWrite(0, 0);
}

sevenSegmentsWrite(number/10, 1);
sevenSegmentsWrite(number%10, 2);

}
else {
if (leadingZero) {
sevenSegmentsWrite(0, 0);
sevenSegmentsWrite(0, 1);
}

sevenSegmentsWrite(number, 2);

}
}

အဲေတာ့ ဒီေနရာမွာ number ဆိုတာ 198 လို႔ နမူနာထားရေအာင္ဗ်ာ။

ပထမဆံုးက ဒီလိုေတြ႕ရပါမယ္။

if (number > 99) {
sevenSegmentsWrite(number/100, 0);
sevenSegmentsWrite((number%100)/10, 1);
sevenSegmentsWrite(number % 10, 2);
}

ဒါက ရာဂဏန္းကို စစ္ထုတ္ဖို႔ ေရးထားတာပါ။

if (number > 99) {
}

တကယ္လို႔ number ဟာ 99 ထက္ႀကီးရင္ ဆိုလိုတာက 100 သို႔မဟုတ္ 100 ထက္ႀကီးရင္ေပါ့ဗ်ာ။ ဒါဆို အဲဒီထဲက ရာဂဏန္းကို ခြဲထုတ္ပါမယ္။ ဘယ္လိုခြဲထုတ္မလဲ။ လြယ္ပါတယ္ အဲဒီ number ဆိုတာကို 100 နဲ႔ စားလိုက္ၿပီး စားလာဒ္ (quotient) ကို ယူမွာေပါ့။ 198 ကို 100 နဲ႔ စာေတာ့ စားလာဒ္က 1 မဟုတ္ဘူးလား။

sevenSegmentsWrite(number/100, 0);

ဒီေနရာမွာ ေနာက္ဆံုး argument ျဖစ္တဲ့ 0 ဆိုတာ 7 Segment ရဲ႕ first digit မွာ ေရးမယ္လို႔ ဆိုလိုတာ။ ဒီေတာ့ ပထမဂဏန္း 1 ရၿပီးဗ်ာ။

ေနာက္ ဆယ္ဂဏန္းကို ဆြဲထုတ္ပါမယ္။ ဘယ္လို ဆြဲထုတ္မလဲဆိုေတာ့ number ကို 100 နဲ႔ စားၿပီး စားၾကြင္း (remainder) ကို ရွာမယ္။

number%100

ဒီေတာ့ 98 ရတယ္။ ဒါကို 10 နဲ႔ ထပ္စားၿပီး စားလာဒ္ ရွာေတာ့ 9 ရၿပီ။

(number%100)/10

သူ႔ကို 7 Segment ရဲ႕ second digit မွာ ေရးမယ္။

sevenSegmentsWrite((number%100)/10, 1);

ေနာက္ဆံုး ခုဂဏန္းကို ထပ္ရွာမယ္။ ဘယ္လိုရွာမလဲ။ လြယ္လြယ္ေလး number ကို 10 နဲ႔ စားၿပီး စားၾကြင္းကို ယူလိုက္တာေပါ့။

number % 10

198 ကို 10 နဲ႔ စားရင္ စားၾကြင္း 8 ရတယ္ မဟုတ္လား။ အဲဒါကို 7 Segment ရဲ႕ third digit မွာ ေရးမယ္

sevenSegmentsWrite(number % 10, 2);

ဒီအထိက 100 နဲ႔ အထက္ ဂဏန္းေတြကို ခြဲထုတ္လိုက္တာ။ ရာဂဏန္းမဟုတ္တဲ့ ဆယ္ဂဏန္းဘဲ ရွိတာဆို ဒီလိုခြဲထုတ္မယ္။

else if (number > 9) {
if (leadingZero) {
sevenSegmentsWrite(0, 0);
}

sevenSegmentsWrite(number/10, 1);
sevenSegmentsWrite(number%10, 2);

}

သူက if (number > 9) ဆိုၿပီး number ဟာ 9 ထက္ႀကီးသလားလို႔ စစ္ၾကည့္တယ္။ 9 ထက္ႀကီးတယ္ဆိုရင္ ေရွ႕မွာ zero (0) ခံခ်င္သလား တစ္နည္းေျပာရရင္ leadingZero ထည့္မွာလားလို႔

if (leadingZero)

ေမးလိုက္တယ္။ ထည့္မယ္ဆို

  sevenSegmentsWrite(0, 0);

ပထမ digit မွာ 0 ေရးလိုက္တယ္။

ၿပီးရင္ အဲဒီ number ကို 10 နဲ႔ စားၿပီး စားလာဒ္ကို ဒုတိယ digit မွာ ေရးလိုက္တယ္။

sevenSegmentsWrite(number/10, 1);

အဲဒီ number ကို 10 နဲ႔ စားၿပီး စားၾကြင္းကို တတိယ digit မွာ ေရးလိုက္တယ္။

sevenSegmentsWrite(number%10, 2);

ေနာက္ဆံုးအပိုင္းေလးကေတာ့ ခုဂဏန္းဘဲ ရွိတဲ့ ဂဏန္းကို 7 Segment မွာ ေဖာ္ျပဖို႔ဆို ဒီလိုေလးေရးမယ္။

else {
if (leadingZero) {
sevenSegmentsWrite(0, 0);
sevenSegmentsWrite(0, 1);
}

sevenSegmentsWrite(number, 2);

}

ဒါဆိုရင္ displaySegments function ကို ဘယ္လိုေရးသလဲ နားလည္ေလာက္မယ္ ထင္ပါတယ္။
:)
နည္းနည္းအလုပ္မ်ားေနလို႔ သူ႔ကို Delay without delay() function သံုးၿပီး ဘယ္လို up/down လုပ္မလဲ ေနာက္မွ ထပ္ေရးပါရေစ။
image

photo google image

Sort:  

Hey @voteu, great post! I enjoyed your content. Keep up the good work! It's always nice to see good content here on Steemit! :)