7-сегментный дисплеи не работают
#include <Wire.h>
#include <Adafruit_INA219.h>
Adafruit_INA219 ina219;
//Adafruit_INA219 ina219_A;
//Adafruit_INA219 ina219_B(0x41);
void setup(void)
{
Serial.begin(115200);
while (!Serial) {
// will pause Zero, Leonardo, etc until serial console opens
delay(1);
}
uint32_t currentFrequency;
Serial.println("Hello!");
if (! ina219.begin()) {
Serial.println("Failed to find INA219 chip");
while (1) { delay(10); }
}
ina219.setCalibration_32V_1A();
Serial.println("Measuring voltage and current with INA219 ...");
}
void data(void)
{
float shuntvoltage = 0;
float busvoltage = 0;
float current_mA = 0;
float loadvoltage = 0;
float power_mW = 0;
delay(2000);
shuntvoltage = ina219.getShuntVoltage_mV();
busvoltage = ina219.getBusVoltage_V();
current_mA = ina219.getCurrent_mA();
power_mW = ina219.getPower_mW();
loadvoltage = busvoltage + (shuntvoltage / 1000);
Serial.print("Bus Voltage: "); Serial.print(busvoltage); Serial.println(" V");
Serial.print("Shunt Voltage: "); Serial.print(shuntvoltage); Serial.println(" mV");
Serial.print("Load Voltage: "); Serial.print(loadvoltage); Serial.println(" V");
Serial.print("Current: "); Serial.print(current_mA); Serial.println(" mA");
Serial.print("Power: "); Serial.print(power_mW); Serial.println(" mW");
Serial.println("");
delay(2000);
}
void loop() {
analogWrite(9, 245); //ENA pin
digitalWrite(8, HIGH);
digitalWrite(7, LOW);
data();
delay(5000);
analogWrite(9, 200); //ENA pin
digitalWrite(8, HIGH);
digitalWrite(7, LOW);
data();
delay(5000);
analogWrite(9, 150); //ENA pin
digitalWrite(8, HIGH);
digitalWrite(7, LOW);
data();
delay(5000);
analogWrite(9, 0); //ENA pin
digitalWrite(8, LOW);
digitalWrite(7, LOW);
data();
delay(5000);
}
Явно что-то не так с моим кодом и 7-сегментные индикаторы не горят все время, пока выполняется программа. Я также разместил ссылку ниже которого направляет проект tinkercad я сделал.
https://www.tinkercad.com/things/7pnnbXoaqrG-improved-stop-light-john-seong/editel?sharecode=jR86i_srV7QgP11u1CxOFzeVwehzjIRr8wcc7vbblay
@John Seong, 👍1
Обсуждение1 ответ
На самом деле это не решение, но изменение кода функции displayNumber
, как показано ниже, сделает более очевидным, в чем заключается реальная проблема.
void displayNumber(int num, int displayPin) {
bool binaryValue[][4] = {
{0, 0, 0, 0}, // 0
{0, 0, 0, 1}, // 1
{0, 0, 1, 0}, // 2
{0, 0, 1, 1}, // 3
{0, 1, 0, 0}, // 4
{0, 1, 0, 1}, // 5
{0, 1, 1, 0}, // 6
{0, 1, 1, 1}, // 7
{1, 0, 0, 0}, // 8
{1, 0, 0, 1}, // 9
};
// turn off both displays
digitalWrite(2, LOW);
digitalWrite(3, LOW);
for(int i = 0; i < 4; i++) {
digitalWrite(segmentPins[i], binaryValue[num][i]);
}
digitalWrite(displayPin, HIGH);
/* // удалите эти две строки
delayMicroseconds(10);
digitalWrite(displayPin, LOW);
*/
}
Почему бы не преобразовать его в схему, мы бы поняли, что это намного проще. Также гораздо проще следовать вашей логике в этом формате. Вы можете бесплатно запустить несколько программ захвата схем. Я использую KiCad., @Gil
@Гил, я думаю, что ты оставил свой комментарий по неправильному поводу., @timemage
Я не мог следить за вьющимся рисунком, он был недостаточно четким, чтобы следить за ним на моей машине. Очевидно, я не единственный, у кого с этим проблемы., @Gil
- 74HC595 к 4 значному 7 сегменту с использованием библиотеки SevSegShift
- 7-сегментный дисплей с потенциометром
- Как прочитать выходные данные с разъема SPI с помощью Arduino Uno?
- 4-значный 7-сегментный дисплей неправильно отображает значение
- 4-значный 7-сегментный дисплей
- генератор чисел показывает неправильные сегменты на 7-сегментном дисплее
- Подключение семисегментного дисплея с общим анодом к сдвиговому регистру
- 4-значный 7-сегментный дисплей отображает неверный номер
Пожалуйста, попробуйте цвет кода провода больше. С почти всеми проводами, зелеными и перекрывающимися во многих местах, действительно трудно следовать монтажной схеме. Кроме 7-сегментных дисплеев, у вас есть еще несколько компонентов, которые здесь не очень уместны. Это общий метод отладки, чтобы удалить весь код и компоненты, которые не имеют отношения к конкретной проблеме, а затем получить решение соответствующей проблемы, а затем добавить остальную часть кода и компонентов один за другим, всегда проверяя ошибки между ними. Вы можете попробовать построить схему только для дисплеев и проверить еще раз, @chrisl
Я отладил; оказывается, все соединения правильные, но когда я нажимаю кнопку, сегментные дисплеи выключаются., @John Seong
Вы никогда не касаетесь дисплея сегмента в любом месте в вашей функции `loop ()'. Поэтому, если что-то происходит (например, выключается), но ни один из светодиодов не действует так, как задумано (т. Е. Переключение с зеленого на красный), То что-то в вашей проводке должно быть неправильно или номера контактов в коде не совпадают., @PMF
Он должен мультиплексировать^, @John Seong
Вы можете сделать это проще для тех, кто пытается помочь вам, структурируя провода более логичным образом (например, не позволяйте проводам одного и того же цвета перекрываться) и, возможно, увеличивая схему (так, чтобы номера контактов были читаемы, например). Сейчас это очень трудно понять., @StarCat
displayNumber
показывает только номер для 10μs. Поэтому вам нужно вызывать эту функцию намного больше раз в секунду, чтобы ваши глаза заметили. Вы также можете использовать таймер, чтобы периодически переключаться между сегментами, но достаточно быстро, чтобы казалось, что все два дисплея горят одновременно., @GerbenПочему бы не преобразовать его в схему, как вы его подключили, мы бы поняли, что это намного проще. Кроме того, в этом формате гораздо проще следовать вашей логике. Вы можете бесплатно скачать несколько программ для создания схем. Я использую Кикад. Схемы являются частью основного языка в электронике., @Gil
Как насчет аннотированной схемы, на языке электроники., @Gil