Мазмуну:

Arduino Ойготкуч саат долбоору: 14 кадам
Arduino Ойготкуч саат долбоору: 14 кадам

Video: Arduino Ойготкуч саат долбоору: 14 кадам

Video: Arduino Ойготкуч саат долбоору: 14 кадам
Video: Введение в LCD2004 ЖК-дисплей с модулем I2C для Arduino 2024, Июль
Anonim
Arduino Ойготкуч саат долбоору
Arduino Ойготкуч саат долбоору

Бул долбоордо биз Arduino Uno менен ЖК экранды башкарып, ойготкуч коюлган учурду жана убакытты көрсөтөбүз. Биз ар бир убакытты белгилөө үчүн баскычтарды колдонобуз.

Материалдар:

  • Arduino Uno -
  • Нан тактасы -
  • Jumper Wires (x13+) -
  • 10 кох резисторлор (x4) -
  • ЖК экран -
  • 7 баскычтар-https://vilros.com/collections/raspberry-pi-acces…
  • Пьезо спикери -

1 -кадам: Байланыш боюнча нускамалар

Туташуу боюнча нускамалар
Туташуу боюнча нускамалар

1. Arduinoдогу 5V пинден секиргич зымды нан тактасындагы + рельстердин бирине туташтырыңыз.

2-кадам:

Сүрөт
Сүрөт

2. Ардуинодогу GND пининен секиргич зымды туташтырылган + темир жолдун жанындагы темирге туташтырыңыз.

3 -кадам:

Сүрөт
Сүрөт

3. ЖК экранды электрге, жерге жана TX пинине туташтырыңыз (1 -пин).

4 -кадам:

Сүрөт
Сүрөт

4. 7 баскычты нандын үстүнө буттары менен бөлүп коюңуз.

5 -кадам:

Сүрөт
Сүрөт

5. 10 кох резисторлорун темир жолдон GND пини менен туташтыргычтардын төмөнкү сол казыктарына туташтырыңыз.

6 -кадам:

Сүрөт
Сүрөт

6. Өткөргүч зымдарды кнопкалардын төмөнкү оң жактагы пини менен 5В темир жолунун ортосуна кой.

7 -кадам:

Сүрөт
Сүрөт

7. Өткөргүч зымдарды 6, андан кийин 8-13 түйрүктөрүнүн ортосуна жана резистор туташтырылган баскычка төөнөгүчтү коюңуз.

8 -кадам:

Сүрөт
Сүрөт

8. Андан кийин, Piezo спикериңизди панелдин үстүнө коюп, 7 -пинди электр шнуруна туташтырыңыз, андан кийин жерге 100 омдук резистор.

9 -кадам: Программалоо көрсөтмөлөрү

1. Обзор: Бул проект колдонуучудан дисплейдеги учурдагы убакытты жана ойготкуч коюлган убакытты орнотууну суранат. Жогоруда туташкан баскычтар ар бир убакытты коюу үчүн колдонулат. Солдон оңго, алар учурдагы саат, учурдагы мүнөт, учурдагы AM же PM, ойготкуч саат, ойготуу мүнөтү, ойготкуч AM же PM. Акыркы баскыч ойготкучтун үнүн басуу үчүн колдонулат.

10 -кадам:

2. Биз кылышыбыз керек болгон биринчи нерсе, биз колдоно турган өзгөрмөнү баштоо.

// Колдонула турган өзгөрмөлөрдү саат = 0; // Учурдагы убакыт үчүн саат int мүнөт = 0; //

Учурдагы убакыт үчүн мүнөт int second = 0; // Учурдагы убакыт үчүн экинчи

int hour_a = 0; int // Ойготкуч убактысы үчүн саат

minutes_a = 0; // Ойготуу убактысы үчүн мүнөт

bool am_pm = false; // AM/PM желегин которуштуруу. Жалган AM, чындык PM

bool am_pm_a = жалган; // AM/PM сигнал үчүн желекти которуштуруу. Жалган AM, чындык PM

int set_hr = 13; // Саатты коюу үчүн 13 -пинди колдонуңуз

int set_min = 12; // int мүнөтүн коюу үчүн 12 -пинди колдонуңуз

set_am_pm = 11; // Эртең мененки/кечки 11ди орнотуу үчүн пинди колдонуңуз

int set_hr_a = 10; // Ойготкучтун саатын коюу үчүн пин 10ду колдонуңуз int set_min_a = 9; // pin 9ду колдонуу int set_am_pm_a = 8 сигналынын мүнөтүн коюу үчүн; // Ойготкуч үчүн эртең мененки/кечки орнотуу үчүн 8 -пинди колдонуңуз

int баяндамачы = 7; // Speakerint тыныш үчүн колдонула турган пин = 6; // Динамикти токтотуу үчүн кадап коюңуз

bool alarm = false; // Коркунучтуу болуш үчүн которуштуруу үчүн желек

bool басылды = жалган; // Тынчтыкты көрсөткөн желек басылган жок

int cur_time = 0; // Учурдагы убакыт үчүн өзгөрмө

int etime = 0; // Өткөн убакыт үчүн өзгөрмө

11 -кадам:

3. Кийинки, биз ЖК экранды орнотуу жана колдонуучуга учурдагы убакытты коюуну айтуубуз керек. Бул бир гана жолу жасалышы керек болгондуктан, биз муну орнотуу тартибинде жасайбыз.

жараксыз орнотуу () {

// ЖК экранды орнотуу

Serial.begin (9600); // Сериалды 9600 байда баштоо

Serial.write (17); // Арткы жарыкты күйгүзүү

Serial.write (24); // Дисплейин күйгүзүү, курсор менен жана кирпик какпоо

Serial.write (12); // Экранды тазалаңыз

Serial.write (128); // Курсорду жогорку сол бурчка жылдыруу // PinModes pinMode орнотуу (set_hr, INPUT); pinMode (set_min, INPUT);

pinMode (set_am_pm, INPUT);

pinMode (set_hr_a, INPUT);

pinMode (set_min_a, INPUT);

pinMode (set_am_pm_a, INPUT);

pinMode (динамик, ЧЫГУУ);

pinMode (тынч, INPUT);

// Баштапкы кубаттуулукта, колдонуучу учурдагы убакытты коюңуз. Serial.print ("Учурдагы убакытты коюу"); кечигүү (2000);

Serial.write (12);

printTimes ();

cur_time = миллис (); // Учурдагы убакытты сактоо}

12 -кадам:

4. Андан кийин, цикл тартибинде, биз убакытты көзөмөлдөп турабыз жана баскычтын статусун окуйбуз, колдонуучу убакыттын бирөөсүн да коюп жатат.

void loop () {

// Убакытты сактоо

keepTime ();

// Коркуу убактысы келгенин текшериңиз!

if ((саат == саат_а && мүнөт == мүнөт_а &&! тынч) || ойготкуч) {тон (спикер, 2000, 500); // 500 мс үчүн динамикке 2000 Гц үнүн чыгаруу

кечигүү (500); // 500 м кечиктирүү эгерде (! Ойготкуч) {// Ойготкуч өчүк болсо, аны күйгүзүңүз

}

}

// Эгерде колдонуучу ойготкучту баскычты басуу менен басса, анда ойготкучту токтотуңуз (сигнал &&! Басылды && digitalRead (тынч)) {

сигнал = жалган;

тынчтанып = чындык; }

// Ойготкучту баштапкы абалга келтирүү, эгер (! Сигнал && басылган && мүнөт = = мүнөт_а) {quieted = false;

}

// Орнотулган казыктардын жогору көтөрүлүшүн текшериңиз, эгер андай болсо, тиешелүү маанини көбөйтүңүз (digitalRead (set_hr) && hour <12) {

саат ++;

printTimes ();

алып салуу ();

}

else if (digitalRead (set_hr) && hour == 12) {hour = 1;

printTimes ();

алып салуу ();

}

башка {}

if (digitalRead (set_min) && minutes <59) {

мүнөт ++; printTimes ();

алып салуу ();

}

else if (digitalRead (set_min) && minutes == 59) {minutes = 0;

printTimes ();

алып салуу ();

}

else {} if (digitalRead (set_am_pm) && am_pm) {

am_pm = жалган;

printTimes ();

алып салуу ();

}

else if (digitalRead (set_am_pm) &&! am_pm) {am_pm = true; printTimes ();

алып салуу ();

}

else {} if (digitalRead (set_hr_a) && hour_a <12) {

hour_a ++;

printTimes ();

алып салуу ();

}

else if (digitalRead (set_hr_a) && hour_a == 12) {hour_a = 1;

printTimes ();

алып салуу ();

}

else {} if (digitalRead (set_min_a) && minutes_a <59) {

minutes_a ++;

printTimes ();

алып салуу ();

}

else if (digitalRead (set_min) && minutes_a == 59) {minutes_a = 0;

printTimes ();

алып салуу ();

}

else {} if (digitalRead (set_am_pm_a) && am_pm_a) {

am_pm_a = жалган;

printTimes ();

алып салуу ();

}

else if (digitalRead (set_am_pm_a) &&! am_pm_a) {am_pm_a = true;

printTimes ();

алып салуу ();

}

башка {}

}

13 -кадам:

5. Бул жерде, мен жараткан бир нече подпрограмманы байкайсыз - debounce () жана printTimes (). Debounce () баскычтарды бир гана жолу окуубуз үчүн колдонулат. Arduino секундасына миңдеген жолу сканерлегендиктен, бул баскыч бир жолу окулат деп ойлогондо бир нече жолу басылган деп ойлошу мүмкүн. Debounce () баскыч бошотулмайынча программаны тоңдурат. printTimes () ЖК экранды жаңыртат, бирок бул бир нече буйрук болгондуктан, мен аларды бир жолу тердим, андан кийин убакыт программасы каалаган убакта чакан программаны чакыра алам.

// Кандайдыр бир баскыч басылып жатканда, бул функцияда калыңыз, андан кийин 250 мс кечиктириңиз.

жокко чыгаруу () {

while (digitalRead (set_hr) || digitalRead (set_min) ||

digitalRead (set_am_pm) || digitalRead (set_hr_a) ||

digitalRead (set_min_a) || digitalRead (set_am_pm_a)) {} кечигүү (250);

}

// Эгерде кандайдыр бир өзгөрүүлөр болсо, жаңыртылган убакытты басып чыгарат

жараксыз printTimes () {

Serial.write (12);

Serial.print ("Учурдагы убакыт:");

Serial.write (148);

эгер (саат <10) {

Serial.print ("0");

}

Serial.print (саат);

Serial.print (":");

эгер (мүнөт <10) {

Serial.print ("0");

}

Serial.print (мүнөт); Serial.print (":");

эгер (экинчи <10) {

Serial.print ("0");

}

Serial.print (экинчи);

эгер (am_pm) {

Serial.print ("PM");

}

башка {

Serial.print ("AM");

}

Serial.write (168);

Serial.print ("Ойготкучтар үчүн:");

Serial.write (188);

эгер (саат_а <10) {

Serial.print ("0");

}

Serial.print (hour_a);

Serial.print (":");

эгер (мүнөт_а <10) {

Serial.print ("0");

}

Serial.print (minutes_a);

эгер (am_pm_a) {

Serial.print ("PM");

}

башка {

Serial.print ("AM");

}

}

// Жараксыз убакыт параметрлерин көбөйтүү

keepTime () {

etime = millis () - cur_time;

if (etime> = 1000 && second <59) {

экинчи ++;

cur_time = миллис ();

printTimes ();

}

else if (etime> = 1000 && second == 59 && minutes <59) {second = 0;

мүнөт ++;

cur_time = миллис ();

printTimes ();

}

башка болсо (etime> = 1000 && second == 59 && minutes == 59 && hour <12) {

second = 0; мүнөт =

0; саат ++; cur_time =

миллис (); printTimes ();

}

башка болсо (etime> = 1000 && second == 59 && minutes == 59 && hour == 12) {

second = 0; мүнөт =

0; саат = 1; am_pm =

! am_pm;

cur_time = миллис ();

printTimes ();

}

башка {}

}

14 -кадам:

6. Болду!

Компиляция жана жүктөө, баары бүттү!

Сунушталууда: