Вывод на индикаторную лампу
- Войдите на сайт для отправки комментариев
Пт, 28/02/2020 - 03:52
Здравствуйте . хочу построить вольтметр(на 0-30В) на лампах 4 шт ГРИ. подскажите что нужно прописать чтобы был вывод показания напряжения. делитель напряжения есть . потому как запутался делал вывод но показания были 1111. Пробный вывод в виде 2,3,5,4 выводит .Спасибо!
int out1 = 2; int out2 = 4; int out4 = 7; int out8 = 8; int key1= 3; int key2 = 5; int key3 = 6; int key4 = 9; void setup() { pinMode(out1,OUTPUT); pinMode(out2,OUTPUT); pinMode(out4,OUTPUT); pinMode(out8,OUTPUT); pinMode(key1,OUTPUT); pinMode(key2,OUTPUT); pinMode(key3,OUTPUT); pinMode(key4,OUTPUT); } void loop() { // put your main code here, to run repeatedly: int a[]={2,3,5,4}; show(a); } void show(int a[]) { setNumber(a[0]); digitalWrite(key1,HIGH); delay(1); digitalWrite(key1,LOW); setNumber(a[1]); digitalWrite(key2,HIGH); delay(1); digitalWrite(key2,LOW); setNumber(a[2]); digitalWrite(key3,HIGH); delay(1); digitalWrite(key3,LOW); setNumber(a[3]); digitalWrite(key4,HIGH); delay(1); digitalWrite(key4,LOW); } void setNumber(int num) { switch (num) { case 0: digitalWrite (out1,LOW); digitalWrite (out2,HIGH); digitalWrite (out4,HIGH); digitalWrite (out8,LOW); break; case 1: digitalWrite (out1,LOW); digitalWrite (out2,LOW); digitalWrite (out4,LOW); digitalWrite (out8,LOW); break; case 2: digitalWrite (out1,HIGH); digitalWrite (out2,LOW); digitalWrite (out4,LOW); digitalWrite (out8,HIGH); break; case 3: digitalWrite (out1,HIGH); digitalWrite (out2,LOW); digitalWrite (out4,LOW); digitalWrite (out8,LOW); break; case 4: digitalWrite (out1,HIGH); digitalWrite (out2,HIGH); digitalWrite (out4,HIGH); digitalWrite (out8,LOW); break; case 5: digitalWrite (out1,LOW); digitalWrite (out2,LOW); digitalWrite (out4,HIGH); digitalWrite (out8,LOW); break; case 6: digitalWrite (out1,LOW); digitalWrite (out2,LOW); digitalWrite (out4,LOW); digitalWrite (out8,HIGH); break; case 7: digitalWrite (out1,HIGH); digitalWrite (out2,LOW); digitalWrite (out4,HIGH); digitalWrite (out8,LOW); break; case 8: digitalWrite (out1,HIGH); digitalWrite (out2,HIGH); digitalWrite (out4,LOW); digitalWrite (out8,LOW); break; case 9: digitalWrite (out1,LOW); digitalWrite (out2,HIGH); digitalWrite (out4,LOW); digitalWrite (out8,LOW); break; } }
А теперь то же самое, но по русски, с чувством, с темпом , с расстановкой.
Получить значение напряжения, разбить на разряды и прижимать катод (цифру) соответствующюу разряду включенного анода.
Загуглите "Динамическая индикация".
Здесь считается хорошим тоном и схему выкладывать.
P/S Динамика на делеях, как эмуляция при отладке отбражения, вполне годно. Для живого девайса, не лучшая идея. ИМХО.
я не совсем могу понять как прописать вывод на индикатор . на лсд я понял и получается выводить.
можете показать пример. или есть кусок готового кода. Спасибо
На LCD, вы не поняли, там за вас библиотека это делает.)))
Не знаю почитали за динамическую индикацию или нет, но вкратце: в каждую единицу времени может светиться только один разряд, выбор разряда, в вашем случае, определяется высоким уровнем на аноде, отображаемая цифра, низким уровнем на катоде, но катоды, едины для всех разрядов. Соответственно, мы должны подать напряжение на анод нужного разряда и вместе с ним прижать нужный катод (цифру), делаем задержку, снимаем напряжение с анода, прижимаем катод (цифру) следующего разряда, подаем анодное на следующий разряд. И так по кругу. Создается впечатление одновременно светящихся цифр.
Чтобы вывести значение напряжения, вам понадобится разбить его на отдельные цифры, которые потом выводить последовательно. Для расчленения числа применяем %-оператор, используя делитель на 10. Т.к. он работает только с целыми, а у вас наверняка дробное, придется сперва домножить до целого, а десятичную точку выводить программно.
Чтобы было легче, поставьте большую задержку (секунду-две) и выводите сперва на один индикатор, потом увеличивайте их количество. Прижали нужный катод, подали анодное, задержка, сняли анодное..........................
Всем спасибо буду пробовать !)