Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Janos250

    őstag

    válasz Bazs87 #5277 üzenetére

    Multitasking:
    Már régebben próbáltam, csak nagyjából emlékszem rá.
    Van Arduinon a loop1, loop2,...... módszer, a scheduler libraryt használja.
    Ez - úgy rémlik - Atmel procikkal is megy.
    Valamin próbáltam működött, de már nem emlékszem többre.
    Arra sem, hogy melyik schedulert használtam, mert - úgy rémlik - több is van.
    Amikor waitet talál, akkor átugrik a következő loopra. Ha nincs wait, akkor kell egy wait(0), vagy ami ugyanez: yield()
    https://www.arduino.cc/en/Reference/SchedulerYield

    Amire nekem kellet, arra a ticker is megfelelt.

    Most nincs időm rendezgetni, bemásolok ide egy program egy részletét. Ha nem érted, majd kérdezel. Két fűtést vezérel, hogy az 5 sec [PWMdurationHeat1Sec] hány százalékában legyen bekapcsolva. (A százalékokat WEBen állítgatjuk percentHeat1on, percentKolonna )
    Ne kérdezd, hogy mi az értelme, mert demonstráció IOT-re.
    Kell Ticker típusú objektum, nálam kettő (Ticker heat1 ; Ticker heatKolonna ; )
    Mindkettőhöz tartozik egy bekapcsoló (ON) és egy kikapcsoló (OFF) függvény [ void heat1ON () ......]
    A lényeg, hogy a bekapcsoló, miután bekapcsolta a fűtést, időzíti [heat1.once], hogy mikor fusson le a kikapcsoló. Egy korai verziót írok be, amiben ellenőrző kiírások is vannak..
    A setupban mindkettőre kell egy indítás [ heat1OFF () ; heatKolonnaOFF (); ]
    Szépen elketyegnek a program többi részétől függetlenül.
    Az elnevezések némileg logikátlanok, de hirtelenjében nem találom azt a verziót, amin már át vannak nevezve.

    Ticker heat1 ;
    Ticker heatKolonna ;

    float PWMdurationHeat1Sec = 5 ;

    uint8_t percentHeat1on = 20 ;
    uint8_t percentHeat1off = 100 - percentHeat1on ;

    uint8_t percentKolonna = 80 ;
    uint8_t percentKolonnaoff = 100 - percentKolonna ;

    uint8_t heat1pin = 12 ;
    uint8_t kolonnaPin = 13 ;

    void heat1ON () {
    digitalWrite(heat1pin, HIGH) ;
    heat1.once ( (PWMdurationHeat1Sec * percentHeat1on / 100) , heat1OFF ) ;
    Serial.print ("heat1 be"); Serial.println(" percentHeat1on = "); Serial.println(percentHeat1on);
    } ;

    void heat1OFF () {
    digitalWrite(heat1pin, LOW) ;
    heat1.once ( (PWMdurationHeat1Sec * ( 100 - percentHeat1on ) / 100 ) , heat1ON ) ;
    Serial.println("heat1 ki");
    } ;

    void heatKolonnaON () {
    digitalWrite(kolonnaPin, HIGH) ;
    heatKolonna.once ( (PWMdurationHeat1Sec * percentKolonna / 100) , heatKolonnaOFF ) ;
    Serial.print ("kolonna be"); Serial.print(" percentkolonna = "); Serial.println(percentKolonna);
    } ;

    void heatKolonnaOFF () {
    digitalWrite(kolonnaPin, LOW) ;
    heatKolonna.once ( (PWMdurationHeat1Sec * ( 100 - percentKolonna ) / 100 ) , heatKolonnaON ) ;
    Serial.print ("kolonna ki");
    Serial.print(" percentkolonna = "); Serial.println(percentKolonna);
    } ;

Új hozzászólás Aktív témák