Решил я наконец изучить, как работают аналоговые порты. По случаю под рукой оказался термистор от корпусного вентилятора, а также заброшенный до лучших времен дисплей от Nokia 1100, с кодом для которого я разбирался полгода назад. С формулой преобразования U -> T заморачиваться не стал, взял код, найденный на форуме, поэтому точность вряд ли высока. Сперва задача стояла на первый взгляд простая: вывести температуру в float на дисплей. И тут началось самое интересное... Дело в том, что функция печати на дисплей принимает параметр-строку. Ну я, не долго думая, написал... Код (Text): sprintf(str, "%f", temp); PrintStr(str); ...на что экран ответил: Код (Text): ? Я подумал, может что не то с кодом для экрана, решил проверить через Serial, результат оказался аналогичен. Причем если в sprintf печатать int, то все корректно. В общем, долго я пытался это преодолеть, но без толку. В итоге пришлось сделать коряво: Код (Text): d = trunc(temp); f = trunc((temp - trunc(temp)) * 10); sprintf(str, "%d.%d", d, f); Разобравшись с выводом самой температуры, я решил, что надо как-то задействовать оставшуюся часть экрана, и придумал выводить на нее график изменения температуры. Реализовал я это с помощью массива величиной с ширину экрана, в который каждый цикл обновления все значения сдвигаются на одну ячейку к началу, а в последний элемент пишется текущая температура. Так как я хотел, чтобы сами циферки температуры обновлялись постоянно, а график быстро не уползал, обновление массива для графика происходит только через заданный промежуток времени. Реализовал я это через функцию millis() - сравниваю ее с предыдущим временем обновления, и если прошло больше заданного времени - обновляю, иначе вывожу старый массив. Ну и потом просто решил добавить в уголке min и max температуры. В итоге, алгоритм обновления экрана такой: Код (Text): Пишем температуру, min, max; Рисуем разметку графика; Выводим массив графика; Обновление экрана(в этот момент на экране рисуется все что было выше); Очистка экрана; Теперь можно поставить на ночь мониторить температуру... Чтоб график обновлял каждые 10 минут, тогда на экран влезет часов 16... Ну и еще в планах сделать так, чтоб при выходе значения за пределы данной шкалы, чтоб шкала смещалась. И доделать поточнее преобразование из аналогового сиганала в температуру.
Вот что получилось за ночь: интервал обновления графика выставил 7.5 минут, в ширину 96 точек, так что здесь должен быть 12 часовой лог. В конце резкий спад - утром открывали балкон проветрить. У меня есть еще такой же термистор, можно вытащить его на улицу, и рисовать сразу с двух, t внутри и снаружи Может еще кнопочки добавить для смены вида и смены интервала... А еще вчера наткнулся на статью про подключение SD, выяснил, что подключается очень просто, нужны только резисторы, а у меня как раз есть разъем от умершего ноута, так что можно сделать, чтоб лог писался на карточку.
Да, хотелось бы полностью , дисплей я уже успешно подлючил хотелось бы понять как строится график. Буду очень благодарен
В общем я особо не заморачивался с кодом, в начале идет описание всех функций для дисплея, это большая часть скетча, и в самом конце уже непосредственно рисование. Насколько я помню y[x] у меня это как раз массив, в котором график хранится.
Библиотеки нет, все описано в самом скетче и подключение тоже вроде как. А в 1101 не такой же дисплей как и в 1100?
Саму организацию работы дисплея я и не писал, нашел в сети, только пришлось в ней копаться, т.к. там ошибки были
А это всегда так. Сначала "ох же блинский блин, сколько тут наворочено то! вот чтоб я так - да никогда...". Потом, через некоторое количество дофигавремени усердного ковыряния, ба-бах! выходит поделка. И неказистая вроде и там косяк и тут еще доделать можно и пару скелетов в тумбочках припрятано... А потом через год-два-пять смотришь на нее и удивляешься: "ох же нифига себе я тогда штуковину отгрохал! это ж мне в жизнь не повторить больше такого...".
Я думаю вполне реально, только нужно знать алгоритм работы его и распиновку, попробуйте погуглить, возможно уже кто то делал
Ко-о-ошмар о_О. Размер кода почти 10К. Там все что ... попадали!? Пока не тестил но просмотрев бегло, думаю % на 15 можно сократить и всунуть в Atmega8, если конечно РАМ-ы хватит. Автору топа респект. Исходник что надо и пофантазировать можно. P.S. Для ГУГЛ-щиков - В одноименных дисплеях 1202, 1280 эдентичный контроллер на 100% подходит только поменяйте в исходнике разрешение по высоте (не 65, а 68) иначе 3 последних "ряда" будут пустовать.