Неправильно работают 7-сегментные индикаторы.
- Войдите на сайт для отправки комментариев
Втр, 25/06/2019 - 14:34
Здравствуйте! Я школьник, интересуюсь ардуиной. Хочу сделать термометр с выводом на 2 одноразрядных семисегментных индикатора с сдвиговыми регистрами 74HC595. Код для термометра пашет отлично, а вот с каскадом все плохо. Семисегментники горят всеми огнями и не реагируют на цифры вводимые в последовательный порт. Железо поставил правильно, получается проблема в коде. Код брал отсюда: http://arduino.ru/Tutorial/registr_74HC595 , думал доработать но не смог. Вот мой код:
#define CLOCK 13
#define DATA 12 //замена слов на порты к сдвиговикам
#define LATCH 8
int i;
int t;
int r; //переменные
int y;
int g;
int w;
int firtemp;
int h = 1000;
byte inf[10] {
0b11111100,
0b01100000,
0b11011010,
0b11110010,
0b01100110,
0b10110110,
0b10111110, //массив с байтами, посылаемыми в сдвиговики
0b11100000,
0b11111110,
0b11110110
};
void setup() {
pinMode(CLOCK, OUTPUT);
pinMode(DATA, OUTPUT); //пинмоды
pinMode(LATCH, OUTPUT);
// digitalWrite(LATCH, HIGH); //не знаю нужна ли эта строчка
Serial.begin(9600); //открыл порт
}
void loop() {
w = Serial.parseInt(); //ввод в порт числа
g = fun(w); //выделение десятков из числа
Serial.println(g); //печать десятков
g = inf[g]; //присвоение числу десятков, байта из массива, соответствующего числу
y = prim(w);
Serial.println(y); //то же с единицами
y = inf[y];
shift(y); //продвигаем байты в регистры, сначала второй, потом первый
shift(g);
delay(h); //задержка(потом переделаю)
}
void shift(int ry) {
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, LSBFIRST, ry); //продвигалка
digitalWrite(LATCH, HIGH);
}
void outshift(int ry) {
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, MSBFIRST, ry); //продвигалка наоборот //блоки функций
digitalWrite(LATCH, HIGH);
}
int fun(int number) {
int r = number / 10; //вычисление десятков
return r;
}
int prim(int num) {
int g = fun(num);
int t = num - g * 10; //вычисление единиц
return t;
}
Забыл прочитать как вставлять код. Сделал наобум. Извиняюсь.
А если выкинуть все лишнее и просто присвоить g и y какие-то значения (допустим 1 и 2 ), работает? А 29 строка скорее всего нужна.
Нет не реагирует вообще. Насчет 29 строки спасибо. учту
Внимательно проверь подключение регистров, согласно последней схеме из твоей ссылки. Загрузи пример оттуда и проверью Там все правильно и работать должно. Если работает, то регистры подключены правильно. После этого грешить можно только на твой скетч.
Ок. Сделаю - отпишусь.
А в сериал правильные цифры выводит?. Усли Да, то скорее всего ошибки в монтаже.
Работает. Все таки это скетч.
Работает. Все таки это скетч.
И что было?
А в сериал правильные цифры выводит?. Усли Да, то скорее всего ошибки в монтаже.
Цифры выводит правильные, но это только маленький кусок кода. Я уже даже пробовал и MSBFIRST и подключать по другому. Не получается.
Работает. Все таки это скетч.
И что было?
Поочередно загорается каждый сегмент второго индикатора, а затем первого. (для ардуины наоборот).
Потом тухнет.
Это работает последний пример?
Самый последний. 2.2
Замени во 2 и 3 строке последние параметры на любые цифры из массива inf твоего кода и посмотри что получится
Работает просто збс! Даже 7-сегментники не глючат!
Может надо переписать массив под MSBFIRST?
А зачем? Что не так? Думаю дальше сам разберешься.
Ладно, сейчас попробую. Но не факт: в программировании я новичок, так что могу быть тупым на совершенно очевидных вещах. Так что могу потом еще спросить.
Ладно, сейчас попробую. Но не факт: в программировании я новичок, так что могу быть тупым на совершенно очевидных вещах. Так что могу потом еще спросить.
Если мозги работают, то пара тройка дней и сам будешь новичков учить. Удачи!
Спасибо!
Неправильно работают 7-сегментные индикаторы
Никогда так не говорите (не пишите). Просто, никогда. Такие формулировки сразу же вызывают отторжение, неприятие и желание ответить "Это мозги у тебя неправильно работают". Техника всегда работает так, как сделана, а программа так, как написана.
Это не наезд, просто совет как писать вопросы, чтобы не вызывать раздражение первой же фразой.
Вот на всякий случай для общего развития http://arduino.ru/forum/apparatnye-voprosy/displei-16kh1-ot-kkm-elves-mikro#comment-417911 правда там 8 разрядов, но управление регистрами очень похожее. Может что-нибудь прояснит.