A memóriakezelést a gcc megoldja, a goto-nak rendesen működnie kell, bárhova ugrasz.
Abban persze igazad van, hogy a kérdés elméleti, mert az elmúlt 20 év alatt nem szorultam rá a használatára. Nagyon necces esetekben elkerülhetetlen, de a problémák 99.9999%-ában nem kell goto.
Kezdő Arduino-s szinten ki lehet jelenteni, hogy ne használj goto-t, mert nem kell.
Hogyan kell a megszakításokat használni?
Re: Hogyan kell a megszakításokat használni?
nem értem.
ezmikor fut le?
mikor a blinkben
viszont a modeval==0 nincs lekezelve
tehát szerintem ide ez kellene:
ezmikor fut le?
Kód: Egész kijelölése
if (modeval == 3) {
modeval = 0;
state = mode0;
}
Kód: Egész kijelölése
modeval++;
if (modeval > 2) {
modeval = 0;
}
tehát szerintem ide ez kellene:
Kód: Egész kijelölése
if (modeval == 0) {
state = mode0;
}
Re: Hogyan kell a megszakításokat használni?
kicsit olvashatóbbá tettem programodat. nézd meg, ugyanúgy működik-e?
Kód: Egész kijelölése
int pirosLED = 8; //
int zoldLED = 4;
int kekLED = 7;
int potPIN = A0;
int modeval;
int PotVal = 1023;
const int GombPIN = 2;
enum estate {mode0, mode1, mode2};
estate state = mode0;
void setup() {
Serial.begin(19200);
pinMode(pirosLED, OUTPUT);
pinMode(zoldLED, OUTPUT);
pinMode(kekLED, OUTPUT);
pinMode(GombPIN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(GombPIN), blink5, FALLING);
}
//LED kezelő RGB bemenő adattal
void led(byte R, byte G, byte B)
{
digitalWrite(pirosLED, R);
digitalWrite(zoldLED, G);
digitalWrite(kekLED, B);
}
// fekete, amíg a poti 100 alatti értéken van 100 felett vár az értékig, majd visszatér
void poti()
{
PotVal = analogRead(potPIN);
while(PotVal < 100)
{
led(0,0,0);
delay(50);
PotVal = analogRead(potPIN);
}
Serial.println(PotVal);
delay(PotVal);
}
//megszakításkezelő rutin
void blink5() {
led(1,1,1); // felvillan
modeval++;
if (modeval > 2) {
modeval = 0;
}
Serial.println(modeval);
}
void loop() {
if (modeval == 1) {
state = mode1;
}
if (modeval == 2) {
state = mode2;
}
if (modeval == 0) {
state = mode0;
}
switch (state) {
case mode0: //FEKETE
while (modeval==1)
{
led(0,0,0);
delay(50);
}
break;
case mode1:
while (modeval==1)
{
led(0,1,1);
poti();
led(1,0,1);
poti();
led(1,1,0);
poti();
}
break;
case mode2:
while (modeval==2)
{
led(1,1,1);
poti();
led(0,0,0);
poti();
}
break;
}
}
Re: Hogyan kell a megszakításokat használni?
Ugyanúgy működik, köszönöm ez így tényleg átláthatóbb.