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: 657
Csatlakozott: 2012. szeptember 5. szerda, 6:00

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

HozzászólásSzerző: csabeszq » 2017. november 13. hétfő, 16:31

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
Pákabűvész
Hozzászólások: 236
Csatlakozott: 2015. március 27. péntek, 21:27

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

HozzászólásSzerző: csegebiga » 2017. november 13. hétfő, 20:58

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
Pákabűvész
Hozzászólások: 236
Csatlakozott: 2015. március 27. péntek, 21:27

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

HozzászólásSzerző: csegebiga » 2017. november 13. hétfő, 21:08

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
Újonc
Újonc
Hozzászólások: 9
Csatlakozott: 2017. november 4. szombat, 16:41

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

HozzászólásSzerző: learner » 2017. november 15. szerda, 18:09

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


Vissza: “Bascom-AVR nyelvű programozás (AVR programozásának lehetőségei)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 4 vendég