Hogyan kell a megszakításokat használni?

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: Hogyan kell a megszakításokat használni?

Hozzászólás Szerző: csabeszq »

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. :)
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Hogyan kell a megszakításokat használni?

Hozzászólás Szerző: csegebiga »

nem értem.
ezmikor fut le?

Kód: Egész kijelölése

 if (modeval == 3) {
        modeval = 0;
        state = mode0;
      }
mikor a blinkben

Kód: Egész kijelölése

modeval++;
  if (modeval > 2) {
    modeval = 0;
  }
viszont a modeval==0 nincs lekezelve
tehát szerintem ide ez kellene:

Kód: Egész kijelölése

 if (modeval == 0) {
         state = mode0;
      }
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Hogyan kell a megszakításokat használni?

Hozzászólás Szerző: csegebiga »

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; 
  }
   
}
learner
DrótVégénSzéndarab
Hozzászólások: 25
Csatlakozott: 2017. november 4. szombat, 16:41

Re: Hogyan kell a megszakításokat használni?

Hozzászólás Szerző: learner »

Ugyanúgy működik, köszönöm ez így tényleg átláthatóbb. :)
Válasz küldése