• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Wielowątkowość - aplikacja inteligentny dom
#19
Minęło troszkę czasu i znalazłem  rozwiązanie polegające na tym, że wykorzystam pulling w połączeniu z timerem.  Sprawdzam pin co 10 ms.  Zwarcie do masy powoduje, że zaczynam  zwiększać licznik - jego zadaniem jest obliczenie długości sygnału w stanie zwarcia do masy.  

Jeśli jest zwarty do masy to nic nie robię do czasu aż go nie puszczę.   Dalej jeśli sygnał trwał od 50 ms i był mniejszy niż 1000 ms to na danym wyjściu załączam obwód - czyli w moim wypadku jest to dioda połączą przez rezystor 470R  do wyjścia A0.

Jeśli sygnał był dłuższy lub równy 1000ms to wówczas guzik zmienia swoją funkcję na ściemniacz diody.  To taki prosty programik aby zrozumieć jak to działa. 

Program blokuje procesor co 10 ms. bo co taki czas timer odpala funkcję sprawdzającą stan wejścia.  W tej funkcji można czytać wszystkie wejścia na raz.  Więc jak ktoś ma więcej włączników do obsługi to można to robić w ten właśnie sposób. 


Kod:
#include <Timers.h> /
Timers <1> akcja;
volatile int ledState = 0;

void drimmer (){
 
static int brightness = 250;
analogWrite(A0 , brightness );
      if(brightness >= 50 ){
        brightness = brightness + 1;
      }
      if(brightness == 260 ){
        brightness = brightness - 210;
      }

}


void redinputs() {
  static int licznik;
  int val = digitalRead(D44);
 
  //powrót z niskiego na wyski po wciśnięciu
  if(val == 1 && licznik != 0 ){

       if(licznik > 5  && licznik < 100){
       
            if (ledState > 0 ) {
                  ledState = 0;
                }
            else {
                ledState = 255;
              }
             
              Serial.print("ledstate: ");
              Serial.println(ledState);
              licznik = 0;
              analogWrite(A0, ledState );
              Serial.println("pstryk");
        }
       
       if(licznik >= 100){
       
         licznik = 0;
       
       
       }
     
  }


   if(licznik >= 100 ){
        drimmer();
        Serial.println("drimemr run");
       
   }



 
// załączanie z wysokiego na niski
  if (val == 0 ){
  licznik++;
  }


 
 
 
}





void setup() {
  Serial.begin(115200); 
  delay(3000);
  Serial.println("SERIAL START");
  pinMode(A0, OUTPUT);
  pinMode(D44, INPUT_PULLUP);
   
   akcja.attach(0, 10,  redinputs);
}

void loop() {
   akcja.process();

}
 
Odpowiedź
  


Wiadomości w tym wątku
RE: Wielowątkowość - aplikacja inteligentny dom - przez kamil2234 - 10-04-2021, 23:03

Skocz do:


Przeglądający: 1 gości