Arduino vienmērīga RGB LED ieslēgšana no pogas. LED spilgtuma kontrole, izmantojot potenciometru. Arduino programmas apraksts

Šajā eksperimentā mēs pievienojam gaismas diodes spilgtuma daļu ar vienu pogu un samazinām to ar otru.

EKSPERIMENTA DAĻU SARAKSTS

- 1 Arduino Uno dēlis;

- 1 bezlodējamais maizes dēlis;

- 2 pulksteņa pogas;

- 1 rezistors ar nominālo vērtību 220 omi;

- 1 LED;

- 7 vīriešu-vīriešu vadi.

SĒTES DIAGRAMMA

DIAGRAMMA UZ PLĀCES

PIEZĪME

  • Ja pārstrādājat iepriekšējā eksperimenta shēmu, ņemiet vērā, ka šoreiz mums ir jāpievieno gaismas diode pie porta, kas atbalsta PWM.

SKICE

lejupielādējiet Arduino IDE skici
#define PLUS_BUTTON_PIN 2 #define MINUS_BUTTON_PIN 3 #define LED_PIN 9 int spilgtums = 100; Būla plusUp = patiess; Būla minusUp = patiess; void setup() ( pinMode(LED_PIN, OUTPUT); pinMode(PLUS_BUTTON_PIN, INPUT_PULLUP); pinMode(MINUS_BUTTON_PIN, INPUT_PULLUP); ) void loop() ( analogWrite(LED_PIN, spilgtums); // reaģēt uz klikšķiem, izmantojot funkciju, ko mēs rakstījām plusU = handleClick(PLUS_BUTTON_PIN, plusUp, +35); minusUp = handClick(MINUS_BUTTON_PIN, minusUp, -35); ) // Sava funkcija ar 3 parametriem: PIN numurs ar pogu // (buttonPin), stāvoklis pirms verifikācijas (wasUp ) un spilgtuma gradācija //, noklikšķinot uz pogas (delta). Funkcija atgriež // (angļu valodā return) atpakaļ jauno, pašreizējo pogas Būla roktura stāvokliClick(int buttonPin, Boolean wasUp, int delta) ( boolean isUp = digitalRead(buttonPin); if (wasUp && !isUp) ( delay(10) ); isUp = digitalRead(buttonPin); // ja notika klikšķis, mainiet spilgtumu no 0 uz 255 if (!isUp) brightness = constrain(brightness + delta, 0, 255); ) return isUp; // atgriezt vērtība atpakaļ uz zvanītāja kodu)

KODS SKAIDROJUMI

  • Mēs varam izmantot ne tikai iebūvētās funkcijas, bet arī izveidot savas. Tas ir attaisnojams, ja mums ir jāatkārto vienas un tās pašas darbības dažādās koda vietās vai, piemēram, mums ir jāveic vienas un tās pašas darbības ar dažādiem datiem, kā šajā gadījumā: jāapstrādā signāls no 2. un 3. digitālā porta.
  • Jūs varat definēt savas funkcijas jebkur kodā ārpus citu funkciju koda. Mūsu piemērā mēs definējām funkciju pēc cilpa .
  • Lai definētu savu funkciju, mums ir nepieciešams:
    • Norādiet, kādu datu tipu tas atgriezīs. Mūsu gadījumā tā ir Būla. Ja funkcija veic tikai dažas darbības un neatgriež nekādu vērtību, izmantojiet atslēgvārdu nederīgs
    • Piešķiriet funkcijai nosaukumu - identifikatoru. Šeit darbojas tie paši noteikumi, kas attiecas uz mainīgo un konstantu nosaukšanu. Funkcijas ir nosauktas tādā pašā stilā piemēram, mainīgie .
    • Iekavās uzskaitiet funkcijai nodotos parametrus, norādot katra veidu. Šī ir to mainīgo deklarācija, kas ir redzami jaunizveidotajā funkcijā un tikai tajā. Piemēram, ja šajā eksperimentā mēs mēģinām piekļūt wasUp vai isUp no cilpa () Mēs saņemsim kļūdas ziņojumu no kompilatora. Tāpat mainīgie, kas deklarēti cilpa, nav redzamas citām funkcijām, taču to vērtības var nodot kā parametrus.
    • Starp cirtainiem lencēm ierakstiet funkcijas izpildīto kodu
    • Ja funkcijai ir jāatgriež kāda vērtība, izmantojiet atslēgvārdu atgriezties norādiet, kādu vērtību atgriezt. Šai vērtībai ir jābūt tāda veida, kādu mēs deklarējām
  • Tā sauktie globālie mainīgie, t.i. Mainīgie, kuriem var piekļūt no jebkuras funkcijas, parasti tiek deklarēti programmas sākumā. Mūsu gadījumā tas ir spilgtumu .
  • Mūsu izveidotās funkcijas iekšpusē rokturisNoklikšķiniet Notiek tas pats, kas eksperimentā.
  • Tā kā, palielinot spilgtuma pakāpi par 35, pēc ne vairāk kā astoņiem secīgiem klikšķiem uz vienas no pogām izteiksmes vērtība spilgtums + delta izies ārpus intervāla . Izmantojot funkciju ierobežot mēs ierobežojam mainīgā pieļaujamās vērtības spilgtumu noteiktas intervālu robežas.
  • Izteiksmē plusUp = rokturisClick(PLUS_BUTTON_ PIN , plusUp, +35) mēs piekļūstam mainīgajam plusUz augšu divreiz. Tāpēc ka = ievieto labā operanda vērtību kreisajā operandā, vispirms aprēķinot, kas atgriezīsies rokturisNoklikšķiniet. Tātad, kad mēs viņai dodam plusUz augšu kā parametrs tam joprojām ir vecā vērtība, kas aprēķināta pēdējā zvana laikā rokturisNoklikšķiniet .
  • Iekšā rokturisNoklikšķiniet mēs aprēķinām jauno LED spilgtuma vērtību un ierakstām to globālajā mainīgajā spilgtumu, kas katrā iterācijā cilpa tikko nodots analogWrite .

JAUTĀJUMI, LAI PĀRBAUDĪTU SEVI

  1. Ko nozīmē atslēgvārds? nederīgs ?
  2. Kā programma uzvedas, ja viens mainīgais tiek minēts no dažādām piešķiršanas operatora pusēm = ?

UZDEVUMI NEATKARĪGAM RISINĀJUMAM

  1. Pārveidojiet kodu, lai spilgtuma maiņas solis tiktu pielāgots vienuviet.
  2. Izveidojiet citu funkciju un pārstrādājiet kodu tā, lai viena funkcija būtu atbildīga par taustiņsitienu izsekošanu, bet otra - par gaismas diodes spilgtuma aprēķināšanu un atgriešanu analogWrite .

Tagad apskatīsim daudzkrāsu LED, ko bieži sauc saīsinājumā: RGB LED. RGB ir saīsinājums, kas apzīmē: sarkans — sarkans, zaļš — zaļš, zils — zils. Tas ir, šīs ierīces iekšpusē ir ievietotas trīs atsevišķas gaismas diodes. Atkarībā no veida RGB gaismas diodei var būt kopīgs katods vai kopīgs anods.

1. Krāsu sajaukšana

Kāpēc RGB gaismas diode ir labāka par trim parastajām? Tas viss ir saistīts ar mūsu redzes spēju sajaukt gaismu no dažādiem avotiem, kas atrodas tuvu viens otram. Piemēram, ja novietosim blakus zilās un sarkanās gaismas diodes, tad vairāku metru attālumā to mirdzums saplūdīs un acs ieraudzīs vienu violetu punktu. Un, ja pievienosim arī zaļo, punkts mums šķitīs balts. Tieši tā darbojas datoru monitori, televizori un āra ekrāni. Televizora matrica sastāv no atsevišķiem dažādu krāsu punktiem. Ja paņemat palielināmo stiklu un paskatās uz ieslēgto monitoru, jūs varat viegli redzēt šos punktus. Taču uz āra ekrāna punkti nav izvietoti ļoti blīvi, lai tos varētu atšķirt ar neapbruņotu aci. Bet no vairāku desmitu metru attāluma šie punkti nav atšķirami. Izrādās, jo tuvāk viens otram atrodas daudzkrāsaini punktiņi, jo mazāks attālums acij vajadzīgs, lai šīs krāsas sajauktos. No tā izriet secinājums: atšķirībā no trim atsevišķām gaismas diodēm, RGB LED krāsu sajaukšanās ir manāma jau 30-70 cm attālumā.Starp citu, RGB LED ar matētu objektīvu darbojas vēl labāk.

2. RGB LED pievienošana Arduino

Tā kā daudzkrāsu gaismas diode sastāv no trim parastajām gaismas diodēm, mēs tās savienosim atsevišķi. Katra gaismas diode ir savienota ar savu tapu, un tai ir savs atsevišķs rezistors. Šajā apmācībā mēs izmantojam RGB LED ar kopēju katodu, tāpēc zemei ​​būs tikai viens vads. Shematiska diagramma
Izkārtojuma izskats

3. Programma RGB gaismas diodes vadīšanai

Sacerēsim vienkārša programma, kas pēc kārtas izgaismos katru no trim krāsām. const baits rPin = 3; const baits gPin = 5; const baits bPin = 6; void setup() ( pinMode(rPin, OUTPUT); pinMode(gPin, OUTPUT); pinMode(bPin, OUTPUT); ) void loop() ( // izslēgt zilu, ieslēgt sarkanu digitalWrite(bPin, LOW); digitalWrite( rPin, HIGH); aizkave (500); // izslēgt sarkano, ieslēgt zaļo digitalWrite(rPin, LOW); digitalWrite(gPin, HIGH); aizkave (500); // izslēgt zaļo, ieslēgt zilo digitalWrite(gPin) , LOW); digitalWrite (bPin, HIGH); aizkave (500); ) Ielādējiet programmu Arduino un novērojiet rezultātu. Jūsu pārlūkprogramma nav atbalsta video tagu. Nedaudz optimizēsim programmu: mainīgo rPin, gPin un bPin vietā izmantosim masīvu. Tas mums palīdzēs nākamajos uzdevumos. const baits rgbPins = (3,5,6); void setup() ( for(baits 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. Septiņas varavīksnes krāsas

Tagad mēģināsim izgaismot divas krāsas vienlaikus. Ieprogrammēsim šādu krāsu secību:
  • sarkans
  • sarkans + zaļš = dzeltens
  • zaļš
  • zaļš + zils = gaiši zils
  • zils
  • zils + sarkans = violets
Vienkāršības labad mēs izlaidām oranžo krāsu. Tātad, izrādījās, ka tās ir sešas varavīksnes krāsas 🙂 const baits rgbPins = (3,5,6); const baits varavīksne = ( (1,0,0), // sarkans (1,1,0), // dzeltens (0,1,0), // zaļš (0,1,1), // zils ( 0,0,1), // zils (1,0,1), // violets ); void setup() ( for(baits 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. Gluda krāsas maiņa

Ne velti RGB LED pieslēdzām pie 3., 5. un 6. tapām. Kā zināms, šīs tapas ļauj ģenerēt dažādu darba ciklu PWM signālu. Citiem vārdiem sakot, mēs varam ne tikai ieslēgt vai izslēgt LED, bet arī kontrolēt tā sprieguma līmeni. Tas tiek darīts, izmantojot funkciju analogWrite. Padarīsim tā, lai mūsu gaismas diode starp varavīksnes krāsām pārietu nevis pēkšņi, bet vienmērīgi. const baits rgbPins = (3,5,6); int dim = 1; void setup() ( for(baits 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); ) // izslēgt zaļo, paralēli ieslēgt zilu for(int i=255 ; i> =0; i--)( analogWrite(rgbPins, i/dim); analogWrite(rgbPins, (255-i)/dim); delay(10); ) // izslēgt zilo, paralēli ieslēgt sarkano for(int i=255 ; i>=0; i--)( analogWrite(rgbPins, i/dim); analogWrite(rgbPins, (255-i)/dim); delay(10); ) ) Dim mainīgais nosaka mirdzuma spilgtums. Pie dim = 1 mums ir maksimālais spilgtums. Ielādējiet programmu Arduino. Jūsu pārlūkprogramma neatbalsta video tagu.

Uzdevumi

  1. Temperatūras indikators. Pievienosim ķēdei termistoru un pievienosim to analogajai ieejai. Gaismas diodei jāmaina krāsa atkarībā no termistora temperatūras. Jo zemāka temperatūra, jo zilāka krāsa, un jo augstāka temperatūra, jo vairāk sarkana.
  2. RGB lampa ar regulatoru. Pievienosim ķēdei trīs mainīgos rezistorus un savienosim tos ar analogajām ieejām. Programmai nepārtraukti jālasa rezistoru vērtības un jāmaina atbilstošā RGB LED komponenta krāsa.

Šajā piemērā jūs uzzināsit, kā mainīt gaismas diodes spilgtumu, izmantojot rezistorus ar dažādu pretestību.

Šim piemēram jums būs nepieciešams

1 LED 5 mm diametrā

1 270 omu rezistors (sarkans, violets, brūns)

1 470 omu rezistors (dzeltens, violets, brūns)

1 2,2 kOhm rezistors (sarkans, sarkans, sarkans)

1 10 kOhm rezistors (brūns, melns, oranžs)

Gaismas diodes - vispārīga informācija

Gaismas diodes labi kalpo dažāda veida indikāciju ierīcēs. Tie patērē maz elektrības un ir izturīgi.

Šajā piemērā mēs izmantojam visizplatītākās gaismas diodes ar diametru 5 mm. Izplatītas ir arī gaismas diodes ar diametru 3 milimetri un lielas gaismas diodes ar diametru 10 mm.

Nav ieteicams LED tieši savienot ar akumulatoru vai sprieguma avotu. Pirmkārt, vispirms ir jānoskaidro, kur tieši LED ir negatīvās un pozitīvās kājas. Nu, otrkārt, ir jāizmanto strāvu ierobežojoši rezistori, pretējā gadījumā LED ļoti ātri izdegs.

Ja neizmantojat rezistoru ar LED, LED ļoti ātri neizdosies, jo caur to plūdīs pārāk daudz strāvas. Tā rezultātā gaismas diode sakarst un kontaktu ģenerējošā gaisma tiks iznīcināta.

Ir divi veidi, kā atšķirt gaismas diodes pozitīvo un negatīvo kāju.

Pirmais ir tas, ka pozitīvā kāja ir garāka.

Otrais ir tas, ka, ieejot pašas diodes korpusā, uz negatīvās kājas savienotāja ir plakana mala.

Ja jūs saskaraties ar LED, kam ir plakana mala uz garākās kājas, garākā daļa joprojām ir pozitīva.

Rezistori - vispārīga informācija

Pretoties - pretestība (angļu val.)

Kā norāda nosaukums, rezistori iztur elektrības plūsmu. Jo augstāka ir rezistora vērtība (omi), jo lielāka pretestība un mazāka strāva plūst caur ķēdi, kurā tas ir uzstādīts. Mēs izmantosim šo rezistoru īpašību, lai regulētu strāvu, kas iet caur LED, un tādējādi tās spilgtumu.

Bet vispirms nedaudz parunāsim par rezistoriem.

Mērvienības, kurās mēra pretestību, ir omi, ko daudzos avotos apzīmē ar grieķu burtu Ω - Omega Tā kā omi ir maza pretestības vērtība (shēmā gandrīz nemanāma), mēs bieži darbosimies ar tādām vienībām kā kOhm - kiloohm. (1000 omi) un MOhm megaomi (1 000 000 omi).

Šajā piemērā mēs izmantosim rezistorus ar četrām dažādām vērtībām: 270 Ω, 470 Ω, 2,2 kΩ un 10 kΩ. Šo rezistoru izmēri ir vienādi. Krāsa arī. Vienīgais, kas tos atšķir, ir krāsainās svītras. Tieši no šīm sloksnēm vizuāli nosaka rezistoru vērtību.

Rezistoriem, kuriem ir trīs krāsainas svītras un pēdējā zelta svītra, darbojas šādas atbilstības:

Brūna 1

Sarkans 2

Oranžs 3

Zaļš 5

Violeta 7

Pirmās divas svītras norāda pirmās 2 skaitliskās vērtības, tātad sarkans, purpursarkans nozīmē 2, 7. Nākamā josla ir nulles skaits, kas jāievieto aiz pirmajiem diviem cipariem. Tas ir, ja trešā sloksne ir brūna, tāpat kā iepriekš redzamajā fotoattēlā, būs viena nulle un rezistora vērtība ir 270 Ω.

Rezistors ar brūnām, melnām, oranžām svītrām: 10 un trīs nulles, tātad 10000 Ω. Tas ir, 10 kΩ.

Atšķirībā no gaismas diodēm rezistoriem nav pozitīvu un negatīvu kāju. Nav nozīmes tam, kuru kāju izmantojat, lai tās savienotu ar strāvu/zemi.

Savienojuma shēma

Savienojiet saskaņā ar zemāk redzamo shēmu:

Arduino ir 5 V kontakts perifērijas ierīču barošanai. Mēs to izmantosim, lai darbinātu LED un rezistoru. Jums nekas cits no tāfeles nebūs vajadzīgs, vienkārši pievienojiet to datoram, izmantojot USB.

Ar 270 Ω rezistoru LED vajadzētu iedegties diezgan spilgti. Ja nomainīsiet 270 Ω rezistoru pret 470 Ω rezistoru, gaismas diode nedegs tik spilgti. Izmantojot 2,2 kΩ rezistoru, gaismas diodei vajadzētu nedaudz vairāk izgaist. Galu galā ar 10 kΩ rezistoru LED būs tik tikko redzams. Visticamāk, ka, lai redzētu atšķirību pēdējā solī, jums būs jāizvelk sarkanais adapteris, izmantojot to kā slēdzi. Tad jūs varat redzēt atšķirību spilgtumā.

Starp citu, jūs varat veikt šo eksperimentu ar izslēgtām gaismām.

Dažādas rezistoru uzstādīšanas iespējas

Brīdī, kad 5V ir pieslēgts vienai rezistora kājiņai, rezistora otrā kājiņa ir savienota ar gaismas diodes pozitīvo kāju, bet otrā – ar zemi. Ja mēs pārvietojam rezistoru tā, lai tas būtu aiz gaismas diodes, kā parādīts zemāk, gaismas diode joprojām iedegsies.

LED mirgo

Mēs varam savienot LED ar Arduino izeju. Pārvietojiet sarkano vadu no 5 V strāvas kontakta uz D13, kā parādīts tālāk.

Tagad lejupielādējiet mūsu apskatīto "Mirkšķināšanas" piemēru. Lūdzu, ņemiet vērā, ka abas gaismas diodes - gan iebūvētā, gan ārējā, kuru instalējāt - sāka mirgot.

Mēģināsim izmantot citu Arduino tapu. Teiksim D7. Pārvietojiet savienotāju no kontakta D13 uz tapu D7 un mainiet šādu koda rindiņu:

Augšupielādējiet modificēto skici Arduino. Gaismas diode turpinās mirgot, taču šoreiz tiek izmantota strāva no tapas D7.

Iepriekšējās nodarbībās iepazināmies ar vienkāršākajām shēmām – montāžu un. Šodien mēs montējam modeli ar potenciometru (mainīgo rezistoru) un LED. Šādu modeli var izmantot robota vadīšanai.

Potenciometrs ir mainīgs lielums rezistors ar regulējamu pretestību.Potenciometri robotikā tiek izmantoti kā dažādu parametru regulatori - skaņas skaļums, jauda, ​​spriegums utt. Mūsu modelīno potenciometra pogas pagriešanasGaismas diodes spilgtums būs atkarīgs. Šī ir arī viena no pamata shēmām.

Video instrukcijas modeļa montāžai:

Lai saliktu modeli, mums ir nepieciešams:

  • Arduino plāksne (vai analogi);
  • Maizes dēlis;
  • 6 vadi un/vai džemperi starp vīriešiem;
  • Gaismas diode;
  • potenciometrs (mainīgs rezistors);
  • 220 omu rezistors;
  • Arduino IDE, ko var lejupielādēt no Arduino vietnes.

Kas nepieciešams, lai potenciometru un LED savienotu ar Arduino?

Savienojuma shēma Arduino modelim ar potenciometru un LED:

Savienojuma shēma Arduino modelim ar potenciometru un LED

Šim modelim ir piemērota šāda programma (jūs varat vienkārši kopēt programmu Arduino IDE):

// norādiet tapas ar LED nosaukumus
// un potenciometrs
#define led 9
#define pot A0
nederīgs iestatījums ()
{
// tapa ar LED - izeja
pinMode(led, OUTPUT);
// tapa ar potenciometru - ieeja
pinMode(pot, INPUT);
}
tukšuma cilpa ()
{
// deklarēt mainīgo x
int x;
// nolasīt spriegumu no potenciometra:
// tiks iegūts skaitlis no 0 līdz 1023
// sadaliet to ar 4, iegūstat skaitli diapazonā
// 0-255 (daļēja daļa tiks izmesta)
x = analogRead(pot) / 4;
// izvada rezultātu uz LED
analogWrite(led, x);
}

Šādi izskatās samontētais potenciometra Arduino modelis ar LED:

Arduino modelis ar potenciometru un LED samontēts

Ar to tiek pabeigta trešā nodarbība “Arduino iesācējiem”. Turpinājums sekos!

Nodarbību ieraksti:

  1. Pirmā nodarbība:.
  2. Otrā nodarbība:.
  3. Trešā nodarbība:.
  4. Ceturtā nodarbība: .
  5. Piektā nodarbība: .
  6. Sestā nodarbība: .
  7. Septītā nodarbība: .
  8. Astotā nodarbība: .
  9. Devītā nodarbība:

Un mēģināsim izpildīt jaunu uzdevumu. Es domāju, ka visi ir redzējuši Jaungada displeja vītnes, kurās gaismas diodes mirgo vienmērīgi. Pieņemsim, ka mēs vēlamies darīt kaut ko līdzīgu šim.
Mēs jau esam apskatījuši funkciju digitalWrite() un zinām, ka tās rakstītajai vērtībai var būt divas iespējas - augsta vai zema. Šajā gadījumā mums palīdzēs analogWrite() funkcija. Funkciju "formulācijas" atšķiras tikai ar sākuma prefiksiem, tāpēc tos ir viegli atcerēties.

Funkcija analogWrite (), tāpat kā digitalWrite (), satur divus argumentus iekavās un darbojas pēc viena un tā paša verbālā principa: “kur, kas”. Galvenā atšķirība ir spēja ierakstīt plašu vērtību diapazonu, nevis parasto LOW vai HIGH. Tas ļaus mums pielāgot gaismas diodes spilgtumu. Galvenā piezīme, kas jāpatur prātā, ir tāda, ka šī funkcija darbojas tikai noteiktiem kontaktiem. Šīs tapas ir apzīmētas ar simbolu "~". Šis simbols norāda, ka tas ir PWM kontakts. PWM (impulsa platuma modulācija) krievu valodā izklausās kā PWM (impulsa platuma modulācija). Darbības princips ir balstīts uz impulsa ilguma maiņu. Grafiski to var attēlot šādi:

Mēģināsim noskaidrot, kā tas darbojas, aplūkojot vienkāršu piemēru. Lai to izdarītu, jums ir jāpievieno gaismas diode ar PWM kontaktu, izmantojot 150 omu rezistoru, un "pieslēgts" vienkārša programma Arduino. Savienojuma shēma un skices kods ir parādīti zemāk:


nederīgs iestatījums ()
{
pinMode(led,OUTPUT);
}

tukšuma cilpa ()
{
for(int i=0; i<=255; i++)
{
analogWrite(led,i);
kavēšanās(10);
}
for(int i=255; i>=0; i--)
{
analogWrite(led,i);
kavēšanās(10);
}
}


Es domāju, ka kods kopumā ir skaidrs, taču mums ir jāpievērš neliela uzmanība for() cilpai. Ir tāda lieta kā atļauja. Tā kā mēs strādājam ar 8 bitu izšķirtspēju (par to tiks runāts nedaudz vēlāk), minimālā vērtība būs 0, bet maksimālā - 255. Katras iterācijas beigās mēs iestatām laika aizkavi uz 10 ms.

Atgriezīsimies pie diagrammas no iepriekšējās nodarbības un mēģināsim izveidot līdzīgu vītni, izmantojot funkciju analogWrite().


int buttonPin = 2;
int tapas = (3,5,6,9,10,11);

boolean lastButton = LOW;
Boolean currentButton = LOW;
boolean enable = false;

nederīgs iestatījums ()
{
pinMode(pogaPin, INPUT);
for(int režīms = 0; režīms<= 5; mode++) pinMode(pins, OUTPUT);
}

Būla atlēciens (būla pēdējais)
{
Būla strāva = digitalRead(buttonPin);
ja(pēdējais != pašreizējais)
{
kavēšanās(5);
pašreizējais = digitalRead(buttonPin);
}
atgriešanās strāva;
}

tukšuma cilpa ()
{
currentButton = debounce(lastButton);
if(lastButton == LOW && currentButton == AUGSTS)
{
iespējot = !iespējot;
}

Ja (iespējot == true)
{
for (int i=0; i<=5; i++)
{
priekš (spilgtums = 0; spilgtums<= 255; brightness++)
{
kavēšanās (1);
}
kavēšanās(40);
}
for (int i=0; i<=5; i++)
{
priekš (spilgtums = 255; spilgtums >= 0; spilgtums--)
{
analogWrite(tapas[i], spilgtums);
kavēšanās (1);
}
kavēšanās(40);
}
}

Ja(iespējot == false)
{
for(int i = 0; i<= 5; i++) digitalWrite(pins[i], LOW);
}

LastButton = currentButton;
}


Vizuāli skice ir kļuvusi nedaudz sarežģītāka. Patiesībā šeit viss ir vienkārši un izdomāsim. Mums ir jāidentificē visas pievienotās gaismas diodes, taču parastā int led vietā mēs izmantojam masīvu, kura katrs elements ir Arduino PWM tapa. Funkcijas void setup() pamattekstā mēs arī rīkojāmies viltīgi. Mēs uzticējām visu kontaktu “uzskaitīšanu” for() cilpai, ar katru atkārtojumu, kurā OUTPUT tiek konfigurēts atbilstošais kontakts. Pārejam pie funkcijas void loop(). Funkcija debounce() un sākotnējais if() nosacījums paliek nemainīgi. Mēs joprojām pārbaudām divu mainīgo līmeņus: iepriekšējās vērtības (sākotnēji LOW) un pogas pašreizējo stāvokli. Kad šie nosacījumi ir izpildīti, iespējošanas mainīgā vērtība tiek apgriezta. Paturot to prātā, esam pievienojuši vēl divus vienkāršus if() nosacījumus. Ja enable = true, tad tiek ieslēgta vītne, kuras “plūsmas” gludumu kontrolē for() cilpa. Ja iespējots = false, tad visas gaismas diodes ir izslēgtas. Nosacījumu beigās mainīgais lastButton uzņem pogas pašreizējo stāvokli.
Pārbaudot mūsu programmu, mēs pamanījām, ka viss nedarbojas, kā paredzēts. Atcerieties, ka pagājušajā nodarbībā mēs veicām grozījumu, ka, ja laika aizkave ir liela, poga tiks aktivizēta pēc tās derīguma termiņa beigām? Iepriekšējā piemērā, kad vītne tika ieslēgta, kopējā aizkave tukšuma cilpas() korpusā bija 85 ms. Tas mums deva iespēju noteiktā laika posmā “tur nokļūt”. Šajā skicē ar tādiem pašiem nosacījumiem aizkavēšanās atšķiras vairākas reizes. Iespējams, ja vēlaties izslēgt vītni, vārds “pārtraukt” liek domāt par sevi. Tas būs šīs problēmas risinājums!

Es ceru, ka šis raksts jums bija noderīgs. Nākamajā apmācībā mēs apskatīsim pārtraukumus Arduino un sasniegsim vēlamo rezultātu.




Tops