Skocz do zawartości

Czujniki do systemu sterowania oświetleniem.


StefanekP

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
Link do komentarza
Share on other sites

(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
Link do komentarza
Share on other sites

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ć?

Link do komentarza
Share on other sites

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?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.