Skocz do zawartości

Czujniki do systemu sterowania oświetleniem.


Pomocna odpowiedź

26 minut temu, ethanak napisał:

No i jesteś w komfortowej sytuacji - jeśli wyjdzie to dobrze, jeśli nie to wiesz gdzie szukać gotowca 🙂

 

Właśnie.

 

Dziękuję za wszystkie odpowiedzi. Biorę się do roboty🙂

  • Lubię! 2
  • 4 tygodnie później...
(edytowany)

W końcu udało mi się napisać program:😃

#include <Servo.h>;
#define s1 2 //czujnik bliżej wejścia
#define s2 3 //czujnik dalej od wejścia
Servo serwomechanizm;
volatile int stan=1;
int lOsob=0;
boolean wlaczono=false;
void setup() {
  // put your setup code here, to run once:
  serwomechanizm.attach(7);
  serwomechanizm.write(90);
  pinMode(s1,INPUT_PULLUP);
  pinMode(s2,INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(s1),czujnik1,FALLING);
  attachInterrupt(digitalPinToInterrupt(s2),czujnik2,FALLING);
}
void loop() {
  // put your main code here, to run repeatedly:
  switch(stan){
    case 1:  //oczekiwanie na sygnał z jakiegokolwiek czujnika
    break;       
    case 2:  //pomiedzy sygnalem z 1 a 2 czujnika (wchodzenie)
    break;
    case 3:  //pomiędzy sygnnałem z 2 a 1 czujnika(wychodzenie)
    break;
    case 4:  //po wejściu
      lOsob++;
      stan=1;
    break;
    case 5:  //po wyjściu
      lOsob--;
      stan=1;
    break;
      }
  if(lOsob>0&&wlaczono==false){
    wlacz();
  }
    else if(lOsob==0&&wlaczono==true){
    wylacz();
  }
  if(lOsob<0){
    lOsob=0;
  }
}
void czujnik1(){
  if(stan==1){
    stan=2;
}
    else if(stan==3){
      stan=5;
}
}
void czujnik2(){
  if(stan==1){
    stan=3;
}
    else if(stan==2){
      stan=4;
    }
}
void wlacz(){
  serwomechanizm.write(120);
  delay(200);
  serwomechanizm.write(90);
  wlaczono=true;
}
void wylacz(){
  serwomechanizm.write(60);
  delay(200);
  serwomechanizm.write(90);
  wlaczono=false;
}

Teraz pora na ogarnięcie wszystkiego od strony sprzętowej.

Edytowano przez StefanekP
  • Lubię! 1

Tutaj pojawia się problem- na Arduino Uno wszystko działa poprawnie, ale jak próbowałem odpalić to na atmedze 8, to już nie do końca- program jakby nie zmieniał zmiennej "wlaczono". Tzn. jak się przesunie coś w kierunku od czujnika s1 do s2, to za każdym razem wykonuje się funkcja wlacz, niezależnie od wartości zmiennej wlaczono. A w drugą stronę nie działa w ogóle. Wie ktoś może, dlaczego tak się dzieje i jak to rozwiązać?

Teraz zauważyłem że wszystko działa poprawnie, ale tylko na mikrokontrolerze, na który nie wgrywałem wcześniej żadnego programu. Czy to oznacza, że jak wgram jakiś kod na mikrokontroler to on tam zostaje na zawsze i nie da się wykorzystać scalaka do niczego innego? Czy problem jest gdzie indziej?

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...