Мазмұны:

Arduino оятқышының жобасы: 14 қадам
Arduino оятқышының жобасы: 14 қадам

Бейне: Arduino оятқышының жобасы: 14 қадам

Бейне: Arduino оятқышының жобасы: 14 қадам
Бейне: Уроки Ардуино #0 - что такое Arduino, куда подключаются датчики и как питать Ардуино 2024, Шілде
Anonim
Arduino дабыл сағатының жобасы
Arduino дабыл сағатының жобасы

Бұл жобада біз Arduino Uno көмегімен дабыл орнатылған уақыт пен уақытты көрсету үшін СКД экранын басқарамыз. Біз әр уақытты орнату үшін түймелерді қолданамыз.

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

  • Arduino Uno -
  • Нан тақтасы -
  • Jumper Wires (x13+) -
  • 10 кох резисторы (x4) -
  • СКД экраны -
  • 7 түйме-https://vilros.com/collections/raspberry-pi-acces…
  • Piezo динамигі -

1 -қадам: Қосылу нұсқаулары

Қосылу нұсқаулары
Қосылу нұсқаулары

1. Ардуинодағы 5В түйреуіштен өтпелі сымды нан тақтасындағы + рельстердің біріне жалғаңыз.

2 -қадам:

Кескін
Кескін

2. Ардуинодағы GND түйреуішінен өтпелі сымды нан тақтасында таңдаған + рельстің жанындағы рельстерге қосыңыз.

3 -қадам:

Кескін
Кескін

3. СКД экранын қуат көзіне, жерге және TX істігіне қосыңыз (түйреуіш 1).

4 -қадам:

Кескін
Кескін

4. Нан тақтасындағы 7 түймені аяқтары нан тақтасындағы саңылауға қойыңыз.

5 -қадам:

Кескін
Кескін

5. Түймешіктердің төменгі сол жақ түйреуіштеріне GND түйреуіші қосылған рельстен 10 кох резисторды қойыңыз.

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 // Дабыл уақыты үшін сағат

минут_а = 0; // Дабыл уақыты үшін минут

bool am_pm = жалған; // 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; // int set_min_a = 9 дабылының сағатын орнату үшін 10 түйреуішті пайдаланыңыз; // int set_am_pm_a = 8 дабылы үшін минутты орнату үшін түйреуішті 9 пайдаланыңыз; // Дабыл үшін таңғы/кешті орнату үшін 8 түйреуішті пайдаланыңыз

int динамигі = 7; // Динамикте тыныштық үшін қолданылатын түйреуіш = 6; // Динамикті тоқтату үшін бекітіңіз

bool дабыл = жалған; // Үрей туғызу үшін жалау

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 (динамик, OUTPUT);

pinMode (тыныш, INPUT);

// Бастапқы қуатта пайдаланушының ағымдағы уақытын орнатыңыз. Serial.print («Ағымдағы уақытты орнату»); кешіктіру (2000);

Serial.write (12);

printTimes ();

cur_time = миллис (); // Ағымдағы уақытты сақтау}

12 -қадам:

4. Содан кейін, цикл режимінде біз уақытты бақылап отырамыз және пайдаланушының уақыттың біреуін орнатқанын білу үшін түймелердің күйін оқимыз.

void loop () {

// Уақытты сақтаңыз

keepTime ();

// Дабыл беру уақыты келгенін тексеріңіз!

if ((сағат == hour_a && минут == минут_а &&! тыныш) || дабыл) {тон (динамик, 2000, 500); // Динамикке 500 мс үшін 2000 Гц дыбысты шығару

кешіктіру (500); // Кешіктіру 500 мс болса (! Дабыл) {// Егер дабыл өшірулі болса, оны қосыңыз

}

}

// Егер пайдаланушы дыбысты басу арқылы дабылды өшірсе, дабылды тоқтатыңыз, егер (дабыл &&! Тыныштандырылған && digitalRead (тыныш)) {

дабыл = жалған;

тыныштандырылған = ақиқат; }

// Дабылды қалпына келтіріңіз, егер (! Дабыл && тынышталды && минут! = Минут_а) {тыныштандырылған = жалған;

}

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

сағат ++;

printTimes ();

шығару ();

}

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

printTimes ();

шығару ();

}

басқа {}

if (digitalRead (set_min) && минут <59) {

минут ++; printTimes ();

шығару ();

}

else if (digitalRead (set_min) && minutes == 59) {минут = 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) {

минут_а ++;

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 («:»);

егер (минут <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 (минут_а);

егер (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) {

секунд = 0; минут =

0; сағат ++; cur_time =

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

}

әйтпесе (etime> = 1000 && секунд == 59 && минут == 59 && сағат == 12) {

секунд = 0; минут =

0; сағат = 1; am_pm =

! am_pm;

cur_time = миллис ();

printTimes ();

}

басқа {}

}

14 -қадам:

6. Міне!

Құрастырыңыз және жүктеңіз, бәрі аяқталды!

Ұсынылған: