Вопрос по коду для простых часов на семисегментном индикатор
- Войдите на сайт для отправки комментариев
Пнд, 07/11/2016 - 15:36
Добрый день!
Прошу подсказать, что я сделал не так, никак не могу понять...
Есть семисегментный индикатор, отдельно выводить разные цифры - получается, а вот чередовать - нет
Сам код
int i; void setup() { // put your setup code here, to run once: pinMode(2,OUTPUT); //Вывод + на 1 сегмент pinMode(3,OUTPUT); // Вывод + на 2 сегмент pinMode(7,OUTPUT); //Выводы на индиакторы сегментов pinMode(8,OUTPUT);//Выводы на индиакторы сегментов pinMode(9,OUTPUT);//Выводы на индиакторы сегментов pinMode(10,OUTPUT);//Выводы на индиакторы сегментов pinMode(11,OUTPUT);//Выводы на индиакторы сегментов pinMode(12,OUTPUT);//Выводы на индиакторы сегментов pinMode(13,OUTPUT);//Выводы на индиакторы сегментов i=0;//Счетчик } void loop() { click1(); //отключаем второй сегмент и включаем первый if(i<500){ ONE(); // Пишем цифру 1, } if((i>=500)&&(i<1000)); { TWO(); // Через некоторое время - 2 } if ((i>=1000)&&(i<1500)) { THREE(); // А теперь - три } if(i>=1500) // Обнуляем счетчик { i=0; } click2(); // Выключаем первый сегмент и включаем второй TWO(); // пишем цифру 2 i=i+1; // Добавляем единицу счетчику } void click1() { delay(2); digitalWrite(2, HIGH); digitalWrite(3, LOW); } void click2() { delay(2); digitalWrite(2, LOW); digitalWrite(3, HIGH); } void ONE() { digitalWrite(7, HIGH); digitalWrite(8, LOW); digitalWrite(7, LOW); digitalWrite(9, HIGH); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(13, HIGH); } void TWO() { digitalWrite(7, HIGH); digitalWrite(8, HIGH); digitalWrite(7, HIGH); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(13, HIGH); } void THREE() { digitalWrite(7, HIGH); digitalWrite(8, HIGH); digitalWrite(7, HIGH); digitalWrite(9, HIGH); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(12, LOW); digitalWrite(13, LOW); }
https://ru.aliexpress.com/store/product/20pcs-lot-0-4-Four-Digital-Clock-Display-Green-Color-Seven-Segment-Digital-Display-Common-Cathode/406986_2015796655.html?detailNewVersion=&categoryId=541
Это сам индикатор
Вот даташит...
https://yadi.sk/d/a3chks5RyDLn4
А зачем Вы в строке 42 выводите двойку и всё своё "чередование" ею затираете?
И, кстати, 500 - это очень мало по времени. Сделайте хотя бы 10000 (как раз int хватит).
500 я взял, т.к. мне была нужна секунда. Там же два раза delay по 1, следовательно, когда 500 раз они повторятся, будет 1000, т.е. секуда.
Строка 42 включает цифру второго сегмента ( их же там 4)
Но она же не обнуляет счетчик... или я что-то не понимаю?
Так как у всех четырех частей/сегментов общий плюс, то включать их можно только циклически, с минимальным интервалом (чтоб мерцание не было заметно глазу).
Да, в delay изначально была единица)))
Поменял код, заменив счетчик на millis();
Теперь картина еще интереснее.
Показывает 1, потом 3 (в первом сегменте, во втором, как и планировал по коду, пока только единица).
потом длинная пауза, секунд 20.
потом 1 (две секунды) 3 ...(повторяется раз 10) и опять длинная пауза...
Есть семисегментный индикатор, отдельно выводить разные цифры - получается, а вот чередовать - нет
чередовать - это как?
у тебя же подключен один индиктор(сюдя по коду)... или это подлючены параллельно два индикатора?
если так, то на эти два, параллельно подключенных индикатора возможно вывести только две одинаковые цифры.
Один четырехразрядный.
Разные цифры получается ставить в разные разряды.
А вот чередовать цифры в одном разряде, не получается. Что-то делаю не так с кодом
На все четыре разряда общие плюсы.
Поэтому, цифры должны включаться и выключаться попеременно. Иначе не получится включить в разных разрядах разные цифры.
Т.е. сперва горит первый разряд, другие выключены.
Потом второй, первый, третий и четвертый выключены и т.п.
http://www.cohesivecomputing.co.uk/hackatronics/arduino-multi-function-shield/part-3/
Один четырехразрядный.
Разные цифры получается ставить в разные разряды.
дык, не получается - получается рулить анодами разрядов. если аноды не отключать во всех разрядах будет одна цифра.
А вот чередовать цифры в одном разряде, не получается. Что-то делаю не так с кодом
ну, я тоже не вижу 4-х переменных разрядов и условий их индикации типо: светим 1-й разряд - анод в нужное положение, сегменты в нужное положение... и тд. 2-й разряд... 4-й разряд
Почему нет?
Я же сделал функции ckick1 и click2 для первого и второго разрядов (для 3 и 4 пока не делал)
Почему нет?
Я же сделал функции ckick1 и click2 для первого и второго разрядов (для 3 и 4 пока не делал)
а это кто будет делать?
сегменты в нужное положение... и тд. 2-й разряд... 4-й разряд
у тебя переключаются аноды разрядов, а состояния пинов сегментов, рисующих цифру, остаются без изменений
*!!! у тебя там путаница в названиях сущностей, возможно поэтому запутался?
pinMode(7,OUTPUT);
//Выводы на индиакторы сегментов
pinMode(2,OUTPUT);
//Вывод + на 1 сегмент
сегменты - это рисочки разряда из которых строится цифра.
разряд - это 7-мь сегментов(не будем считать точки пока), физически расположенные в одном разряде.
pinMode(2,OUTPUT);
//Вывод + на 7-мь сегментов
Да, виноват, неправильно написал.
2 и 3 вывод на управляющие аноды разрядов,а не сегменты...
Когда меняю одну цифру на другую в одном сегменте (при этом другой сегмент статичен) всё работает.
Как только цифр уже больше двух(в одном ссегменте), пытаюсь посчитать секунды, начинается какая-то свисто-пляска.
та намутил ты с переключалкой цифр - не будет она у тебя работать
так попробуй
или подключи к балалайке пару кнопок - будет проще кнопками цифры переключать
Спасибо!! Так теперь работает! Клапауций просто гений!)