Помогите начинающему "Часы с 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 за наводку))))