昨天買的七段式LED型號是OHS-511EN-52,上網完全查不到參考資料。
昨天雖然在James那邊有用過另一種型號的七段式LED,也有查到腳位資料,但那顆是共陽,我買的是共陰,以前也沒玩過這些東西,大腦中對這些玩意兒的資訊趨近於零。既然上網查不到,那只好一腳一腳試了。
用Arduino寫程式一腳一腳試,為了去除各種變因,一次只測試一腳,pin A測試完,再改寫成測試pin B,如此一腳一腳慢慢測。下面把我測試的結果拍下來,紀錄一下。
既然知道了腳位,也知道如何讀取可變電阻的數值,那就讓七段式LED顯示可變電阻的變化吧。可變電阻在Arduino裡被讀出有1024階的數值(0~1023),不過一個七段式LED能表現的有限,以我現有的電子知識來說,不可能連接四個來顯示這些數值,所以只能以區間來表示,把1024分成10階(本來考慮16階,顯示0~9,a~f,太複雜,算了),反正現在只是研究,不需要做到那樣。
以下是程式碼:
/*
Read analog value with OHS-511EN-52
*/
// 定義LED腳位
int ledPinA = 7;
int ledPinB = 6;
int ledPinC = 4;
int ledPinD = 3;
int ledPinE = 2;
int ledPinF = 9;
int ledPinG = 10;
int ledPinGND1 = 14;
int ledPinGND2 = 14;
int ledPinDP = 5;
// 定義可變電阻值腳位
int analogPin = 0;
// 可變電阻值
int analogVal = 0;
// LED顯示數字
int numLED = 0;
void setup(){
Serial.begin(9600); // 建立序列埠並設定傳輸速度為9600bits/sec
}
void loop(){
analogVal = analogRead(analogPin); //讀入analog值
int foo = (analogVal+1) * 10 / 1024;
numLED = foo*9/10;
Serial.print("Analog value:");
Serial.print(analogVal);
Serial.print(" / LED value:");
Serial.print(numLED);
Serial.print("\n");
showChar(numLED);
}
void clearChar(){ // clear
digitalWrite(ledPinA, LOW);
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinC, LOW);
digitalWrite(ledPinD, LOW);
digitalWrite(ledPinE, LOW);
digitalWrite(ledPinF, LOW);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinDP, LOW);
}
void showChar(int intChar){
switch(intChar){
case 0:
digitalWrite(ledPinA, HIGH);
digitalWrite(ledPinB, HIGH);
digitalWrite(ledPinC, HIGH);
digitalWrite(ledPinD, HIGH);
digitalWrite(ledPinE, HIGH);
digitalWrite(ledPinF, HIGH);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinDP, LOW);
break;
case 1:
digitalWrite(ledPinA, LOW);
digitalWrite(ledPinB, HIGH);
digitalWrite(ledPinC, HIGH);
digitalWrite(ledPinD, LOW);
digitalWrite(ledPinE, LOW);
digitalWrite(ledPinF, LOW);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinDP, LOW);
break;
case 2:
digitalWrite(ledPinA, HIGH);
digitalWrite(ledPinB, HIGH);
digitalWrite(ledPinC, LOW);
digitalWrite(ledPinD, HIGH);
digitalWrite(ledPinE, HIGH);
digitalWrite(ledPinF, LOW);
digitalWrite(ledPinG, HIGH);
digitalWrite(ledPinDP, LOW);
break;
case 3:
digitalWrite(ledPinA, HIGH);
digitalWrite(ledPinB, HIGH);
digitalWrite(ledPinC, HIGH);
digitalWrite(ledPinD, HIGH);
digitalWrite(ledPinE, LOW);
digitalWrite(ledPinF, LOW);
digitalWrite(ledPinG, HIGH);
digitalWrite(ledPinDP, LOW);
break;
case 4:
digitalWrite(ledPinA, LOW);
digitalWrite(ledPinB, HIGH);
digitalWrite(ledPinC, HIGH);
digitalWrite(ledPinD, LOW);
digitalWrite(ledPinE, LOW);
digitalWrite(ledPinF, HIGH);
digitalWrite(ledPinG, HIGH);
digitalWrite(ledPinDP, LOW);
break;
case 5:
digitalWrite(ledPinA, HIGH);
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinC, HIGH);
digitalWrite(ledPinD, HIGH);
digitalWrite(ledPinE, LOW);
digitalWrite(ledPinF, HIGH);
digitalWrite(ledPinG, HIGH);
digitalWrite(ledPinDP, LOW);
break;
case 6:
digitalWrite(ledPinA, HIGH);
digitalWrite(ledPinB, LOW);
digitalWrite(ledPinC, HIGH);
digitalWrite(ledPinD, HIGH);
digitalWrite(ledPinE, HIGH);
digitalWrite(ledPinF, HIGH);
digitalWrite(ledPinG, HIGH);
digitalWrite(ledPinDP, LOW);
break;
case 7:
digitalWrite(ledPinA, HIGH);
digitalWrite(ledPinB, HIGH);
digitalWrite(ledPinC, HIGH);
digitalWrite(ledPinD, LOW);
digitalWrite(ledPinE, LOW);
digitalWrite(ledPinF, LOW);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinDP, LOW);
break;
case 8:
digitalWrite(ledPinA, HIGH);
digitalWrite(ledPinB, HIGH);
digitalWrite(ledPinC, HIGH);
digitalWrite(ledPinD, HIGH);
digitalWrite(ledPinE, HIGH);
digitalWrite(ledPinF, HIGH);
digitalWrite(ledPinG, HIGH);
digitalWrite(ledPinDP, LOW);
break;
case 9:
digitalWrite(ledPinA, HIGH);
digitalWrite(ledPinB, HIGH);
digitalWrite(ledPinC, HIGH);
digitalWrite(ledPinD, HIGH);
digitalWrite(ledPinE, LOW);
digitalWrite(ledPinF, HIGH);
digitalWrite(ledPinG, HIGH);
digitalWrite(ledPinDP, LOW);
break;
}
}
測試結果影片:




3 Responses