Мазмуну:
- 1 -кадам: Бул долбоордо колдонулган нерселер
- 2 -кадам: Аппараттык туташуу
- 3 -кадам: Программалык камсыздоо
- 4 -кадам: операция
Video: Christmas Music Cheer Light: 4 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:41
Рождество майрамы менен! Сиз менен баарлаша турган жаңы жылдык балаты болгуңуз келеби?
1 -кадам: Бул долбоордо колдонулган нерселер
Аппараттык компоненттер
- Seeeduino V4.2
- Негизги калкан V2
- Grove - жөнгө салынуучу PIR Motion Sensor
- Grove - Үндүн сенсору
- Grove - WS2813 RGB LED тилкеси суу өткөрбөйт - 60 LED/m - 1m
Программалык камсыздоо жана онлайн кызматтары
Arduino IDE
2 -кадам: Аппараттык туташуу
PIR Sensor, Loudness Sensor жана LED тилкесин Base Shieldдин D2, A0 жана D6 портуна өзүнчө туташтырыңыз. Seeduino үчүн Base Shield плагин, баары жасалды.
3 -кадам: Программалык камсыздоо
Төмөнкү китепканалар программалоодон мурун орнотулушу керек, аларды жүктөп алып, Arduino IDEге кол менен импорттоңуз:
- Led_Strip
- MsTimer2
- Arduino_Vector
Кодду кыскаыраак кылуу үчүн, биз аны пакеттедик. CheerLight классы - бул долбоордун колдонмо классы.
класс колдонмосу:: CheerLight
: коомдук тиркеме:: интерфейс:: IApplication {public: void setup (void); боштук цикл (боштук); жараксыз setPIRSensorPin (uint8_t пин); жараксыз setLoudnessSensorPin (uint8_t пин); жараксыз чараSensors (боштук); void changeAnimation (void * args); void changeSpeed (void * args); void changeColor (void * args); статикалык колдонмо:: CheerLight * getInstance (жараксыз); корголгон: айдоочу:: LEDStrip _ledStrip; айдоочу:: PIRSensor _pirSensor; айдоочу:: LoudnessSensor _loudnessSensor; uint8_t _animation; middleware:: Delegate _detectedDelegate; middleware:: Delegate _absoluteLoudnessDelegate; middleware:: Delegate _relatіLoudnessDelegate; 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 (*pFunc) (void) = & A:: func1;
компилятор бир түрдөгү ката жөнүндө кабарлайт, бул жерде туура мисал:
void (A::*pFunc) (void) = & A:: func1;
Биз ошол ыкманы чакыруу үчүн колдонууга аракет кылганыбызда, кайра ката кетиребиз. Бул катанын себеби, объект-метод бир объект тарабынан чакырылышы керек. Ошентип, биз аны чакыруу үчүн объект түзөбүз:
A a;
a.*pFunc ();
Бул жолу көйгөй жок. Ошентип, Delegate.hде Delegate классы бар.
шаблон
класс орто программасы:: Делегат: коомдук орто программалык камсыздоо:: интерфейс:: IDelegate {коомдук: Делегат (T *объектиси, жараксыздыгы (T:: *ыкмасы) (жараксыз *)); void invoke (void * args); корголгон: T * _объект; жараксыз (T:: *_ ыкмасы) (жараксыз *); }; шаблондун ортоңку программасы:: Делегат:: Делегат (T *объектиси, жараксыздыгы (T:: *методу) (жараксыздыгы *)): _объект (объект), _ метод (метод) {} шаблон киргизилген боштуктун орто программасы:: Делегат:: чакыруу (void * args) {(_object-> * _ метод) (args); }
Делегат класс шаблон класс болгондуктан, Делегаттын Делегаттан айырмасы бар дегенди билдирет, аларды кантип бирдей типтеги көрсөткүч менен көрсөтүүгө болот? Жооп интерфейс, ошондуктан IDelegate.hде IDelegate интерфейси бар.
класс орто программасы:: интерфейс:: IDelegate {
коомдук: виртуалдык боштукту чакыруу (void * args) = 0; };
PIR Sensor жана Loudness Sensor классында Делегаттардын көрсөткүчүн сактоо үчүн колдонулган _delegates деген өзгөрмөсү бар жана _delegates -те бардык делегаттарды чакыруу үчүн колдонулган invokeAllDelegates () деген методу бар, бул чара () ыкмасы деп аталат.
ЭСКЕРТҮҮ: ChangeAnimation (), changeSpeed () жана changeColor () сыяктуу өкүлчүлүк ыкмалары timer2 үзгүлтүккө чакырылат, андыктан delay () же башка үзгүлтүккө негизделген функцияны колдонбоңуз.
Сунушталууда:
Жөнөкөй Light-Up Ugly Christmas свитери: 9 кадам (Сүрөттөр менен)
Жөнөкөй Light-Up чиркин жаңы жылдык свитер: Бул жыл сайын болот … Сизге " чиркин майрамдык свитер " жана сиз алдын ала пландаштырууну унутуп калдыңыз. Ооба, бул жылы сиз ийгиликке жетесиз! Сиздин кечигүүңүз сиздин кулашыңыз болбойт. Биз сизге кантип жөнөкөй Light-Up Ugly Christmas свитер жасоону көрсөтөбүз
LED Christmas Light Strip: 3 кадам
LED Christmas Light Strip: Мен Рождество майрамдары үчүн кызыктуу жана майрамдык Arduino долбоорун түзгүм келди, ошондуктан мен өзүмдүн LED лента чырактарын түзүүнү чечтим. Бул долбоорго ширетүүчү машина керек, ошондуктан муну эстен чыгарбаңыз
Hall Effect Sensor: Christmas Music Box: 4 Steps
Hall Effect Sensor: Christmas Music Box: Бул бир жолу ачылган музыканы ойнотуучу музыкалык куту (видеону көрүңүз!). Бул өзгөчө адамга белектериңизди ороонун эң сонун, өзгөчө жана уникалдуу жолу! Магнит талаасынын жоктугунан капкактын ачылгандыгын текшерүү үчүн холл эффектинин сенсорун колдонот
Arduino Christmas Cheer!: 5 кадам (Сүрөттөр менен)
Arduino Christmas Cheer! Бул долбоордо биз ар кандай Рождестволук ырларды ырдай турган жана балаты менен бирге жарык бере турган жаңы жылдык балаты жасамакчыбыз
$ 20 Holiday Cheer Box: 5 кадам (Сүрөттөр менен)
$ 20 Holiday Cheer Box: Бул долбоор кнопка басылганда туш келди добушту ойнотуучу кутуну кантип курууну көрсөтөт. Бул учурда, мен аны стратегиялык түрдө каникул учурунда офистин айланасына жайгаштыра турган кутуну куруу үчүн колдондум. Адамдар баскычты басканда, алар