Arduino RGB жарық диодты түймені біркелкі қосу. Потенциометр көмегімен жарық диодты жарықтылықты басқару. Arduino үшін бағдарламаның сипаттамасы

Бұл тәжірибеде біз бір түймемен жарықдиодты жарықтандырудың бір бөлігін қосамыз, екіншісімен оны азайтамыз.

ТӘЖІРИБЕ ҮШІН БӨЛІМДЕР ТІЗІМІ

- 1 Arduino Uno тақтасы;

- 1 дәнекерлеу тақтасы;

- 2 сағат түймесі;

- номиналды мәні 220 Ом болатын 1 резистор;

- 1 жарық диоды;

- 7 еркек-ер сым.

ТҰХТАМА ДИАГРАММАСЫ

БРАДБОРДАҒЫ ДИАГРАММА

НАЗАР АУДАРЫҢЫЗ

  • Алдыңғы эксперименттегі схеманы қайта өңдеп жатсаңыз, бұл жолы жарық диодты PWM қолдайтын портқа қосу керек екенін ескеріңіз.

Эскиз

Arduino IDE үшін эскизді жүктеп алыңыз
#PLUS_BUTTON_PIN 2-ні анықтау #MINUS_BUTTON_PIN 3-ны анықтау #LED_PIN 9 анықтау int жарықтығы = 100; логикалық plusUp = шын; логикалық минусUp = шын; void setup() ( pinMode(LED_PIN, OUTPUT); pinMode(PLUS_BUTTON_PIN, INPUT_PULLUP); pinMode(MINUS_BUTTON_PIN, INPUT_PULLUP); ) void loop() (analogWrite(LED_PIN, жарықтық); //p функциясын басу арқылы жауап береміз. = handleClick(PLUS_BUTTON_PIN, plusUp, +35); minusUp = handleClick(MINUS_BUTTON_PIN, minusUp, -35); ) // 3 параметрі бар жеке функция: түймесі бар PIN нөмірі // (buttonPin), тексеру алдындағы күй (wasUp) ) және түймені басқан кезде жарықтық // градациясы (дельта). Функция // (ағылш. қайтару) түйменің жаңа, ағымдағы күйін қайтарады. ); isUp = digitalRead(buttonPin); // егер шерту болса, жарықтықты 0-ден 255-ке өзгертіңіз, егер (!isUp) жарықтық = шектеу (жарықтық + дельта, 0, 255); ) қайтару isUp; // қайтару мәнді қоңырау шалушы кодына қайтару)

КОДЕКТІҢ ТҮСІНДІКТЕРІ

  • Біз тек кірістірілген функцияларды ғана емес, сонымен қатар өзімізді де жасай аламыз. Бұл кодтың әртүрлі орындарында бірдей әрекеттерді қайталау қажет болғанда немесе, мысалы, әртүрлі деректерде бірдей әрекеттерді орындау қажет болғанда, бұл ақталады, бұл жағдайда: 2 және 3 сандық порттардан сигналды өңдеу.
  • Басқа функциялар кодынан тыс кодтың кез келген жерінде өз функцияларыңызды анықтауға болады. Біздің мысалда біз кейін функцияны анықтадық цикл .
  • Өз функциямызды анықтау үшін бізге қажет:
    • Қай деректер түрін қайтаратынын хабарлаңыз. Біздің жағдайда солай логикалық. Егер функция тек кейбір әрекеттерді орындаса және ешбір мәнді қайтармаса, кілт сөзді пайдаланыңыз жарамсыз
    • Функцияға атау – идентификаторды тағайындаңыз. Мұнда айнымалылар мен тұрақтыларды атау кезіндегідей ережелер қолданылады. Функциялар бір стильде аталады Айнымалылар сияқты .
    • Жақшаның ішінде әрқайсысының түрін көрсете отырып, функцияға берілген параметрлерді тізіңіз. Бұл жаңадан жасалған функцияның ішінде және тек оның ішінде көрінетін айнымалылардың мәлімдемесі. Мысалы, егер бұл экспериментте біз қол жеткізуге тырысамыз болдынемесе isUpбастап цикл()Біз компилятордан қате туралы хабар аламыз. Сол сияқты, айнымалы мәндер де жарияланған цикл, басқа функцияларға көрінбейді, бірақ олардың мәндерін параметр ретінде беруге болады.
    • Бұйра жақшалар жұбының арасына функция орындайтын кодты жазыңыз
    • Егер функция кейбір мәнді қайтаруы керек болса, кілт сөзді пайдаланыңыз қайтаруқайтарылатын мәнді көрсетіңіз. Бұл мән біз жариялаған типте болуы керек
  • Жаһандық айнымалылар деп аталатындар, яғни. Кез келген функциядан қол жеткізуге болатын айнымалылар әдетте бағдарламаның басында жарияланады. Біздің жағдайда бұл жарықтық .
  • Біз жасаған функцияның ішінде өңдеуді басыңызДәл осындай жағдай эксперименттегідей болады.
  • Жарықтықты арттыру қадамы 35 болғандықтан, түймелердің біреуін қатарынан сегіз рет басқаннан кейін өрнектің мәні жарықтық + дельтаинтервалдан тыс шығады . Функцияны пайдалану шектеуайнымалы үшін рұқсат етілген мәндерді шектейміз жарықтықанықталған интервал шекаралары.
  • Өрнекте plusUp = handleClick(PLUS_BUTTON_) PIN , плюсЖоғары, +35)айнымалыға қол жеткіземіз plusUpекі рет. Өйткені = оң операндтың мәнін солға қояды, алдымен не қайтаратынын есептейді өңдеуді басыңыз. Сондықтан біз оған бергенде plusUpпараметр ретінде соңғы қоңырау кезінде есептелген ескі мәнге ие болады өңдеуді басыңыз .
  • Ішінде өңдеуді басыңызбіз жаңа жарық диодты жарықтылық мәнін есептеп, оны жаһандық айнымалыға жазамыз жарықтық, ол әрбір итерацияда циклжай ғана өтті analogWrite .

ӨЗІҢДІ СЫНАУҒА АРНАЛҒАН СҰРАҚТАР

  1. Негізгі сөз нені білдіреді? жарамсыз ?
  2. Тағайындау операторының әр түрлі жағынан бір айнымалы айтылғанда бағдарлама қалай әрекет етеді = ?

ТӘУЕЛСІЗ ШЕШУ ҮШІН МІНДЕТТЕР

  1. Жарықтықты өзгерту қадамы бір жерде реттелетін етіп кодты өзгертіңіз.
  2. Басқа функция жасаңыз және кодты бір функция пернелерді басу үшін жауап беретіндей етіп қайта өңдеңіз, ал екіншісі жарық диоды жарықтығын есептеуге және оны қалпына келтіруге жауап береді. analogWrite .

Енді көп түсті жарықдиодты қарастырайық, ол жиі аббревиатурада аталады: RGB жарық диоды. RGB – қысқартылған сөз: Қызыл – қызыл, Жасыл – жасыл, Көк – көк. Яғни, бұл құрылғының ішінде үш бөлек жарықдиодты шамдар орналастырылған. Түріне байланысты RGB жарық диоды жалпы катодты немесе жалпы анодты болуы мүмкін.

1. Түстерді араластыру

Неліктен RGB жарық диоды үш әдеттегіден жақсы? Мұның бәрі біздің көзқарасымыздың бір-біріне жақын орналасқан әртүрлі көздерден түсетін жарықты араластыру қабілеті туралы. Мысалы, егер көк және қызыл жарықдиодты бір-бірінің қасына қойсақ, онда бірнеше метр қашықтықта олардың жарқырауы біріктіріліп, көзге бір күлгін нүкте көрінеді. Ал егер біз де жасыл қоссақ, нүкте бізге ақ болып көрінеді. Компьютер мониторлары, теледидарлар және сыртқы экрандар дәл осылай жұмыс істейді. Теледидар матрицасы әртүрлі түсті жеке нүктелерден тұрады. Егер сіз ұлғайтқыш әйнекті алып, оны қосылған мониторға қарасаңыз, бұл нүктелерді оңай көре аласыз. Бірақ сыртқы экранда нүктелер өте тығыз орналастырылмаған, сондықтан оларды жалаңаш көзбен ажыратуға болады. Бірақ бірнеше ондаған метр қашықтықтан бұл нүктелер ерекшеленбейді. Түрлі түсті нүктелер бір-біріне неғұрлым жақын болса, көзге бұл түстерді араластыру үшін соғұрлым аз қашықтық қажет екендігі белгілі болды. Осыдан қорытынды: үш бөлек жарықдиодты шамдардан айырмашылығы, RGB жарықдиодты түстердің араласуы 30-70 см қашықтықта байқалады.Айтпақшы, күңгірт линзасы бар RGB жарықдиодты одан да жақсырақ жұмыс істейді.

2. RGB жарық диодты Arduino-ға қосу

Көп түсті жарық диоды үш тұрақты жарықдиодтан тұратындықтан, біз оларды бөлек қосамыз. Әрбір жарық диоды өз істікшесіне қосылған және өзінің жеке резисторы бар. Бұл оқулықта біз жалпы катодты RGB жарық диодты қолданамыз, сондықтан жерге бір ғана сым болады. Схематикалық диаграмма
Орналасу көрінісі

3. RGB жарық диодты басқаруға арналған бағдарлама

Құрастырайық қарапайым бағдарлама, ол үш түстің әрқайсысын кезекпен жанады. const байт rPin = 3; const байт gPin = 5; const байт bPin = 6; void setup() ( pinMode(rPin, OUTPUT); pinMode(gPin, OUTPUT); pinMode(bPin, OUTPUT); ) void loop() ( // көк өшіріңіз, қызыл түсті digitalWrite(bPin, LOW) қосыңыз); digitalWrite( rPin, HIGH); delay(500); // қызылды өшіріңіз, жасылды қосыңыз digitalWrite(rPin, LOW); digitalWrite(gPin, HIGH); delay(500); // жасыл өшіріңіз, көк digitalWrite(gPin) қосыңыз , LOW); digitalWrite( bPin, HIGH); delay(500); ) Бағдарламаны Arduino-ға жүктеп, нәтижені бақылаңыз. Сіздің браузеріңіз болмайдыбейне тегін қолдау. Бағдарламаны сәл оңтайландырайық: rPin, gPin және bPin айнымалыларының орнына массив қолданамыз. Бұл бізге келесі тапсырмаларда көмектеседі. const байт rgbPins = (3,5,6); void setup() ( for(байт i=0; i<3; i++) pinMode(rgbPins[i], OUTPUT); } void loop() { digitalWrite(rgbPins, LOW); digitalWrite(rgbPins, HIGH); delay(500); digitalWrite(rgbPins, LOW); digitalWrite(rgbPins, HIGH); delay(500); digitalWrite(rgbPins, LOW); digitalWrite(rgbPins, HIGH); delay(500); }

4. Кемпірқосақтың жеті түсі

Енді бір уақытта екі түсті жарықтандыруға тырысайық. Түстердің келесі тізбегін бағдарламалайық:
  • қызыл
  • қызыл + жасыл = сары
  • жасыл
  • жасыл + көк = ашық көк
  • көк
  • көк + қызыл = күлгін
Қарапайымдылық үшін қызғылт сары түсті алып тастадық. Сонымен, кемпірқосақтың алты түсі болып шықты 🙂 const байт rgbPins = (3,5,6); const байт кемпірқосақ = ( (1,0,0), // қызыл (1,1,0), // сары (0,1,0), // жасыл (0,1,1), // көк ( 0,0,1), // көк (1,0,1), // күлгін ); void setup() ( for(байт i=0; i<3; i++) pinMode(rgbPins[i], OUTPUT); } void loop() { // перебираем все шесть цветов for(int i=0; i<6; i++){ // перебираем три компоненты каждого из шести цветов for(int k=0; k<3; k++){ digitalWrite(rgbPins[k], rainbow[i][k]); } delay(1000); } } В результате работы программы получается: Your browser does not support the video tag.

5. Түстің біркелкі өзгеруі

RGB жарық диодты 3, 5 және 6 түйреуіштерге жалғанғанымыз бекер емес. Өздеріңіз білетіндей, бұл түйреуіштер әртүрлі жұмыс циклдерінің PWM сигналын жасауға мүмкіндік береді. Басқаша айтқанда, біз жарық диодты қосу немесе өшіріп қана қоймай, ондағы кернеу деңгейін басқара аламыз. Бұл функция арқылы орындалады analogWrite. Біздің жарық диодты кемпірқосақтың түстері арасында кенеттен емес, тегіс ауысатындай етіп жасайық. const байт rgbPins = (3,5,6); int dim = 1; void setup() ( for(байт i=0; i<3; i++){ pinMode(rgbPins[i], OUTPUT); } // начальное состояние - горит красный цвет analogWrite(rgbPins, 255); analogWrite(rgbPins, 0); analogWrite(rgbPins, 0); } void loop() { // гасим красный, параллельно разжигаем зеленый for(int i=255; i>=0; i--)( analogWrite(rgbPins, i/dim); analogWrite(rgbPins, (255-i)/dim); delay(10); ) // жасыл түсті өшіру, көк түсті қатар қосу (int i=255) ; i> =0; i--)( analogWrite(rgbPins, i/dim); analogWrite(rgbPins, (255-i)/dim); delay(10); ) // көкті өшіру, қызыл түсті қатар қосу for(int i=255 ; i>=0; i--)( analogWrite(rgbPins, i/dim); analogWrite(rgbPins, (255-i)/dim); delay(10); ) ) Күңгірт айнымалы мынаны анықтайды жарқыраудың жарықтығы. Күңгірт = 1 кезінде бізде максималды жарықтық бар. Бағдарламаны Arduino-ға жүктеңіз. Браузеріңіз бейне тегін қолдамайды.

Тапсырмалар

  1. Температура индикаторы. Тізбекке термисторды қосып, оны аналогтық кіріске қосамыз. Жарық диодты термистордың температурасына байланысты түсін өзгерту керек. Температура неғұрлым төмен болса, түс соғұрлым көгілдір болады, ал температура неғұрлым жоғары болса, соғұрлым қызыл болады.
  2. Реттегіші бар RGB шамы. Тізбекке үш айнымалы резисторды қосып, оларды аналогтық кірістерге қосамыз. Бағдарлама резистор мәндерін үздіксіз оқып, сәйкес RGB жарықдиодты компонентінің түсін өзгертуі керек.

Бұл мысалда әртүрлі кедергілері бар резисторларды пайдаланып, жарықдиодты жарықтылықты қалай өзгерту керектігін үйренесіз.

Бұл мысал үшін сізге қажет

1 жарық диоды диаметрі 5 мм

1 270 Ом резистор (қызыл, күлгін, қоңыр)

1 470 Ом резистор (сары, күлгін, қоңыр)

1 2,2 кОм резистор (қызыл, қызыл, қызыл)

1 10 кОм резистор (қоңыр, қара, қызғылт сары)

Жарықдиодты шамдар - жалпы ақпарат

Жарық диодты шамдар әртүрлі индикаторларға арналған құрылғыларда жақсы қызмет етеді. Олар аз электр қуатын тұтынады және ұзаққа созылады.

Бұл мысалда диаметрі 5 мм болатын ең көп таралған жарықдиодты шамдарды қолданамыз. Сондай-ақ диаметрі 3 миллиметрлік жарықдиодты шамдар және диаметрі 10 мм үлкен жарықдиодты шамдар жиі кездеседі.

Жарық диодты батареяға немесе кернеу көзіне тікелей қосу ұсынылмайды. Біріншіден, алдымен светодиодтың теріс және оң аяқтары қай жерде екенін анықтау керек. Екіншіден, токты шектейтін резисторларды пайдалану қажет, әйтпесе жарық диоды өте тез жанып кетеді.

Егер сіз жарық диоды бар резисторды қолданбасаңыз, жарық диоды өте тез істен шығады, себебі ол арқылы тым көп ток өтеді. Нәтижесінде жарық диоды қызады және контактіні тудыратын жарық жойылады.

Жарық диодты шамның оң және теріс аяқтарын ажыратудың екі жолы бар.

Біріншісі - оң аяғы ұзағырақ.

Екіншісі - диодтың корпусына кірген кезде теріс аяқ қосқышында тегіс жиек бар.

Ұзын аяқтың жиегі тегіс жарықдиодты кездестірсеңіз, ұзын аяқ әлі де оң болады.

Резисторлар – жалпы ақпарат

Қарсыласу - қарсылық (ағылшынша)

Аты айтып тұрғандай, резисторлар электр тогының ағынына қарсы тұрады. Резистордың мәні (ом) неғұрлым жоғары болса, соғұрлым кедергі үлкен болады және ол орнатылған тізбек арқылы аз ток өтеді. Біз резисторлардың бұл қасиетін жарық диоды арқылы өтетін токты және осылайша оның жарықтығын реттеу үшін қолданамыз.

Бірақ алдымен резисторлар туралы аздап сөйлесейік.

Қарсылық өлшенетін өлшем бірліктері Ом болып табылады, олар көптеген көздерде грек әрпімен белгіленеді Ω - Omega Ом қарсылықтың шағын мәні (тізбекте дерлік байқалмайды) болғандықтан, біз жиі кОм - килоом сияқты бірліктермен жұмыс істейміз. (1000 Ом) және МОм мегаом (1 000 000 Ом).

Бұл мысалда біз төрт түрлі мәні бар резисторларды қолданамыз: 270 Ом, 470 Ом, 2,2 кОм және 10 кОм. Бұл резисторлардың өлшемдері бірдей. Түсі де. Оларды ерекшелендіретін жалғыз нәрсе - түсті жолақтар. Дәл осы жолақтардан резисторлардың мәні визуалды түрде анықталады.

Үш түсті жолағы және соңғы алтын жолағы бар резисторлар үшін келесі сәйкестіктер жұмыс істейді:

Қоңыр 1

Қызыл 2

Апельсин 3

Жасыл 5

Күлгін 7

Алғашқы екі жолақ алғашқы 2 сандық мәнді көрсетеді, сондықтан қызыл, күлгін түс 2, 7 дегенді білдіреді. Келесі жолақ алғашқы екі саннан кейін қойылуы тиіс нөлдер саны. Яғни, егер үшінші жолақ қоңыр болса, жоғарыдағы фотосуреттегідей, бір нөл болады және резистордың мәні 270 Ом болады.

Қоңыр, қара, қызғылт сары жолақтары бар резистор: 10 және үш нөл, сондықтан 10000 Ом. Яғни, 10 кОм.

Жарықдиодты шамдардан айырмашылығы, резисторлардың оң және теріс аяқтары жоқ. Оларды қуат көзіне/жерге қосу үшін қай аяқты пайдаланатыныңыз маңызды емес.

Қосылу диаграммасы

Төмендегі схемаға сәйкес қосылыңыз:

Arduino-да перифериялық құрылғыларды қуаттандыруға арналған 5 В істікшесі бар. Біз оны жарықдиодты және резисторды қуаттандыру үшін қолданамыз. Сізге тақтадан басқа ештеңе қажет емес, оны USB арқылы компьютерге қосыңыз.

270 Ом резистормен жарық диоды өте жарқын жануы керек. 270 Ом резисторды 470 Ом резисторға ауыстырсаңыз, жарық диоды соншалықты жарқырамайды. 2,2 кОм резистормен жарық диоды аздап сөнуі керек. Өйткені, 10 кОм резистормен жарықдиодты шам әрең көрінеді. Соңғы қадамдағы айырмашылықты көру үшін оны қосқыш ретінде пайдаланып, қызыл адаптерді шығарып алу керек болуы мүмкін. Сонда сіз жарықтықтағы айырмашылықты көре аласыз.

Айтпақшы, сіз бұл экспериментті шамдар өшірілген кезде жасай аласыз.

Резисторларды орнатудың әртүрлі нұсқалары

Резистордың бір аяғына 5 В қосылған кезде, резистордың екінші аяғы жарық диодтың оң аяғына, ал жарық диодының екінші аяғы жерге қосылады. Төменде көрсетілгендей резисторды жарық диодының артында болатындай етіп жылжытсақ, жарық диоды әлі де жанады.

Жарық диодты жыпылықтау

Біз жарық диодты Arduino шығысына қоса аламыз. Төменде көрсетілгендей қызыл сымды 5 В қуат түйреуішінен D13-ке жылжытыңыз.

Енді біз қарастырған «Жыпылықтау» мысалын жүктеп алыңыз. Екі жарық диоды - кірістірілген және сіз орнатқан сыртқы - жыпылықтай бастағанын ескеріңіз.

Arduino-да басқа түйреуішті қолданып көрейік. D7 делік. Қосқышты D13 істікшесінен D7 істікшесіне жылжытыңыз және кодтың келесі жолын өзгертіңіз:

Өзгертілген эскизді Arduino-ға жүктеңіз. ЖШД жыпылықтауын жалғастырады, бірақ бұл жолы D7 істікшесінен қуат пайдаланылады.

Өткен сабақтарда біз ең қарапайым схемалармен таныстық - құрастыру және. Бүгін біз потенциометр (айнымалы резистор) және жарықдиодты шамы бар модельді жинаймыз. Мұндай модельді роботты басқару үшін пайдалануға болады.

Потенциометрайнымалы болып табылады реттелетін кедергісі бар резистор.Потенциометрлер робототехникада әртүрлі параметрлерді – дыбыс көлемін, қуатты, кернеуді және т.б. реттеуші ретінде қолданылады. Біздің модельдепотенциометр тұтқасын бұруданЖарық диодты шамның жарықтығы тәуелді болады. Бұл да негізгі схемалардың бірі.

Модельді құрастыруға арналған бейне нұсқаулар:

Модельді жинау үшін бізге қажет:

  • Arduino тақтасы (немесе аналогтары);
  • Нан тақтасы;
  • 6 сым және/немесе еркектен еркекке секіргіштер;
  • жарық шығаратын диод;
  • потенциометр (айнымалы резистор);
  • 220 Ом резистор;
  • Arduino веб-сайтынан жүктеп алуға болатын Arduino IDE.

Потенциометр мен жарық диодты Arduino-ға қосу үшін не қажет?

Потенциометр мен жарықдиодты Arduino моделіне қосылу диаграммасы:

Потенциометр мен жарық диодты Arduino моделіне қосылу диаграммасы

Бұл модель үшін келесі бағдарлама қолайлы (бағдарламаны Arduino IDE-ге жай ғана көшіруге болады):

// LED бар түйреуіштердің атын беріңіз
// және потенциометр
#define led 9
#А0 кәстрөлін анықтаңыз
жарамсыз орнату()
{
// жарық диоды бар түйреуіш - шығыс
pinMode (жарық диодты, OUTPUT);
// потенциометрі бар түйреуіш – кіріс
pinMode(қастрөл, INPUT);
}
жарамсыз цикл()
{
// x айнымалысын жариялау
int x;
// потенциометрден кернеуді оқу:
// 0-ден 1023-ке дейінгі сан алынады
// оны 4-ке бөліңіз, ауқымда сан шығады
// 0-255 (бөлшек бөлігі жойылады)
x = analogRead(pot) / 4;
// нәтижені жарық диодыға шығару
analogWrite(led, x);
}

Жарық диодты потенциометрдің жиналған Arduino моделі келесідей:

Потенциометр мен жарықдиодты жинақталған Arduino моделі

Бұл «Жаңадан бастаушыларға арналған Arduino» үшінші сабағын аяқтайды. Жалғасы бар!

Сабақ жазбалары:

  1. Бірінші сабақ: .
  2. Екінші сабақ: .
  3. Үшінші сабақ: .
  4. Төртінші сабақ: .
  5. Бесінші сабақ: .
  6. Алтыншы сабақ: .
  7. Жетінші сабақ: .
  8. Сегізінші сабақ: .
  9. Тоғызыншы сабақ:

Ал енді жаңа тапсырманы орындауға тырысайық. Менің ойымша, барлығы жаңа жылдық дисплей гирляндтарын көрді, онда жарықдиодты шамдар біркелкі жыпылықтайды. Біз осындай нәрсені жасағымыз келеді делік.
Біз digitalWrite() функциясын қарастырдық және оның жазған мәні екі нұсқа болуы мүмкін екенін білеміз - жоғары немесе төмен. Бұл жағдайда бізге analogWrite() функциясы көмектеседі. Функциялардың «тұжырымдары» тек бастапқы префикстерде ғана ерекшеленеді, сондықтан оларды есте сақтау оңай.

digitalWrite() сияқты analogWrite() функциясы жақшадағы екі аргументтен тұрады және бір ауызша принцип бойынша жұмыс істейді: «қайда, не». Негізгі айырмашылық - әдеттегі ТӨМЕН немесе ЖОҒАРҒЫ мәндердің орнына кең ауқымды мәндерді жазу мүмкіндігі. Бұл жарық диодты шамның жарықтығын реттеуге мүмкіндік береді. Есте сақтау керек негізгі ескерту - бұл мүмкіндік тек белгілі бір контактілерде жұмыс істейді. Бұл түйреуіштер «~» белгісімен белгіленген. Бұл таңба бұл PWM контактісі екенін көрсетеді. PWM (импульстік ен модуляциясы) орыс тілінде PWM (импульстік ен модуляциясы) сияқты естіледі. Жұмыс принципі импульс ұзақтығын өзгертуге негізделген. Графикалық түрде оны келесідей бейнелеуге болады:

Қарапайым мысалды қарастыру арқылы бұл қалай жұмыс істейтінін анықтауға тырысайық. Мұны істеу үшін сізге жарық диодты PWM контактісіне 150 Ом резистор арқылы қосу және қарапайым бағдарламаны Arduino-ға «қатты сым» қосу керек. Қосылу схемасы мен эскиз коды төменде берілген:


жарамсыз орнату()
{
pinMode (жарық диодты, OUTPUT);
}

жарамсыз цикл()
{
for(int i=0; i<=255; i++)
{
analogWrite(led,i);
кешіктіру(10);
}
for(int i=255; i>=0; i--)
{
analogWrite(led,i);
кешіктіру(10);
}
}


Менің ойымша, код жалпы түсінікті, бірақ біз for() цикліне аздап назар аударуымыз керек. Рұқсат деген бар. Біз 8-биттік ажыратымдылықпен жұмыс істеп жатқандықтан (бұл сәл кейінірек талқыланады), ең төменгі мән 0, ал максимум 255 болады. Әрбір итерацияның соңында біз кешіктіру уақытын 10 мс етіп орнатамыз.

Алдыңғы сабақтағы сызбаға қайта оралайық және analogWrite() функциясы арқылы ұқсас гирляндия жасауға тырысайық.


int түймесіPin = 2;
int түйреуіштері = (3,5,6,9,10,11);

логикалық lastButton = ТӨМЕН;
логикалық ағымдағыТүйме = ТӨМЕН;
логикалық қосу = жалған;

жарамсыз орнату()
{
pinMode(батырмаPin, INPUT);
for(int режимі = 0; режим<= 5; mode++) pinMode(pins, OUTPUT);
}

логикалық қайтару (логикалық соңғы)
{
логикалық ток = digitalRead(buttonPin);
егер(соңғы!= ағымдағы)
{
кешіктіру(5);
ағымдағы = сандықОқу(түйме PIN);
}
қайтарылатын ток;
}

жарамсыз цикл()
{
currentButton = қайтару(соңғы түйме);
егер(соңғы түйме == ТӨМЕН && ағымдағы түйме == ЖОҒАРЫ)
{
enable = !enable;
}

Егер(қосу == шын)
{
үшін (int i=0; i<=5; i++)
{
үшін (int жарықтық = 0; жарықтық<= 255; brightness++)
{
кешіктіру(1);
}
кешіктіру(40);
}
үшін (int i=0; i<=5; i++)
{
үшін (int жарықтық = 255; жарықтық >= 0; жарықтық--)
{
analogWrite(pins[i], жарықтық);
кешіктіру(1);
}
кешіктіру(40);
}
}

Егер(қосу == жалған)
{
for(int i = 0; i<= 5; i++) digitalWrite(pins[i], LOW);
}

LastButton = ағымдағы түйме;
}


Көрнекі түрде эскиз біршама күрделірек болды. Шындығында, мұнда бәрі қарапайым және оны анықтайық. Біз барлық қосылған жарық диодтарын анықтауымыз керек, бірақ әдеттегі int led-дің орнына біз массив қолданамыз, оның әрбір элементі Arduino-да PWM түйреуіш болып табылады. void setup() функциясының денесінде біз де айлакер әрекет жасадық. Біз барлық контактілердің «тізбесін» for() цикліне тапсырдық, оның әрбір итерациясы OUTPUT параметрінде сәйкес контакт конфигурацияланады. void loop() функциясына көшейік. debounce() функциясы және бастапқы if() шарты өзгеріссіз қалады. Біз әлі екі айнымалының деңгейлерін тексеріп жатырмыз: алдыңғы мән (бастапқыда LOW) және түйменің ағымдағы күйі. Осы шарттар орындалғанда, қосу айнымалысының мәні инверттелген. Осыны ескере отырып, біз тағы екі қарапайым if() шартын қостық. Қосылған = шын болса, гирляндия қосылады, оның «ағуының» тегістігі for() циклімен басқарылады. Қосылған = жалған болса, барлық жарық диодтары өшеді. Шарттардың соңында lastButton айнымалысы түйменің ағымдағы күйін қабылдайды.
Бағдарламамызды сынау кезінде біз бәрі күткендей жұмыс істемейтінін байқадық. Есіңізде болсын, өткен сабақта біз уақытты кідірту үлкен болса, түйме оның мерзімі өткеннен кейін іске қосылады деген түзету енгіздік пе? Алдыңғы мысалда гирляндия қосылған кезде void loop() функциясының корпусындағы жалпы кідіріс 85 мс болды. Бұл бізге белгілі бір уақыт ішінде «жетуге» мүмкіндік берді. Бұл нобайда бірдей жағдайда кешіктіру бірнеше рет ерекшеленеді. Мүмкін, гирляндияны өшіргіңіз келсе, «үзу» сөзі өзін көрсетеді. Бұл мәселенің шешімі болады!

Бұл мақала сізге пайдалы болды деп үміттенемін. Келесі оқулықта Arduino-дағы үзілістерді қарастырамыз және қажетті нәтижеге қол жеткіземіз.




Жоғарғы