Вольтметр

Serega161610
Offline
Зарегистрирован: 28.09.2019
int anodPins[] = {A1, A2, A3, A4};
int segmentsPins[] = {5, 6, 7, 8, 9, 10, 11, 12};

void setup()
{
   Serial.begin(9600);
  for (int i = 0; i < 4; i++) {
    pinMode(anodPins[i], OUTPUT);
  }
  for (int i = 0; i < 8; i++) {
    pinMode(segmentsPins[i], OUTPUT);
  }
}

int seg[10][8] = {
  {1, 1, 1, 1, 1, 1, 0, 0}, //Цифра 0
  {0, 1, 1, 0, 0, 0, 0, 0}, //Цифра 1
  {1, 1, 0, 1, 1, 0, 1, 0}, //Цифра 2
  {1, 1, 1, 1, 0, 0, 1, 0}, //Цифра 3
  {0, 1, 1, 0, 0, 1, 1, 0}, //Цифра 4
  {1, 0, 1, 1, 0, 1, 1, 0}, //Цифра 5
  {1, 0, 1, 1, 1, 1, 1, 0}, //Цифра 6
  {1, 1, 1, 0, 0, 0, 0, 0}, //Цифра 7
  {1, 1, 1, 1, 1, 1, 1, 0}, //Цифра 8
  {1, 1, 1, 1, 0, 1, 1, 0}  //Цифра 9
};

void loop() {
  

  
 int sensorValue = analogRead(A0);
   //float voltage = sensorValue * (5.0 / 1023.0);
  Serial.println(sensorValue);
 int v = sensorValue;
  for (int k = 0; k < 8; k++) 
  {
      digitalWrite(segmentsPins[k], ((seg[v][k] == 1) ? LOW : HIGH));
    }
     
    digitalWrite(anodPins[3], HIGH);
    delay(1); 
    digitalWrite(anodPins[3], LOW);
}
  

Нужно выводить значение потенциометра (0-1023) на 4 сегментный 7 разрядный индикатор
Подскажите как сделать это могу выводить только значение до 9
 

b707
Offline
Зарегистрирован: 26.05.2017

Serega161610 пишет:

Подскажите как сделать это могу выводить только значение до 9
 

и что, этот код работает? - удивительно... должен виснуть практически мгновенно

У вас тут выводится цифра только в последний разряд. Чтобы выводить все число до 1023 - нужно

1) разбить число на отдельные цифры (например 734 -> "7", "3", "4")

2) вывести каждую цифру на свой индикатор

В вашем коде ничего похожего нет

Serega161610
Offline
Зарегистрирован: 28.09.2019

Код работает без проблем. Да я понимаю что выводит все в последний разряд я не понимаю как правельно разбить число 

kalapanga
Offline
Зарегистрирован: 23.10.2016

Serega161610 пишет:

Код работает без проблем. Да я понимаю что выводит все в последний разряд я не понимаю как правельно разбить число 

Чтобы правИльно разбить число, нужно в строке поиска, которая справа сверху набрать "разбить число на цифры", увидеть сколько раз на форуме обсуждался этот вопрос, прочитать, воспользоваться.

b707
Offline
Зарегистрирован: 26.05.2017

Serega161610 пишет:

Код работает без проблем.

вот это вот работает при v от 0 до 1023? не верю

digitalWrite(segmentsPins[k], ((seg[v][k] == 1) ? LOW : HIGH));

Вы сами-то понимаете, что этой строчкой перепахиваете всю память контроллера?

Serega161610
Offline
Зарегистрирован: 28.09.2019

Спасибо за помощь

b707
Offline
Зарегистрирован: 26.05.2017

похоже студентам задали работу с динамической индикацией... сразу два однотипных вопроса на форуме.

Serega161610
Offline
Зарегистрирован: 28.09.2019

Ну нам только материал отправили 

bwn
Offline
Зарегистрирован: 25.08.2014

Разбили число на цифры по разрядам, вывели первый разряд, подали активный уровень на управление первого разряда, задержка, сняли активный уровень, вывели второй разряд, подали активный уровень на управление второго разряда ...........