Вывод на индикаторную лампу
- Войдите на сайт для отправки комментариев
Пт, 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 Динамика на делеях, как эмуляция при отладке отбражения, вполне годно. Для живого девайса, не лучшая идея. ИМХО.
я не совсем могу понять как прописать вывод на индикатор . на лсд я понял и получается выводить.
можете показать пример. или есть кусок готового кода. Спасибо
/**/ byte display[] = {2, 3, 5, 4}; const byte outPin[] = {2, 4, 7, 8}; const byte keyPin[] = {3, 5, 6, 9}; void initDevice() { for (int i = 0; i < 4; ++i) { pinMode(outPin[i], OUTPUT); pinMode(keyPin[i], OUTPUT); } } void runDevice() { static const byte MAP[] = // 0 1 2 3 4 5 6 7 8 9 {0b0110, 0b0000, 0b1001, 0b0001, 0b0111, 0b0100, 0b1000, 0b0101, 0b0011, 0b0010}; static uint32_t past = 0; static byte j = 0; if (millis() - past >= 100) { past = millis(); digitalWrite(keyPin[j], LOW); for (int i = 0; i < 4; ++i) digitalWrite (outPin[i], (MAP[j] >> i) & 0x1); digitalWrite(keyPin[j], HIGH); ++j; if (j > 3) j = 0; } } //--------------------------------- void setup() { initDevice(); } void loop() { runDevice(); }На LCD, вы не поняли, там за вас библиотека это делает.)))
Не знаю почитали за динамическую индикацию или нет, но вкратце: в каждую единицу времени может светиться только один разряд, выбор разряда, в вашем случае, определяется высоким уровнем на аноде, отображаемая цифра, низким уровнем на катоде, но катоды, едины для всех разрядов. Соответственно, мы должны подать напряжение на анод нужного разряда и вместе с ним прижать нужный катод (цифру), делаем задержку, снимаем напряжение с анода, прижимаем катод (цифру) следующего разряда, подаем анодное на следующий разряд. И так по кругу. Создается впечатление одновременно светящихся цифр.
Чтобы вывести значение напряжения, вам понадобится разбить его на отдельные цифры, которые потом выводить последовательно. Для расчленения числа применяем %-оператор, используя делитель на 10. Т.к. он работает только с целыми, а у вас наверняка дробное, придется сперва домножить до целого, а десятичную точку выводить программно.
Чтобы было легче, поставьте большую задержку (секунду-две) и выводите сперва на один индикатор, потом увеличивайте их количество. Прижали нужный катод, подали анодное, задержка, сняли анодное..........................
Всем спасибо буду пробовать !)