Stránka 1 z 1

Arduino přerušení

Napsal: 09 dub 2019, 14:45
od mochr
Ahoj,
zkouším programovat Arduino trochu pokročile a pro další projekt zkouším OOP.
Potřebuji signál z tlačítka jako přerušení, to zvládám, ale když ty tlačítka vytvořím pomocí třídy a chci zavolat přerušení tak je tam chyba.

rád bych do procedury predal ID a a dal s tim pracovat. jde to ?

hledal jsem na, ale nanašel jsem to co hledam.

díky za tipy


část kódu kde to nejede

Kód: Vybrat vše

class Cell {
	private:
  		byte pinRED;
        	byte pinGREEN;
		byte pin_BTN;
  		  
    public:
    char state ='N';
    byte id;
  
  
  	Cell(byte pinRED, byte pinGREEN, byte pin_BTN, byte id){
    	this->pinRED = pinRED;
      	this->pinGREEN = pinGREEN;
      	this->pin_BTN = pin_BTN;
        this->id = id;
      
      
      	pinMode(pinRED, OUTPUT);
        pinMode(pinGREEN, OUTPUT);
        pinMode(pin_BTN, INPUT_PULLUP);
        
       attachInterrupt(digitalPinToInterrupt(pin_BTN), vypis(id), CHANGE);  //tady ID ktere chci odkazat
      	}
};


//DEFINICE BUNEK

Cell array_cells[2] = {Cell(8, 9, 2, 0),Cell(11, 10, 3, 1) };

void vypis(byte id){    //<- tady bych chtel ziskat id tlacitka a dal s nim pracovat

 	Serial.print(id);
 	
  }
  

Re: Arduino přerušení

Napsal: 09 dub 2019, 17:22
od gilhad
Uvědom si, že přerušení se volá bez parametrů (a jde o záležitost procesoru, nikoli jazyka, když nastane přerušení, dokončí instrukci, uloží ProgramCounter (ukazující na další instrukci) na stack,nastaví příznak přerušení a skočí na pevné místo v paměti. Když se vracíš z přerušení, tak se shodí příznak přerušení a vrátí se na tu další instrukci. Žádné parametry se tam nepředávají.). Všechny metody instance očekávají jako (nevyřčený) argument ukazatel na příslušnou instanci, tady nemůžou být použity pro přerušení, protože ho prostě nedostanou.

Kromě toho pokud jsi v přerušení, jsou všechna přerušení zakázána a pokud to trvá příliš dlouho, tak se začnou hroutit věci na těch přerušeních závislé (zejména pak komunikace), zatímco věci přerušení používající nefungujou vůbec.

Takže typicky obsluha přerušení jen nastaví pár globálních proměnných a co nejrychleji skončí, aby se procesor vrátil do normálního režimu.

Neřikám, že nejde používat OOP v přerušení, ale není to jednoduché, není to dobrý nápad a pokud opravdu nevíš přesně co děláš, tak to nejspíš nedopadne dobře.

Rozhodně je přwerušení něco naprosto jiného, než když si objekty posílají zprávy o událostech, jako je stisk tlačítka, nebo tak podobně. Něco naprosto jiného.

Re: Arduino přerušení

Napsal: 09 dub 2019, 22:16
od mochr
Děkuji za vyčerpávající odpověď, teď už chápu víc jak to funguje a v projektu na to půjdu jinak. :)