Tämän sivun tehtävänä on
selventää for-lauseen rakennetta. Se on yleensä muotoa:
for (int i = alkuarvo; i <= loppuarvo; i++){
mitä tehdään }. Käsky on siis for ja sen jälkeen sulkeissa
määritellään muuttuja int i. Muuttuja
voidaan määritellä muuallakin, mutta on kätevää määritellä se tässä
paikalliseksi. Myöskään nimen ei tarvitse olla tuota selkeämpi. Seuraavaksi
muuttujalle annetaan alkuarvo esim. i =
0, Tämä on kokonainen käskyrivi, sillä se päättyy puolipisteeseen ( ; ).
Seuraavaksi muuttujaa verrataan loppuarvoon. for-lausetta suoritettaan niin monta kierrosta, kun tämä ehto on
voimassa. Lopuksi kasvatetaan muuttujaa i++;.
Jos tämä unohtuu tai siinä on jokin virhe, saattaa for-lause jäädä pyörimään
”ikuiseksi”. Muuttujan ei tarvitse kasvaa. Se voi myös pienetä. Se ei tarvitse
myöskään muuttua yhden välein, vaan esim. pienetä i = i – 3, jolloin muutos
tapahtuu kolmen välein. Tämä on kontrolliosa ja tämän jälkeen kaarisulkujen
sisällä on varsinainen toiminta, mikä suoritetaan ehtojen määrittämä lukumäärä.
Tässä tapauksessa potentiometrin asennosta riippuva muuttuva määrä, yhteensä10
kertaa.
Tässä on käytössä pieni 10
LEDin patsas. Tällaisia voi nähdä mittareissa, vahvistimissa ja monissa
paikoissa, missä informaatioksi riittää karkeahko suuruusluokka. Äänen
voimakkuuden näyttö on yksi tyypillinen esimerkki. Tässä on vain 10 LEDiä. Jos
tarvitaan enemmän, on myös analogiatulot mahdollista määritellä
digitaalilähdöksi (myös tuloksi). Aika pian tämäkin raja tulee kuitenkin
vastaan. Silloin on mahdollista käyttää sarja-/rinnanmuunninta, esim. 74HC595 -
siirtorekisteriä, mihin data syötetään sarjana (bitit peräkkäin) ja sen jälkeen
kellotetaan rinnakkaislähtöihin. Kussakin piirissä on kahdeksan lähtöä ja
piirejä voidaan useita kytkeä sarjaan. Tällä on mahdollista syöttää kymmeniä
LEDejä.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOJuwWAvppnlpD-4kiTXPeKsOOuNwiimWMp7BUuIBo5s_XkADPwZ0Lex2Z0aKk-DvIzC928NtL4mqT-h13zVYaUdL4ldGCs9AOOFmYROgKD5F_Q12_4C4GP0XFSkFJiktqkKjgaXgPL18x/s200/LED10mp.jpg)
Ohjelmassa on hyvä
kiinnittää huomiota asetusosaan, missä yhdellä for-lauseella määritellään
kaikki 10 digitaalilähtöä OUTPUTiksi. Tuo millis()
ominaisuus ja lauseet ovat vain sen vuoksi, että niillä voi halutessa monitoroida
laskentaa mikroprosessorissa.
Ohjelma 8
/***************************************
*
Ohjelma 8
*
11.04.2016
*
10 kpl LED-patsaan ohjaus
**************************************/
// MÄÄRITTELYT:
// Kellon määrittely
unsigned long Ulo_MilliSek = 0;
unsigned long Ulo_UusiMilliSek = 0;
const long CoL_EroSekunti = 999;
int Int_Sekunti = 0;
boolean Bol_Tulosta = true; // Tulostusta ohjataan kellolla
const int Con_AnaTulo = 0;
int Int_Ana_Arvo = 0;
int Int_OhjausArvo = 0;
const int Con_MinPinni = 2;
const int Con_MaxPinni = 11;
// ASETUKSET:
void setup(){
Serial.begin(9600);
for (int i = Con_MinPinni; i <=
Con_MaxPinni; i++){
pinMode(i, OUTPUT);}
} // Asetuksen loppu
// PÄÄLOOPPI Varsinainen suoritusosa. Jatkuva suoritus
void loop(){
// Sisäisen kellon käyttö
Ulo_MilliSek = millis();
if(Ulo_MilliSek - Ulo_UusiMilliSek
> CoL_EroSekunti){
Ulo_UusiMilliSek = Ulo_MilliSek;
Int_Sekunti++;
if (Bol_Tulosta ==
true){Fun_Tulostus();}
}
Int_Ana_Arvo = analogRead(Con_AnaTulo); // Luetaan tulo
Int_OhjausArvo = map(Int_Ana_Arvo, 0, 1023, Con_MinPinni, Con_MaxPinni+1);
// LEDien ohjaukset
for
(int i = Con_MinPinni; i <= Int_OhjausArvo; i++){
digitalWrite(i, HIGH); // LEDit syttyvät
}
for (int
i = Int_OhjausArvo; i <= Con_MaxPinni; i++){
digitalWrite(i, LOW); // LEDit sammuvat
}
delay(1);
} // Pääohjelma LOPPU
// FUNKTIOT
void Fun_Tulostus(){
//Serial.print("Teksti :");
Serial.println(Muuttuja);
Serial.print("Analogiatulo :");
Serial.println(Int_Ana_Arvo);
Serial.print("Ohjausarvo :");
Serial.println(Int_OhjausArvo);
}
Ei kommentteja:
Lähetä kommentti