Pràctica 2: ESTRUCTURES I FUNCIONS
For (Instrucció utilitzada per repetir un bloc d'instruccions fins que es compleixin unes condicions determinades)
oneOnATime (Funció on, repetidament, s'encendran els LEDs en ordre sense apagar-se l'anterior)
oneAfterAnother (Funció on, repetidament, s'encendran els LEDs en ordre, però apagant-se l'anterior)
- oneAfterAnotherNoLoop (Totes les instruccions són escrites una per una)
- oneAfterAnotherLoop (Només és escrit un bloc d'instruccions que es va repetint)
inAndOut (Funció on, repetidament, s'encendran els LEDs en ordre, però aquest cop, començaran encenent-se els dos LEDs del mig (no el de la punta) i aniran encenent els LEDs següents fins a arribar a cada una de les dues puntes, apagant-se el LED anterior, i on repetiran el mateix moviment fins a tornar al mig constantment.)
Bota Bota (Funció on, repetidament, els LEDs s'encendran un després de l'altre apagant-se l'anterior fent l'efecte de com si es tractés d'una pilota que bota )
1.OnAfterAnotherNoloop/oneafteranotherloop
EXPLICACIÓ CODIS
1.Prèviament, es declara la variable "ledPins" que serà la que equivaldrà a les posicions dels LEDs. Primerament, es declara una variable de tipus integer amb el nom "delayTime" a la qual s'associa el valor 100, que serà l'equivalent en mil·lisegons del temps que un LED en obrir-se després de l'anterior.
Seguidament, amb la instrucció "digitalWrite" fa que el primer LED s'encengui i després amb la instrucció "delay" (instrucció utilitzada per designar el temps entre una instrucció i la següent) amb la variable "delayTime" dins que recordem equival a 100 mil·lisegons. Després d'haver-se encès el primer LED, aquest blog d'instruccions es repeteix fins a arribar al LED número 8 i posteriorment es torna a repetir tot, però en comptes d'encendre's, apagant-se els LEDs
1.2 En aquest codi es realitza la mateixa funció que l'anterior però amb moltes menys instruccions.
Primerament, també es declara la variable de tipus integer amb el nom "delayTime" amb el valor 100.
Seguidament, aplica la instrucció "for" explicada més amunt en la qual se li diu el següent: donada una variable integer de nom "i" amb el valor 0 (indica la posició del LED en aquest cas el primer) mentre que "i" sigui inferior o igual que 7 (el total de LEDs) per cada vegada que es faci el codi següent, a "i" se li augmenta 1 al seu valor inicial. En el codi següent amb la instrucció "digitalWrite" s'encén el LED i amb la "delay" dona el temps que tardarà entre cada vegada que es portin a cap les dues instruccions
D'aquesta manera cada vegada que es realitzin les dues instruccions, "i" augmentarà 1 de manera que per cada número que augmenti, que recordem que equival a la posició de LED, els LEDs s'aniran encenent realitzant la mateixa funció que el codi anterior.
Finalment, per fer que els LEDs s'apaguin, es farà el mateix "for" però en comptes que "i" sigui igual a 0 serà igual a 7, perquè s'apagaran del 7 a l'1, i en comptes que la "i" sigui inferior o igual a 7 serà major o igual a 0. Per acabar, en comptes que a la i se li afegeixi un número al 0 valor, se li restarà com es pot veure en la imatge de dalt.
2. Primerament, com en els altres codis, es declara la variable integer assignant-li el valor 100 (mil·lisegons) i també es declara la variable "offLed" assignant-li el valor 7 que és igual al LED anterior al LED actual que s'encendrà.
Seguidament, realitza el mateix "for" que en el codi anterior on donada la variable integer "i" de valor 0 (posició del LED) mentre que "i" sigui inferior o igual a 7, se li augmentarà 1 al seu valor. En el codi dins el "for", amb la instrucció "digitalWrite" s'encén el primer LED i després s'apaga amb la variable "ledPins" sent igual a "offLed" que, recordem, és igual al LED anterior, però com que el LED 7 no està encès no fa res. Seguidament, la variable "offLed" passa a ser igual al valor de i després del "for". D'aquesta manera, quan es torni a realitzar el "for", "i" serà igual a 1, però "offLed" serà igual a 0 perquè serà el valor anterior d'"i" (segons l'ordre d'instruccions encara no ha canviat) llavors el LED 1 s'encendrà i el LED 0 s'apagarà i d'aquesta manera el valor del LED anterior sempre serà igual al valor d'"offLed"
3. Primerament, es declara la variable "delayTime" com en els altres codis, assignant-li el valor 100 (mil·lisegons). A més a més, es declaren dues variables (offLED1 i 2), que seran les encarregades d'apagar els LEDs, i se'ls assigna els valors 2 i 5
Seguidament s'utilitza la instrucció "for" on, donada una variable integer "i" de valor 3, mentre que i sigui major o igual a 0 a i se li restarà 1 al seu valor inicial. En aquest programa, com s'explica més amunt, és realitzen dos "oneOnATime" a la vegada, un entre els LEDs 0 i 3 i l'altre entre els LEDs 4 i 7. És per això que, en començar el programa encenent-se els dos LEDs del mig, en el "for", "i" és igual a 3
Després del "for", amb la instrucció "digitalWrite" s'apaguen els LEDs amb la posició corresponent al valor de les variables offLED, és a dir, el 2 i el 5. Com que els LEDs 2 i 5 no estan encesos, l'Arduino no fa res, però aquestes instruccions serveixen per apagar LEDs en les pròximes voltes del "for".
Un cop fet això, amb, novament, la instrucció "digitalWrite", s'obra el LED amb posició equivalent al valor de "i" (és a dir el 3) i també s'encén el LED amb posició equivalent al valor d'"onLED2" (variable de tipus integer declarada abans de totes les altres instruccions del "for"). Aquesta variable és equivalent a 7 - "i", és a dir: com que el programa pretén obrir dos LEDs alhora començant des del mig, per obrir el LED equivalent a la posició del LED posició del qual és equivalent al valor de "i", el que fa és restar-li "i" al nombre total de LEDs (7) de manera que, en aquest cas, s'obrirà el 4. Per acabar les instruccions adjuntes al "for", "offLED" passarà a ser igual al valor actual de "i" i "offLED2" passarà a ser igual al valor d'"onLED2".
D'aquesta manera, després d'haver posat la instrucció "delay", queda completat el "for". A la segona volta del "for", a "i" (3) se li restarà un número perquè és major que 0, per tant, i serà igual a (2) després, amb el "digitalWrite", s'apagaran els LEDs amb valors equivalents a les variables offLED que després de la primera volta del "for" eren iguals a 3, i a 4 de manera que els LEDs encesos en la primera volta del "for" ara estan apagats. En acabat, s'encenen els LEDs amb posició equivalent a les variables "i" i "onLED2" que, com que ara "i" és 2 i com que "onLED2" = 7 - "i", s'encendran els LEDs 2 i 5, i així fins a arribar a què s'encenguin els LEDs 0 i 7.
Per fer que els LEDs es tornin a encendre fins al mig, només caldrà fer un altre "for" canviant que "i" ara sigui igual a 0 (volem fer el recorregut al contrari) i que es realitzin les instruccions mentre que "i" sigui inferior o igual a 3.
4. Aquest programa fa gairebé la mateixa funció que l'"oneOnATime", però realitzant el recorregut de tornada també.
D'aquesta manera el programa començaria, com sempre, declarant les variables que en aquest cas només és la de "delayTime" de tipus integer, com sempre, amb el valor 100.
Seguidament, fa un "for" exactament igual que en el programa "oneOnATime" però fent que "i" sigui igual a 1 i amb les mateixes instruccions adjuntes (declara la variable "offLED" que en aquest cas serà igual al valor de la "i" menys 1 )per així sempre apagar el LED anterior), encenen primer el LED, apagant l'anterior i esperant 100 mil·lisegons amb el "delayTime" a la següent volta del "for")
Però el que diferència aquest programa amb el de "oneOnATime" és que es fa el recorregut contrari. D'aquesta manera després del primer "for" es posa un altre. En aquest, la "i" no començarà sent igual a 7 sinó que serà igual a 6. De la mateixa manera que en l'anterior for hem fet que la "i" sigui 1 i que hagi d'arribar a 7, ara fem que la i sigui 6 i que hagi d'arribar a 0. Això es fa perquè els "for" s'intercalin millor i que els LEDs dels extrems no estiguin encesos més estona perquè si en el primer "for" posem que "i" és igual a 0 i ha d'arribar a 7 i en el següent exactament el mateix, el temps que està encès el LED 0 i el 7 seria major. Per acabar el "for", en comptes que a la "i" se li sumi, se li haurà de restar per fer el recorregut contrari
D'aquesta manera, queda fet el "botaBota" i completada la PRÀCTICA 2.