Агуулгын хүснэгт:

Христийн Мэндэлсний Баярын хөгжмийн баяр хөөр: 4 алхам
Христийн Мэндэлсний Баярын хөгжмийн баяр хөөр: 4 алхам

Видео: Христийн Мэндэлсний Баярын хөгжмийн баяр хөөр: 4 алхам

Видео: Христийн Мэндэлсний Баярын хөгжмийн баяр хөөр: 4 алхам
Видео: Баярцэцэг-Зул сарын бэлэг (үгтэй) 2024, Арваннэгдүгээр
Anonim
Зул сарын баярын хөгжим
Зул сарын баярын хөгжим

Зул сарын баярын мэнд! Тантай харилцах зул сарын гацуур модтой болохыг хүсч байна уу?

Алхам 1: Энэхүү төсөлд ашигласан зүйлс

Тоног төхөөрөмжийн бүрэлдэхүүн хэсгүүд

  • Seeeduino V4.2
  • Үндсэн бамбай V2
  • Grove - Тохируулах боломжтой PIR хөдөлгөөн мэдрэгч
  • Гроув - Чанга дууны мэдрэгч
  • Grove - WS2813 RGB LED зурвас ус нэвтрүүлдэггүй - 60 LED/м - 1м

Програм хангамж, онлайн үйлчилгээ

Arduino IDE

Алхам 2: Тоног төхөөрөмжийн холболт

Тоног төхөөрөмжийн холболт
Тоног төхөөрөмжийн холболт

PIR Sensor, Loudness Sensor, LED зурвасыг Base Shield -ийн D2, A0, D6 портод тус тусад нь холбоно уу. Base Shield -ийг Seeduino руу залгаарай, бүгдийг нь хийлээ.

Алхам 3: Програм хангамжийн програмчлал

Дараахь номын санг програмчлахаас өмнө суулгах шаардлагатай бөгөөд тэдгээрийг Arduino IDE руу гараар татаж аваад импортлоорой.

  • Led_Strip
  • Хатагтай Таймер2
  • Arduino_Vector

Кодыг илүү товч болгохын тулд бид үүнийг багцалсан. CheerLight анги бол энэ төслийн хэрэглээний анги юм.

ангийн програм:: CheerLight

: нийтийн програм:: интерфейс:: IApplication {public: void setup (void); хоосон тойрог (хоосон); хүчингүй setPIRSensorPin (uint8_t зүү); хүчингүй setLoudnessSensorPin (uint8_t зүү); Мэдрэгч (хүчингүй); void changeAnimation (void * args); void changeSpeed (void * args); void changeColor (void * args); статик програм:: CheerLight * getInstance (хүчингүй); хамгаалагдсан: драйвер:: LEDStrip _ledStrip; жолооч:: PIRSensor _pirSensor; жолооч:: LoudnessSensor _loudnessSensor; uint8_t _animation; дунд програм:: Төлөөлөгч _detectedDelegate; дунд програм:: Төлөөлөгч _absoluteLoudnessDelegate; дундын програм хангамж:: Төлөөлөгч _relationLoudnessDelegate; CheerLight (хүчингүй); статик програм:: CheerLight _instance; };

CheerLight ангийг Singleton Patterns зохион бүтээсэн бөгөөд энэ нь зөвхөн ганцхан жишээ байдаг тул та CheerLight:: getInstance () руу дуудаж болно. Хэрэв таны мэдрэгчийн холболт нь Тоног төхөөрөмжийн холболтоос ялгаатай бол та тэдгээрийг setPIRSensorPin () болон setLoudnessSensorPin () аргуудыг дуудаж өөрчлөх боломжтой.

Зураг
Зураг

Мэдрэгчийг цаг тухайд нь хэмжихийн тулд хэмжигч таслах горимд хэмжихSensors () аргыг дуудахыг зөвлөж байна, гэхдээ changeAnimation (), changeSpeed () эсвэл changeColor () аргуудыг гараар дуудах шаардлагагүй. Мэдрэгчийг хэмжих үед тэднийг Төлөөлөгчөөр дамжуулан дуудах болно.

Төлөөлөгч гэж юу вэ?

Бидний мэдэж байгаагаар бид функцийн заагчийг зарлаж, C дээрх функцийг зааж өгч болно.

void func1 (хүчингүй);

void (*pFunc) (void) = func1;

мөн үүнийг зааж өгсөн функцийг дуудахад ашиглана уу

pFunc ();

Гэхдээ хэрэв та дараах кодыг хөрвүүлэхийг оролдвол C ++ дээр ялгаа бий.

А анги {

нийтийн: void func1 (void); }; void (*pFunc) (void) = & A:: func1;

хөрвүүлэгч нь хөрвүүлэлтийн алдааны талаар мэдээлэх болно, энд зөв жишээ байна:

void (A::*pFunc) (void) = & A:: func1;

Бид энэ аргыг дуудахын тулд үүнийг ашиглах гэж оролдоход дахин алдаа гарна. Энэ алдааны шалтгаан нь объект-аргыг объектоор дуудах ёстой. Тиймээс бид үүнийг дуудах объектыг бий болгодог:

А а;

a.*pFunc ();

Энэ удаад ямар ч асуудалгүй. Тиймээс Delegate.h -д Delegate анги байдаг.

загвар

class middleware:: Delegate: public middleware:: interface:: IDelegate {public: Delegate (T *object, void (T:: *method) (void *)); void invoke (void * args); хамгаалагдсан: T * _объект; хүчингүй (T:: *_ арга) (хүчингүй *); }; template inline middleware:: Delegate:: Delegate (T *object, void (T:: *method) (void *)): _object (object), _method (method) {} template inline void middleware:: Delegate:: invoke (void * args) {(_object-> * _ арга) (args); }

Төлөөлөгчийн анги бол загвар анги бөгөөд Төлөөлөгч нь Төлөөлөгчийн ялгаа гэсэн үг бөгөөд тэдгээрийг ижил төрлийн заагчаар зааж өгөхийн тулд яах вэ? Хариулт нь интерфэйс тул IDelegate.h дээр IDelegate интерфэйс байдаг.

дунд шатны програм хангамж:: интерфейс:: IDelegate {

public: virtual void invoke (void * args) = 0; };

PIR Sensor and Loudness Sensor -ийн ангид Төлөөлөгчдийн заагчийг хадгалахад ашигладаг _delegates нэртэй хувьсагч байдаг бөгөөд бүх төлөөлөгчдийг _delegates -д дуудахад ашигладаг invokeAllDelegates () нэртэй арга байдаг бөгөөд үүнийг tədbir () арга гэж нэрлэнэ.

ТАЙЛБАР: changeAnimation (), changeSpeed (), changeColor () гэх мэт төлөөлөх аргуудыг timer2 тасалдалд дуудах тул түүнд delay () эсвэл тасалдалд суурилсан бусад функцийг БИДЭЛДЭХ хэрэггүй.

Зөвлөмж болгож буй: