Помогите начинающему "Часы с lcdKeypadshield"
- Войдите на сайт для отправки комментариев
Пнд, 10/03/2014 - 21:57
Здравтсвуйте уважаемые форумчане, помогите привести код в рабочий вид. Это программа часов реального времени без использования ds1307, я понимаю что они будут не точные и то что при отключении питания будет сбиваться время, но это не суть, занялся я им в качестве тренировки (сам только начинаю освоение Arduino), а точнее тренировки в работе с аналоговой клавиатурой lcdkeypadshield. Практически все уже работает, осталось все скомпоновать в определенную последовательность. Нужно чтоб при включении питания запускалась установка Часов (функцию написал - работает), затем после нажатия клавиши Right - установка Минут, потом после нажатия клавиши Select запускались часы с этими значениями.
#include <LiquidCrystal.h> int cnt, Sekunde, Minute, Chas=0; LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Определения для Keypad (номер пина и значения для кнопок) // Значения уровней сигнала для кнопок #define KEYPAD_PIN A0 #define ButtonUp_LOW 90 #define ButtonUp_HIGH 100 #define ButtonDown_LOW 240 #define ButtonDown_HIGH 280 #define ButtonLeft_LOW 390 #define ButtonLeft_HIGH 450 #define ButtonRight_LOW 0 #define ButtonRight_HIGH 50 #define ButtonSelect_LOW 620 #define ButtonSelect_HIGH 650 void setup() { lcd.begin(16, 2); lcd.setCursor(0, 0); lcd.print("D.S.P.T."); } //Процедура опроса клавиатуры, принимает адрес пина, возвращает код клавиши // 1 - UP // 2 - DOWN // 3 - LEFT // 4 - RIGHT // 5 - SELECT int ReadKey(int keyPin) { int KeyNum=0; int KeyValue1=0; int KeyValue2=0; do { KeyValue1=analogRead(keyPin); KeyValue2=analogRead(keyPin); } while (KeyValue1==KeyValue2&&KeyValue2!=1023); if (KeyValue2<ButtonUp_HIGH&&KeyValue2>ButtonUp_LOW) {KeyNum=1;}//Up if (KeyValue2<ButtonDown_HIGH&&KeyValue2>ButtonDown_LOW) {KeyNum=2;}//Down if (KeyValue2<ButtonLeft_HIGH&&KeyValue2>ButtonLeft_LOW) {KeyNum=3;}//Left if (KeyValue2<ButtonRight_HIGH&&KeyValue2>ButtonRight_LOW) {KeyNum=4;}//Right if (KeyValue2<ButtonSelect_HIGH&&KeyValue2>ButtonSelect_LOW) {KeyNum=5;}//Select return KeyNum; } //Функция установки часов void setupChas() { int keyCode=0; lcd.begin(16,2); lcd.setCursor(0, 0); lcd.print(" Setup Chas "); lcd.setCursor(7, 1); lcd.print(Chas); do { keyCode=ReadKey(KEYPAD_PIN); if (keyCode==1){Chas++;delay(200);lcd.setCursor(7, 1);lcd.print(Chas);} if (keyCode==2){Chas--;delay(200);lcd.setCursor(7, 1);lcd.print(Chas);} } while (keyCode!=5 && keyCode!=4); delay(200); if (keyCode==4) {setupMinute();} } //Функция установки Минут void setupMinute() { int keyCode=0; lcd.begin(16,2); lcd.setCursor(0, 0); lcd.print(" Setup Minute "); lcd.setCursor(7, 1); lcd.print(Minute); do { keyCode=ReadKey(KEYPAD_PIN); if (keyCode==1){Minute++;delay(200);lcd.setCursor(7, 1);lcd.print(Minute);} if (keyCode==2){Minute--;delay(200);lcd.setCursor(7, 1);lcd.print(Minute);} } while (keyCode!=5 && keyCode!=4); delay(200); if (keyCode==5) {loop();} } void loop() { cnt++; //Запуск времени if(cnt==100) { lcd.setCursor(0, 0); lcd.print(Chas); lcd.print(":"); lcd.print(Minute); lcd.print(":"); lcd.println(Sekunde); Sekunde++; if(Sekunde==60) { Sekunde=0; Minute++; if(Minute==60) { Minute=0; Chas++; if(Chas==24) { Chas=0; } } } cnt=0; } delay(10); }
Зря похоже регистрировался)))) сегодня наконецто решил задачу....завтра постараюсь с помощью осциллографа откалибровать точность часов...а то больно уж с DS1307 сложно работать...надеюсь - пока!!
Ничего не сложно - есть же библиотеки)))
Делал таке бесполезнве часы....
с библиотеками я могу максимум что сделать так это вывести время на дисплей)))а чтобы работать с переменными, или просто даже устанавливать время кнопками по шине i2c для меня пока фантастика, и причем ниодного примера в интернете не встретил, хотя перелопатил море сайтов - хотел сделать таймер, нашел на меге8 но блин там у автора исходника не сохранилось а есть всего лишь .hex файл. А с этими "бесполезными" часами я могу использовать переменные секунд, минут, часов...правда точность не идеальная но это програмно можно исправить.
с библиотеками я могу максимум что сделать так это вывести время на дисплей)))а чтобы работать с переменными, или просто даже устанавливать время кнопками по шине i2c для меня пока фантастика, и причем ниодного примера в интернете не встретил, хотя перелопатил море сайтов
рано сдались :)
http://arduino.ru/forum/programmirovanie/ds1307-pokazyvayut-strannoe-vre...
рабочая библиотека с примером подключения. прочитайте внимательно, и если все правильно подключите, то максимум через 10 минут у вас будут работающие часы реального времени на базе ds1307
Да на первый взгляд эта библиотека проще, нв выходных постараюсь сделать на них установку времени кнопками....ну и если получится таймер. Спасибо com за наводку))))