arduino實驗組合技——光敏電阻控制LED加數碼管顯示
阿新 • • 發佈:2019-01-24
實現目標效果:光敏電阻控制LED的亮度 同時數碼管顯示光敏電阻的數值
實現原理:獲得光敏電阻阻值後傳入開發板 在串列埠通訊中顯示光敏電阻阻值同時將數值傳入數碼管 將數值大小寫入6引腳就能控制LED的亮度
過程:一、在編寫過程中發現數碼管會閃爍 則取消延時並在大函式中多迴圈幾次即可解決 二、在編寫過程中發現數碼管每換一個數就會滅一次然後再亮 則在主函式中取消延時即可解決 三、又發現1引腳不正常 檢查了所有的程式碼發現沒有問題 又單獨測試了1引腳發現1引腳出現未知錯誤(新手勿噴) 那就把1引腳換成13引腳解決 四、發現光敏電阻經過程式的洗禮後並不靈敏 原因是本人太菜不會多執行緒 這個問題以後解決 五、發現接上13引腳時也會微微亮 晶片內部結構不太懂 不知道為什麼13引腳會有微微的電平
連線:數碼管和上一次的相同 把1引腳改成13引腳即可 LED燈連6引腳 光敏電阻Vcc連線5V引腳 GND連線GND OUT連線A0 其中 LED連線一個阻值為100歐姆的電阻 光敏電阻連線一個阻值為10K歐姆的電阻 最好不要用同一個GND 可能會提升最底電平導致實現出現小問題
圖片:
下面提供了程式碼 和上一次寫的相同的數碼管顯示數字的邏輯 但是最大的缺陷就是沒有使用多執行緒 勉強能用就是反應有點遲鈍
#define open(num) digitalWrite(num,LOW) #define close(num) digitalWrite(num,HIGH) int e=13; int d=2; int dp=3; int c=4; int g=5; int b=7; int BT3=8; int BT2=9; int f=10; int a=11; int BT1=12; int LED=13;///LED變成高電平時會亮 void digital_1() { open(b); open(c); //delay(10); } void digital_2() { open(a); open(b); open(g); open(e); open(d); //delay(10); } void digital_3() { open(a); open(b); open(g); open(c); open(d); //delay(10); } void digital_4() { open(b); open(f); open(g); open(c); //delay(10); } void digital_5() { open(a); open(f); open(g); open(c); open(d); //delay(10); } void digital_6() { open(a); open(f); open(g); open(e); open(c); open(d); //delay(10); } void digital_7() { open(a); open(b); open(c); //delay(10); } void digital_8() { open(a); open(f); open(g); open(e); open(c); open(d); open(b); //delay(10); } void digital_9() { open(a); open(f); open(g); open(c); open(d); open(b); //delay(10); } void digital_0() { open(a); open(f); open(e); open(c); open(d); open(b); //delay(10); } void resetup() { int i; for(i=1;i<=13;i++) { if(i!=6) digitalWrite(i,HIGH); } open(8); open(9); open(12); } void digital_up(int num) { int num1=num/100; int num2=num/10%10; int num3=num%10; int i=100; Serial.println(num,DEC); while(i--) { analogWrite(6,num/4); switch(num1) { case 0:digital_0();break; case 1:digital_1();break; case 2:digital_2();break; case 3:digital_3();break; case 4:digital_4();break; case 5:digital_5();break; case 6:digital_6();break; case 7:digital_7();break; case 8:digital_8();break; case 9:digital_9(); } close(BT1); delay(2); resetup(); open(BT1); switch(num2) { case 0:digital_0();break; case 1:digital_1();break; case 2:digital_2();break; case 3:digital_3();break; case 4:digital_4();break; case 5:digital_5();break; case 6:digital_6();break; case 7:digital_7();break; case 8:digital_8();break; case 9:digital_9(); } close(BT2); delay(2); resetup(); open(BT2); switch(num3) { case 0:digital_0();break; case 1:digital_1();break; case 2:digital_2();break; case 3:digital_3();break; case 4:digital_4();break; case 5:digital_5();break; case 6:digital_6();break; case 7:digital_7();break; case 8:digital_8();break; case 9:digital_9(); } close(BT3); delay(2); resetup(); open(BT3); } open(BT1); open(BT2); open(BT3); return; } void setup(){ pinMode(6,OUTPUT); Serial.begin(9600); unsigned char i; for(i=1;i<=13;i++) { pinMode(i,OUTPUT); digitalWrite(i,HIGH); } open(8); open(9); open(12); } void loop(){ int light; light=analogRead(A0); digital_up(light); Serial.println(light,DEC); }