En ole vielä oikein päässyt sisälle syntaksiin, joten tälläinen yksinkertainen kysymys. Kokeilen tehdä tälläistä yksinkertaista ledin vilkutinta, jossa vuoron perään pistetään ledi päälle, sammutetaan se ja siirrytään seuraavaan.
Hoitaisin tuon ledin valinnan ja tilan muutoksen fuktiossa changeLED(), mutta tuon dynaamisen muuttujan määrittely tuottaa ongelmia. Ao koodi ei siis toimi koska mm. BIT[currentLED] on ilmaistu väärin.
if (currentLED == 5) {currentLED = 0;}
/* Tämä ei toimi. Jos BITX on määritelty esim #define BITX (1<<X) Löytyy jostain otsikkotiedostosta.
P1OUT &= ~BIT[currentLED]; // LED päälle
delay();
P1OUT |= BIT[currentLED]; // LED pois
*/
switch(currentLED){
case 0:
P1OUT &= ~BIT0; // LED päälle
delay();
P1OUT |= BIT0;
break;
case 1:
P1OUT &= ~BIT1; // LED päälle
delay();
P1OUT |= BIT1;
break;
}//Kääntäjä parkuu defaultin puuttumisesta…
currentLED++;
delay();
}
void delay(void) {
unsigned int count;
for (count=0; count<60000; count++);
}[/code]
Jos haluaa itse laittaa nuo taulukkoon, pitää ensin tietää miten nuo BITX on määritelty jos ne on 8-bittisiä lukuja, voi tehdä jotain tän tyylistä.
Kiitti, tuo switch-casehan tähän onkin toimiva ratkaisu.
Ohessa toimiva, joskin vähän rujo koodi:
[code]#include “msp430G2231.h”
void delay(void);
void changeLED(void);
unsigned int currentLED = 0;
void main(void){
WDTCTL = WDTPW + WDTHOLD;
P1DIR |= BIT0|BIT1|BIT2|BIT3|BIT4;
P1OUT &= ~BIT0; //sammutetaan alkuun kaikki LEDit
P1OUT &= ~BIT1; //Tämänkin voisi varmaan tehdä fiksummin
P1OUT &= ~BIT2;
P1OUT &= ~BIT3; //nämä ei toki ole pakollisia, ledit sammuu
P1OUT &= ~BIT4; //joka tapauksessa ekan kierroksen jälkeen
while (1) {
changeLED(); //kutsutaan lediä vaihtavaa funktiota
}
}
void changeLED() {
if (currentLED == 5) {currentLED = 0;}
switch(currentLED){
case 0:
P1OUT |= BIT0; // LED päälle
delay();
P1OUT &= ~BIT0; // LED pois
break;
case 1:
P1OUT |= BIT1; // LED päälle
delay();
P1OUT &= ~BIT1; // LED pois
break;
case 2:
P1OUT |= BIT2; // LED päälle
delay();
P1OUT &= ~BIT2; // LED pois
break;
case 3:
P1OUT |= BIT3; // LED päälle
delay();
P1OUT &= ~BIT3; // LED pois
break;
case 4:
P1OUT |= BIT4; // LED päälle
delay();
P1OUT &= ~BIT4; // LED pois
break;
}
currentLED++;
}
void delay(void) { //viiveen määrittely
unsigned int count;
for (count=0; count<60000; count++);
}[/code]
Pistän tähän vielä kuvan kytkennästä, sillä haluan kannustaa muitakin tekemään niin. Vaikka projekti olisi näinkin turha ja yksinkertainen, niin jollekin siitä voi olla suuri apu.
Vastukset tuossa ovat 220 ohmisia.
Seuraava harjoitustyö voi olla ihmetellä vaikka, että miten LaunchPadiin liitetään ulkoisia kytkimiä jolla voisi vaikka vaihtaa tuota välkkymissuuntaa…