Предыдущая запись — не просто мечты и идеи. Реализация будет точно.
Сегодня проект сдвинулся с места, хорошо что Ардуино — сегодня праздник, паять не буду, а на плате Arduino все можно соединить стандартными контактами. Я всегда програмировал на Баском, так как работал с микроконтроллерами, а не ардуино. Теперь пришлось вникать в С (или С++), которые используются в среде Ардуино.
Для проверки написанного скетча подсоединил дисплей 2004, так как 8х2 не подпаял контролер i2C.
Использовал часы реального времени DS3231 со встроенным датчиком температуры, контролер Arduino Pro Mini, макетную плату (на которую я уже давно напаял штырьки, гнезда, панельки и использую ее для сборки тестовых макетов) и собственно дисплей.
Дисплей и часы работают по протоколу i2C. Многие советуют подтягивать контакты пинов А4 и А5 (SDA и SCL соответственно) через резисторы 1-10 кОм. У меня все заработало и без резисторов. Вопрос к специалистам: зачем нужны эти резисторы, насколько я понял их подключают только в случае использования нескольких устройств по протоколу i2C?
Сначала запустил монитор Ардуино и с помощью стандартного скетча Файл-Примеры-DS1307RTS-SetTime провел синхронизацию часов с ПК. На мониторе появились реальная дата и часы, можно начинать написание программы.
Мой текст программы не претендует на образец, я сам пока учусь програмировать Ардуино, но и не особо большой — использовал стандартные команды из установленных библиотек Часов и Дисплея.
#include <wire.h>
#include <liquidcrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // Устанавливаем дисплей
#include <ds3231.h>
DS3231 rtc(SDA, SCL);
void setup()
{
lcd.init();
lcd.backlight();// Включаем подсветку дисплея
rtc.begin();
lcd.setCursor(0, 0);
lcd.print("BA3 2108");
delay(2000);
lcd.setCursor(0, 1);
lcd.print(" 1987 ");
delay(3000);
}
void loop()
{
int dat=0;
//Выводим время и дату в течении 10 с
while(dat<10){
lcd.setCursor(0, 0);
lcd.print(rtc.getTimeStr());
lcd.setCursor(0, 1);
lcd.print(rtc.getDateStr(FORMAT_SHORT, FORMAT_LITTLEENDIAN));
delay (1000);
dat++;}
int tem=0;
//Выводим время и температуру в течении 5 с
while(tem<5){
lcd.setCursor(0, 0);
lcd.print(rtc.getTimeStr());
lcd.setCursor(0, 1);
lcd.print("T=");
lcd.print(rtc.getTemp());
lcd.print("C");
delay (1000);
tem++;}
}
Для меня большой трудностью было написание цикла задержки 10 и 5 с для отображения даных, допускал элементарные ошибки. Привычка от Баскома и записей операторов на Бейсике и ВижуалБейсике не дает нормально перейти на С, но с помощью интернета быстро все исправил. Вот результат работы.
Может кто скажет, зачем использовать Ардуино, если можна взять Тиньку 2313 и те же часы? Цена, что Ардуино, что АВР-ки практически одинаково стоят, и пускай я не использую еще много пинов, но в перспективе к Ардуино намного проще будет подключить периферию!
Через несколько дней думаю что "заработает" и дисплей от Нокии, уже подключил работаю с датчиками.