Всем привет. Сижу туплю, на макетке собирал схему для 7 сегментника из 2 разрядов все работало. А тут купил индикатор 4-х разрядный 7 сегментный KEM5461 с общим катдом. Пытаюсь вывести в любом из разрядов одну цифру, цифра отображается корректно, но сразу во всех сегментах. Что я делаю не так? Схема во вложении. Код (Text): #define segmentA 2 #define segmentB 3 #define segmentC 4 #define segmentD 5 #define segmentE 6 #define segmentF 7 #define segmentG 8 #define segmentDP 9 #define DIGIT_1PIN 10 //(1) //1234 #define DIGIT_2PIN 11 //(2) #define DIGIT_3PIN 12 //(3) #define DIGIT_4PIN 13 //(4) int t1 = 1234; void show_number(int num) { switch(num) { case 0: digitalWrite(segmentA, HIGH); digitalWrite(segmentB, HIGH); digitalWrite(segmentC, HIGH); digitalWrite(segmentD, HIGH); digitalWrite(segmentE, HIGH); digitalWrite(segmentF, HIGH); digitalWrite(segmentG, LOW); break; case 1: digitalWrite(segmentA, LOW); digitalWrite(segmentB, HIGH); digitalWrite(segmentC, HIGH); digitalWrite(segmentD, LOW); digitalWrite(segmentE, LOW); digitalWrite(segmentF, LOW); digitalWrite(segmentG, LOW); break; case 2: digitalWrite(segmentA, HIGH); digitalWrite(segmentB, HIGH); digitalWrite(segmentC, LOW); digitalWrite(segmentD, HIGH); digitalWrite(segmentE, HIGH); digitalWrite(segmentF, LOW); digitalWrite(segmentG, HIGH); break; case 3: digitalWrite(segmentA, HIGH); digitalWrite(segmentB, HIGH); digitalWrite(segmentC, HIGH); digitalWrite(segmentD, HIGH); digitalWrite(segmentE, LOW); digitalWrite(segmentF, LOW); digitalWrite(segmentG, HIGH); break; case 4: digitalWrite(segmentA, LOW); digitalWrite(segmentB, HIGH); digitalWrite(segmentC, HIGH); digitalWrite(segmentD, LOW); digitalWrite(segmentE, LOW); digitalWrite(segmentF, HIGH); digitalWrite(segmentG, HIGH); break; case 5: digitalWrite(segmentA, HIGH); digitalWrite(segmentB, LOW); digitalWrite(segmentC, HIGH); digitalWrite(segmentD, HIGH); digitalWrite(segmentE, LOW); digitalWrite(segmentF, HIGH); digitalWrite(segmentG, HIGH); break; case 6: digitalWrite(segmentA, HIGH); digitalWrite(segmentB, LOW); digitalWrite(segmentC, HIGH); digitalWrite(segmentD, HIGH); digitalWrite(segmentE, HIGH); digitalWrite(segmentF, HIGH); digitalWrite(segmentG, HIGH); break; case 7: digitalWrite(segmentA, HIGH); digitalWrite(segmentB, HIGH); digitalWrite(segmentC, HIGH); digitalWrite(segmentD, LOW); digitalWrite(segmentE, LOW); digitalWrite(segmentF, LOW); digitalWrite(segmentG, LOW); break; case 8: digitalWrite(segmentA, HIGH); digitalWrite(segmentB, HIGH); digitalWrite(segmentC, HIGH); digitalWrite(segmentD, HIGH); digitalWrite(segmentE, HIGH); digitalWrite(segmentF, HIGH); digitalWrite(segmentG, HIGH); break; case 9: digitalWrite(segmentA, HIGH); digitalWrite(segmentB, HIGH); digitalWrite(segmentC, HIGH); digitalWrite(segmentD, HIGH); digitalWrite(segmentE, LOW); digitalWrite(segmentF, HIGH); digitalWrite(segmentG, HIGH); break; default: digitalWrite(segmentA, LOW); digitalWrite(segmentB, HIGH); digitalWrite(segmentC, HIGH); digitalWrite(segmentD, HIGH); digitalWrite(segmentE, HIGH); digitalWrite(segmentF, LOW); digitalWrite(segmentG, HIGH); break; } } void setup() { Serial.begin(9600); pinMode(segmentA, OUTPUT); pinMode(segmentB, OUTPUT); pinMode(segmentC, OUTPUT); pinMode(segmentD, OUTPUT); pinMode(segmentE, OUTPUT); pinMode(segmentF, OUTPUT); pinMode(segmentG, OUTPUT); pinMode(DIGIT_1PIN, OUTPUT); pinMode(DIGIT_2PIN, OUTPUT); pinMode(DIGIT_3PIN, OUTPUT); pinMode(DIGIT_4PIN, OUTPUT); } void loop() { digitalWrite(DIGIT_1PIN, LOW); digitalWrite(DIGIT_2PIN, LOW); digitalWrite(DIGIT_3PIN, LOW); digitalWrite(DIGIT_4PIN, LOW); delay(5); int a = t1 % 10; digitalWrite(DIGIT_1PIN,LOW); digitalWrite(DIGIT_2PIN,LOW); digitalWrite(DIGIT_3PIN,LOW); digitalWrite(DIGIT_4PIN,HIGH); show_number(a); Serial.println(a); delay(5); }
неправильное включение транзисторов. Биполярный транзистор управляется током, подаваемым в базу. А здесь они выполняют функцию диодов.
Именно!Базы транзисторов через резистор 1 ком подключить к пинам D9D12 ардуино а коллекторы этих самых транзисторов к выводам DIG1-DIG4 индикатора
это ничего не значит. Так же через ИЛИ назначаешь уровни и по И их снимаешь. Вместо портянки получится 2-4 строчки.