相似文章
CD4051特點
- 具有類比輸入類比輸出的特性
- 具有8個Channel及一個COM
- 雙向傳輸,COM->CH0,CH0->COM
- 3條選擇線,以及一條致能線(Enable)
- DIP封裝,開發方便
- 可做多工器/解多工器
簡介
| CD4051等效功能圖 |
A、B、C為選擇線。
CD4051為CMOS,選擇線的邏輯準位為:
LOW=VIL=0.3VDD
HIGH=VIH=0.7VDD
HIGH=VIH=0.7VDD
VDD=5V時:
LOW=VIL=0.3*5=1.5V
HIGH=VIH=0.7*5=3.5V
| 程式碼 |
| int values[8]; int analong_max=0; void setup() { Serial.begin(115200); pinMode(4, OUTPUT); pinMode(3, OUTPUT); pinMode(2, OUTPUT); select(0); analong_max=900; //analong_max=analogRead(A5); } int channel; void loop() { if(Serial.available()>0){ channel=Serial.read()-0x30; //ASCII 0x30 -> 0 } select(channel); //int curr_value=analogRead(A5); //最大值約落在900 int curr_value=map(analogRead(A5),0,analong_max,0,127);//將0~900轉成0~127,增加則訊邊界處理能力。 if (range(values[channel], curr_value, 1) != values[channel]) { values[channel]=curr_value; Serial.print("ch:"); Serial.print(channel); Serial.print("\t"); Serial.println(curr_value); } } int range(int privious, int current, int d) { //過濾雜訊 if (current > privious && current - d == privious)return privious; else if (current < privious && privious - d == current)return privious; else if (current == privious)return privious; return current; } short select(int select) { switch (select) { case 0: digitalWrite(4, LOW); digitalWrite(3, LOW); digitalWrite(2, LOW); break; case 1: digitalWrite(4, LOW); digitalWrite(3, LOW); digitalWrite(2, HIGH); break; case 2: digitalWrite(4, LOW); digitalWrite(3, HIGH); digitalWrite(2, LOW); break; case 3: digitalWrite(4, LOW); digitalWrite(3, HIGH); digitalWrite(2, HIGH); break; case 4: digitalWrite(4, HIGH); digitalWrite(3, LOW); digitalWrite(2, LOW); break; case 5: digitalWrite(4, HIGH); digitalWrite(3, LOW); digitalWrite(2, HIGH); break; case 6: digitalWrite(4, HIGH); digitalWrite(3, HIGH); digitalWrite(2, LOW); break; case 7: digitalWrite(4, HIGH); digitalWrite(3, HIGH); digitalWrite(2, HIGH); break; } } |
測試結果
使用int curr_value=analogRead(A5);
讀取A5 ADC電位,將可變電阻催到底只有到900,可能是因CD4051接腳內阻造成的電壓降。
在初始時將可變電阻催到底,使電壓為最大值
analong_max=analogRead(A5);
將0~900轉成0~127,增加則訊邊界處理能力。
int curr_value=map(analogRead(A5),0,analong_max,0,127);
在序列監控視窗輸入0~7,可切換不同的可變電阻

沒有留言:
張貼留言