4-значный 7-сегментный дисплей отображает неверный номер
Я новичок в Arduino, у меня проблемы с 4-значным 7-сегментным дисплеем. Я хочу отобразить несколько тысяч на 4-значном 7-сегментном дисплее, но он отображает только 0000. Я хочу получать данные из последовательного порта со строкой. И отобразите данные на 4-значном 7-сегментном дисплее... Итак, проверьте, сделайте String = '2575'... но это не работает. Что не так в моих кодах? Любые предложения здесь будут большим подспорьем. спасибо
int segments[] = {A0, A1, A2, A3};
byte digits[10][7] =
{
{ 1,1,1,1,1,1,0 }, // 0
{ 0,1,1,0,0,0,0 }, // 1
{ 1,1,0,1,1,0,1 }, // 2
{ 1,1,1,1,0,0,1 }, // 3
{ 0,1,1,0,0,1,1 }, // 4
{ 1,0,1,1,0,1,1 }, // 5
{ 1,0,1,1,1,1,1 }, // 6
{ 1,1,1,0,0,0,0 }, // 7
{ 1,1,1,1,1,1,1 }, // 8
{ 1,1,1,0,0,1,1 } // 9
};
void setup() {
Serial.begin(9600);
for(int i=2;i<10; i++) {
pinMode(i, OUTPUT);
}
for(int i=0; i<4; i++) {
pinMode(segments[i], OUTPUT);
}
}
void loop() {
String IncomingData = "2575";
for(int i=0; i<4; i++) {
digitalWrite(segments[i], LOW);
int digit = atoi(IncomingData[i]);
displayDigit(digit);
delay(5);
digitalWrite(segments[i], HIGH);
}
}
void displayDigit(int num){
int pin = 2;
for(int i=0;i<7;i++){
digitalWrite(pin+i, digits[num][i]);
}
}
@김태정, 👍0
Обсуждение1 ответ
Вы вызываете atoi()
с символом. Параметром atoi
является const char*
. Чтобы преобразовать код цифры ASCII в цифру, используйте
int digit = IncomingData[i] - '0'
я не могу этого понять... в любом случае примени IncomingData[i] - '0'... это не работает... спасибо, @김태정
@김태정, int digit = IncomingData[i] - '0'
, @Juraj
вы не знаете, что такое ASCII-код? как кодируются символы? или вы не знаете, почему IncomingData[i] имеет символьный формат и не может использоваться с itoa?, @Juraj
вау@.@ это работает! большое спасибо! Как мне понять теорию...! Хорошего дня!, @김태정
как мне принять ответ?..., @김태정
- 74HC595 к 4 значному 7 сегменту с использованием библиотеки SevSegShift
- 7-сегментный дисплей с потенциометром
- Как прочитать выходные данные с разъема SPI с помощью Arduino Uno?
- 4-значный 7-сегментный дисплей неправильно отображает значение
- 4-значный 7-сегментный дисплей
- генератор чисел показывает неправильные сегменты на 7-сегментном дисплее
- Подключение семисегментного дисплея с общим анодом к сдвиговому регистру
- 7-сегментный дисплеи не работают
Вы уверены, что у вас дисплей с общим катодом? Есть ли у вас резисторы ограничения тока на каждом выводе сегмента? Кроме того, почему у вас есть целое число для всего, когда байт — это все, что нужно для 0,1 или от 0 до 9? Попробуйте добавить Serial.print после этой строки int digit = atoi(IncomingData[i]); увидеть, что эта цифра выходит за рамки того, что вы думаете., @CrossRoads
используйте дисплей с общим анодом. и число int отображается очень хорошо, как displayDigit(5), но код не работал... спасибо, @김태정
Код настроен на общий катод; низкий уровень на катоде для выбора цифры, высокий уровень на сегментах для их включения. Если вы используете общий анод, измените логику; верхняя цифра — для выбора одного, нижняя — для сегментов, чтобы их включить., @CrossRoads
Извините, я использую общий катод... и как это исправить? Serial.print показывает 00000000... Я думаю, используйте int для функции displayDigit(int num)..., @김태정
Исправьте это, изменив логику: High, чтобы включить цифру, Low, чтобы выключить ее. Переверните все 0 в 1, 1 в 0 в массиве цифр., @CrossRoads
Измените
displayDigit(digit);
наdisplayDigit(3);
, чтобы увидеть, заключается ли проблема в синтаксическом анализе строки или в части отображения светодиодов., @GerbendisplayDigit(3); работает... проблема с разбором строк... спасибо, @김태정