Семисегментный двухразрядный индикатор
- Войдите на сайт для отправки комментариев
Пт, 22/11/2013 - 01:52
Всем привет! Мозгов не хватает чтобы решить проблему!
Вот схема
Вот код
unsigned char number[] = { B11000000,//0 B11111001,//1 B10100100,//2 B10110000,//3 B10011001,//4 B10010010,//5 B10000010,//6 B11111000,//7 B10000000,//8 B10010000,//9 }; byte t; unsigned char count = 0; //числа для вывода на индикатор unsigned char data1 = 0; unsigned char data2 = 0; void setup(){} void loop() { data1 = 5; data2 = 2; //порт, к которому подкл. сегменты PORTD = 0xff; DDRD = 0xff; //вывод, к которому подкл. анод PORTB = 0; DDRB = (1<<1)|(1<<0); while(1){ PORTB &= ~((1<<1)| (1<<0)); if (count == 0) { PORTD = number[data2]; PORTB |= (1<<1); } if (count == 1) { PORTD = number[data1]; PORTB |= (1<<0); } count++; if (count == 2) count = 0; delay(10); } }
Переменные data1 и data2 виводят значения на индикаторы 1 и 2. Но переменная t будет принимать значение от 0 до 99 и мне надо выводить его на индикаторы. Как сделать чтобы двузначное число t посредством data1 и data2 выводились на индикаторы 1 и 2.
Все просто
Большое спасибо! Работает!
чоткий вопрос
все по существу и ответы что надо....
вот был бы такой форум))))
Все просто
ЧерезPD7 не получается.
Здравствуйте, maksim!
Я сделал как советовал NeiroN
Получается что весь порт D занят работой индикаторов. И digitalWrite(7,HIGH) ничего не включает, тоесть невозможно достучаться до PD7.
Я сделал как советовал NeiroN
Я свой код не менял, прото добавил...
Попробую по вашему. Спасибо!
Все отлично работает , но столкнулся с проблемой: как разложить на десятки и единицы число с минусом ? ( нужно вывести температуру на улице ) - после того как темература уменьшается ниже 0 гр на дисплее вместо цифр - бурказябры скачут !
ВЕЗЕТ МНЕ НА ОТВЕТЫ - выше код который решает эту проблему !
да что ж везде один и тот же пример то , да как пины то подключения сменить , нет возможности занять именно эти пины
да что ж везде один и тот же пример то , да как пины то подключения сменить , нет возможности занять именно эти пины
пины на сегменты считайте что никак, для управления сегментами используется полный порт, а в ардуине полный порт только один - порт D. Можно, конечно, переписать без прямой записи в порт - но это весь скетч ломать.
Пины на аноды поменять легко - строчки 22 и 23 кода
да что ж везде один и тот же пример то , да как пины то подключения сменить , нет возможности занять именно эти пины
пины на сегменты считайте что никак, для управления сегментами используется полный порт, а в ардуине полный порт только один - порт D. Можно, конечно, переписать без прямой записи в порт - но это весь скетч ломать.
Пины на аноды поменять легко - строчки 22 и 23 кода
я к сожалению в узких рамках прибор где стоял атмега8 вышел из строя пришлось и атмегу заменить на Nano и функционал немного поменять поэтому задействовать не могу конкретный порт
я описал каждую цифру 0-9, но не понимаю как это заставить работать если не описать се от 0 до 99
так ваш код хоть что показывает или нет
так ваш код хоть что показывает или нет
показывает ровно то что указано в лупе
т.е. цифру 50 я вижу потому как на первом сегменте вклюючаю цифру 5, жду 10 мили секунд , выключаю первый сегмент и показываю на втором сегменте цыфру 0 жду так же 10 мили сек и пошло заново , я не соображу как отобразить переменную в которую пиштся с сенсора показания
т.е. цифру 50 я вижу потому как на первом сегменте вклюючаю цифру 5, жду 10 мили секунд , выключаю первый сегмент и показываю на втором сегменте цыфру 0 жду так же 10 мили сек и пошло заново , я не соображу как отобразить переменную в которую пиштся с сенсора показания
тогда все верно, переменную показываете точно так же - сначала 10мсек цифру десятков, потом переключаетесь и 10мсек цифру единиц. И так быстро-быстро по кругу, иначе будет мерцать.
Лучше это делать на таймерах, иначе МК ничего другого делать не сможет
для начала, в качестве домашнего задания, напиши одну универсальную функцию, которой на вход подаешь одну цифру 0..9, а она зажигает правильные сегменты. Потом разберешь значение твоей переменной на цифры и легко выведешь с помощью этой функции.
Пока у него скилл такой, что он для каждого значения 0..99 будет свой case писать. :)
Пока у него скилл такой, что он для каждого значения 0..99 будет свой case писать. :)
вот вы смеетесь, а ведь все равно не понятно , про что прочесть какой метод по средствам чего куда обращается как ищет что сравнивает когда коментариев нет у кода как понять как работает то что бы можно было применять в условиях моей задачи, ну либо я максимально туп и не вижу очевидных вещей
"Да что тут думать!")
shamsing
Вы же уже научились показывать число 50? так что сложного то?
или вот что непонятного в этой фразе?
переменную показываете точно так же - сначала 10мсек цифру десятков, потом переключаетесь и 10мсек цифру единиц.
спрашивайте - поясню
shamsing
Вы же уже научились показывать число 50? так что сложного то?
или вот что непонятного в этой фразе?
переменную показываете точно так же - сначала 10мсек цифру десятков, потом переключаетесь и 10мсек цифру единиц.
спрашивайте - поясню
я к сожалению могу работать с контроллером либо по ночам в командировке , либо как сейчас когда дома и болен, по удивлениям из коментариев я видимо не понимаю очевидную вещ
у автора есть массив в котором записано в двоичном коде на какой пин включить какой выключить для получения нужного символа на индикаторе, в какой то из строк вот мне не понятной идёт ображение что при 3 нужно обратиться к ячейке массива тоже номер 3 а где такие строки как ы моем коде , что бы потугить первую цыфру и зажеч вторую и наоборот для достижения двух значного числа если не выключать по почередности то получится дублирование на обоих сегментах
"Да что тут думать!")
я уверен 100% рабочий код, но не фига не понятный
shamsing. вы видно настолько не понимаете, что даже спросить толком не можете. Не понял, в чем у вас затык.
Давайте по порядку
Возьмем число 35
- как получить из него первую цифру "3" и вторую"5" - знаете?
- как вывести в первый сегмент "3" - есть проблемы?
- потом выключам первый сегмент, включаем второй - все понятно?
- выводим во второй сегмент "5" - даже не спрашиваю - точно так же как в первый цифру три!
ЭТО ВСЕ!!
Код в первом сообщении к вашей задаче отношения не имеет. Если хотите - потом сидите и разбирайтесь, ищите в учебнике незнакомые слова. Но сейчас себе голову забивать не стоит.
У вас есть двузначное десятичное число, например 52. Вам нужно вывести его на индикатор. Как выводить цифры по отдельности вы уже знаете. Осталось понять, как получить отдельно первую и вторую цифры для вывода. Это просто.
52 / 10 = 5 - это первая цифра, получается делением числа на 10
52 % 10 = 2 - это вторая цифра, остаток числа после деления на 10
Осталось только вывести на индикатор первую полученную цифру в левый разряд, а через 10 мс вторую полученную цифру в правый разряд. Собственно и все
shamsing. вы видно настолько не понимаете, что даже спросить толком не можете. Не понял, в чем у вас затык.
Давайте по порядку
Возьмем число 35
- как получить из него первую цифру "3" и вторую"5" - знаете?
- как вывести в первый сегмент "3" - есть проблемы?
- потом выключам первый сегмент, включаем второй - все понятно?
- выводим во второй сегмент "5" - даже не спрашиваю - точно так же как в первый цифру три!
ЭТО ВСЕ!!
Код в первом сообщении к вашей задаче отношения не имеет. Если хотите - потом сидите и разбирайтесь, ищите в учебнике незнакомые слова. Но сейчас себе голову забивать не стоит.
"- как получить из него первую цифру "3" и вторую"5" - знаете?"
с помощью оператора % (modulo) (35%10) получаю вторую цифру "5"
с помощью оператора / (division) (35/10) получу первую цифру "3"
а вот что у меня не вяжется так как вызвать функцию под названием f3(); а затем когда цифра изменится например на 4 должна вызваться f4();
затык что с чем сравнивать
...пла'чу ...
а вот что у меня не вяжется так как вызвать функцию под названием f3(); а затем когда цифра изменится например на 4 должна вызваться f4();
затык что с чем сравнивать
http://arduino.ru/Reference/SwitchCase
мои прогнозы сбываюцца.
когда если не сейчас это делать когда я рядом с котлом могу находиться для которого переделываю автоматику сломавшуюся, а топить уже нужно
если б вы сразу написали, что вы переделываете автоматику для котла - я бы сразу послал вас нах и не связывался
Пока у него скилл такой, что он для каждого значения 0..99 будет свой case писать. :)
Вы были правы к сожалению я догадался это реализовать только таким образом как вы и предполагали, хотя это и полный брад но мне пока что более короткий и возможно быстродейственнее код не доступен
когда если не сейчас это делать когда я рядом с котлом могу находиться для которого переделываю автоматику сломавшуюся, а топить уже нужно
если б вы сразу написали, что вы переделываете автоматику для котла - я бы сразу послал вас нах и не связывался
не расскажете почему так сурово?
не расскажете почему так сурово?
потому что надо быть полный идиотом с таким уровнем программирования браться за автоматику котла.
Если вы с поясненниеми трех человек так и не поняли, как напечатать на экране двухзначное число - представляю сколько ошибок вы нагородили в самой программе управления.
b707 Arduino ЗЛО - пожарные без работы не останутся тьфу тьфу тьфу ...
b707 Arduino ЗЛО - пожарные без работы не останутся тьфу тьфу тьфу ...
имхо, не ардуино ЗЛО, а жадность и глупость.
не расскажете почему так сурово?
потому что надо быть полный идиотом с таким уровнем программирования браться за автоматику котла.
Если вы с поясненниеми трех человек так и не поняли, как напечатать на экране двухзначное число - представляю сколько ошибок вы нагородили в самой программе управления.
не поспорю что ошибок думаю много, код можно думаю сократить наверное на 60%
но после того как купил знакомый готовую ,я посмотрел что и как внутри и придумал алгоритм ,собрал подобную только лучше на мой взгляд на ардуине, она работает уже второй сезон начался у меня дома на моём котле, а вот заводская умерла и мало того что моя стоила в 7 раз дешевле так она еще и удобнее и имеет возможность дальше ее улучшить, правда редко появляется время это делать, а вот знакомому нужно отапливать дом, а делать в точности как у меня не удобно, т.к. привык смотреть на семисегментный а не на телефоне например, и пытаюсь сохранить вид того что было с теми же возможностями
а по поводу пожарных я может и идиот как уже считаете , но в разрыв питания всей этой лабуды стоит терморезистр и еще термореле если температура каким либо чудом выйдет за пределы допустимой и котел начнет кипеть то одна из двух защит точно сработает питание отключится и соответственно доступ кислорода пропадет а за ним и горение.
Огромное спасибо всем кто пытался обьяснить, цель на сегодняшний день достигнута температура на индикаторах есть
b707 Arduino ЗЛО - пожарные без работы не останутся тьфу тьфу тьфу ...
имхо, не ардуино ЗЛО, а жадность и глупость.
Не думаю что в жадности дело, для меня есть разница например в 1к рублей как в случае собраном на ардуинке и 8к рублей которые отдашь за те же радио детали только в аккуратном корпусе и алгоритм такой же, я же все таки создавал с примера ее
Ты тока на мешках для трупов не экономь, купи цветные, веселенькие, чтоб не стыдно было потом, когда тебя по телеку покажут.
имхо, не ардуино ЗЛО, а жадность и глупость.
Не думаю что в жадности дело, для меня есть разница например в 1к рублей как в случае собраном на ардуинке и 8к рублей которые отдашь за те же радио детали только в аккуратном корпусе и алгоритм такой же, я же все таки создавал с примера ее
В ответ на критику жадности и глупости сказал глупость и жадность.
вот вы смеетесь, а ведь все равно не понятно , про что прочесть какой метод по средствам чего куда обращается как ищет что сравнивает когда коментариев нет у кода как понять как работает то что бы можно было применять в условиях моей задачи, ну либо я максимально туп и не вижу очевидных вещей
"Все равно непонятно" - это когда автор текста явно не дружит ни с орфографией, ни с пунктуацией. И то, и другое люди придумали не для того, чтобы шпынять нерадивых школяров, а для того, чтобы читатель мог понять, что именно хотел сказать автор, а не гадать, где следует поставить очередной знак препинания.
Ну тут все одно к одному... Грамотность, неумение понять элементарных принципов программирования, отсутствие логики...
Именно поэтому наш ТС и ввязался в это дело - умный человек посчитал бы плюсы и минусы и купил готовое.