Arduino přerušení

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
mochr
Příspěvky: 2
Registrován: 08 dub 2019, 13:01
Reputation: 0

Arduino přerušení

Příspěvek od mochr » 09 dub 2019, 14:45

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);
 	
  }
  

Uživatelský avatar
gilhad
Příspěvky: 778
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Arduino přerušení

Příspěvek od gilhad » 09 dub 2019, 17:22

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.

mochr
Příspěvky: 2
Registrován: 08 dub 2019, 13:01
Reputation: 0

Re: Arduino přerušení

Příspěvek od mochr » 09 dub 2019, 22:16

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. :)

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 12 hostů