Sterowanie bluetooth roletami.

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
StegienMS
Młodszy majsterkowicz
Posty: 16
Rejestracja: 6 lis 2015, 00:47

Sterowanie bluetooth roletami.

Post autor: StegienMS » 6 lis 2015, 01:40

Witam.
Na sam początek napiszę że nie oczekuję żadnego gotowca... Prosił bym o pomoc chociaż w zrozumieniu co jest nie tak w moim programie i co mogę zrobić aby on zadziałał. Dodam tylko że moja przygoda z programowaniem trwa ,,aż całe dwa tygodnie" :D.

Opis programu.
Gdy na telefonie w aplikacji nacisnę on roleta ma się opuszczać aż do krańcówki która ją wyłączy. Gdy w aplikacji nacisnę off roleta ma się podnosić do krańcówki górnej i oczywiście zatrzymać.

Gdy krańcówka zostanie wciśnięta silnik wyłącza się lecz słychać że co 200ms nadal dostaje zasilanie. Moje pytanie: Co zrobić aby program zatrzymał się na krańcówce dolnej i czekał na podanie kolejnego sygnału np. int G=9 (Góra pin 9).

Program oczywiście nie skończony działa tylko do dołu.

int bt;
int D=8; //Opuszczanie rolety
int K=7; //Krańcówka dolna

void setup() {
pinMode(D, OUTPUT);
pinMode(K, INPUT_PULLUP);
Serial.begin(9600);


}

void loop() {
if(Serial.available() > 0){ //Uruchomienie bt
bt = Serial.read();}

if (bt == '1') { // Jeśli wcisnę on
digitalWrite(D, HIGH);} //Opuszczaj roletę
if (digitalRead (K) == LOW){ //Jeśli roleta uruchomi krańcówkę
digitalWrite(D, LOW);} // Wyłącz roletę

delay(200);

}

Tutaj program działa oczywiście tylko w jedną stronę ale ale jest tu prawdopodobnie dużo nieprawidłowości. Jak zrobić to prawidłowo. Proszę o pomoc

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


StegienMS
Młodszy majsterkowicz
Posty: 16
Rejestracja: 6 lis 2015, 00:47

Re: Sterowanie bluetooth roletami.

Post autor: StegienMS » 6 lis 2015, 13:59

Zrobiłem chyba tak jak napisałeś ale coś spierdzieliłem. Nie znam się jeszcze dobrze na łączeniu funkcji mimo że korzystam z książki :)... Zrobiłem coś takiego i po wgraniu silnik ciągle pracuje. Czy między pierwszym if a drugim if mam coś wstawić np && ?

int bt;
int D=8; //Opuszczanie rolety
int K=7; //Krańcówka dolna

void setup() {
pinMode(D, OUTPUT);
pinMode(K, INPUT_PULLUP);
Serial.begin(9600);


}

void loop() {
if(Serial.available() > 0){ //Uruchomienie bt
bt = Serial.read();}

if (bt == '1')
if (digitalRead (K) == LOW);
else; {
digitalWrite(D, HIGH); } // Wyłącz roletę

delay(200);

}
Ostatnio zmieniony 6 lis 2015, 14:03 przez StegienMS, łącznie zmieniany 1 raz.
stiven
Złota rączka
Posty: 1625
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: Sterowanie bluetooth roletami.

Post autor: stiven » 6 lis 2015, 14:11

Kod: Zaznacz cały

  if (bt == '1') { // Jeśli wcisnę on
  if (digitalRead (K) == LOW){ //Jeśli roleta uruchomi krańcówkę
  digitalWrite(D, LOW);} // Wyłącz roletę
  else{
  digitalWrite(D, HIGH);} //Opuszczaj roletę

Można też było w twoim pierwszym programie zrobić coś takiego:

Kod: Zaznacz cały

  if (bt == '1') { // Jeśli wcisnę on
  digitalWrite(D, HIGH);} //Opuszczaj roletę
  if (digitalRead (K) == LOW){ //Jeśli roleta uruchomi krańcówkę 
  bt =  0;
  digitalWrite(D, LOW);} // Wyłącz roletę
Ostatnio zmieniony 6 lis 2015, 14:23 przez stiven, łącznie zmieniany 2 razy.
StegienMS
Młodszy majsterkowicz
Posty: 16
Rejestracja: 6 lis 2015, 00:47

Re: Sterowanie bluetooth roletami.

Post autor: StegienMS » 6 lis 2015, 14:21

Dziękuję bardzo za pomoc. Już rozumiem gdzie popełniłem błąd i o co tu chodzi :). Dale powinienem sobie sam poradzić . Jeśli po zmontowaniu w całość będzie mi to chodziło będę starał się dodać czujnik zmierzchu ale o tym muszę jeszcze sobie poczytać. Jeszcze raz dziękuję za pomoc i pozdrawiam.
StegienMS
Młodszy majsterkowicz
Posty: 16
Rejestracja: 6 lis 2015, 00:47

Re: Sterowanie bluetooth roletami.

Post autor: StegienMS » 7 lis 2015, 00:49

Kolejny problem..... ech. Wszytko działało dopóki nie dołożyłem powrotu. Zastosowałem i ,,&&" ale to i tak nie działa. Będę upierdliwy ale dopiero się uczę. Po prostu musicie wybaczyć :D.

Opis kolejnego problemu. Gdy naciskam on roleta opuszcza się do krańcówki dolnego położenia. Niestety gdy chcę ją podnieść i naciskam np off nic się nie dzieje. Wiem że muszę wyłączyć wcześniejszy warunek aby wszystko ruszyło tylko jak to zrobić. Główkuję tu trochę nad tym lecz mam problemy. W poradnikach jest dużo przykładów ale szczególnie z jednym if itp. dlatego proszę was o kolejną pomoc.

Oto mój cały program

Kod: Zaznacz cały

int bt;
int D=8; //Opuszczanie rolety
int K=7; //Krańcówka dolna
int G=9;  // Podnoszenie rolety
int M=6;  // Krańcówka górna

void setup() { 
pinMode(D, OUTPUT);
pinMode(K, INPUT_PULLUP); 
pinMode(G, OUTPUT);
pinMode(M, INPUT_PULLUP);
Serial.begin(9600);


}

void loop() {
if(Serial.available() > 0){ //Uruchomienie bt
bt = Serial.read();}

if (bt == '1') { // Jeśli wcisnę on
  digitalWrite(D, HIGH); } //Opuszczaj roletę
  if (digitalRead (K) == LOW){ //Jeśli roleta uruchomi krańcówkę 
  bt =  0;
  digitalWrite(D, LOW);} // Wyłącz roletę
  
  if ((bt == '3')&&(digitalRead (K) == HIGH)) { // Jeśli wcisnę on
  digitalWrite(G, HIGH);} //Podnoś roletę
  if (digitalRead (M) == LOW){ //Jeśli roleta uruchomi krańcówkę 
  bt =  0;
  digitalWrite(G, LOW);} // Wyłącz roletę
}
stiven
Złota rączka
Posty: 1625
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: Sterowanie bluetooth roletami.

Post autor: stiven » 7 lis 2015, 01:39

Chyba błąd masz w linijce:

Kod: Zaznacz cały

if ((bt == '3')&&(digitalRead (K) == HIGH)) { // Jeśli wcisnę on
powinno być:

Kod: Zaznacz cały

if ((bt == '3')&&(digitalRead (K) == LOW)) { // Jeśli wcisnę on

Ale zrobiłem taki program:

Kod: Zaznacz cały

int bt;
int D=8; //Opuszczanie rolety
int K=7; //Krańcówka dolna
int G=9;  // Podnoszenie rolety
int M=6;  // Krańcówka górna

int kierunek = 3;

void setup() 
{ 
  pinMode(D, OUTPUT);
  pinMode(K, INPUT_PULLUP); 
  pinMode(G, OUTPUT);
  pinMode(M, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() 
{
  if(Serial.available() > 0){ //Uruchomienie bt
  bt = Serial.read();}

  if((bt == '1') && ((kierunek == 1) || (kierunek == 3)) && (!digitalRead (K) == LOW)) // Jeśli wcisnę on
  { 
    digitalWrite(D, HIGH); //Opuszczaj roletę
  } 
  if (digitalRead (K) == LOW) //Jeśli roleta uruchomi krańcówkę
  {  
    bt =  0;
    kierunek = 0;
    digitalWrite(D, LOW);  // Wyłącz roletę
  } 
  
  if ((bt == '3') && ((kierunek == 0) || (kierunek == 3)) && (!digitalRead (M) == LOW)) // Jeśli wcisnę on
  { 
    digitalWrite(G, HIGH);  //Podnoś roletę
  } 
  if (digitalRead (M) == LOW)  //Jeśli roleta uruchomi krańcówkę 
  { 
    bt =  0;
    kierunek = 1;
    digitalWrite(G, LOW);} // Wyłącz roletę
  }
Wydaje mi się, że warunki zrobiłem już tak, żeby zadziałały zawsze, niezależnie czy roleta jest na dole czy na górze. Nie zadziała tylko wtedy, kiedy w momencie uruchomienia programu roleta nie będzie zahaczać żadnej krańcówki, ale do tego też można dopisać warunek.
StegienMS
Młodszy majsterkowicz
Posty: 16
Rejestracja: 6 lis 2015, 00:47

Re: Sterowanie bluetooth roletami.

Post autor: StegienMS » 7 lis 2015, 01:41

za pomocą else czy coś = 0 ?
StegienMS
Młodszy majsterkowicz
Posty: 16
Rejestracja: 6 lis 2015, 00:47

Re: Sterowanie bluetooth roletami.

Post autor: StegienMS » 7 lis 2015, 01:42

Bo jak coś to będę kombinował bo mam też ręczne przesuwanie rolet albo dopisze jakoś podczas pracy stop rolet. kolejne kilka godzin pracy przede mną :D
razorxx100
Starszy majsterkowicz
Posty: 329
Rejestracja: 1 sie 2014, 22:57

Re: Sterowanie bluetooth roletami.

Post autor: razorxx100 » 7 lis 2015, 01:44

nic sie nie dzieje poniewaz drugi if odrazu ja wylaczy ;) didah sobie np zmienna pozycja i zrob to tak;

Kod: Zaznacz cały

int bt;
int D=8; //Opuszczanie rolety
int K=7; //Krańcówka dolna
int G=9;  // Podnoszenie rolety
int M=6;  // Krańcówka górna
int pozycja;
void setup() { 
pinMode(D, OUTPUT);
pinMode(K, INPUT_PULLUP); 
pinMode(G, OUTPUT);
pinMode(M, INPUT_PULLUP);
Serial.begin(9600);


}

void loop() {
if(Serial.available() > 0){ //Uruchomienie bt
bt = Serial.read();}

if (bt == '1') { // Jeśli wcisnę on
  digitalWrite(D, HIGH); } //Opuszczaj roletę
pozycja=1;
  if (digitalRead (K) == LOW && pozycja == 1){ //Jeśli roleta uruchomi krańcówkę 
  bt =  0;
  digitalWrite(D, LOW);
pozycja=0;
} // Wyłącz roletę
  
  if ((bt == '3')&&(digitalRead (K) == HIGH)) { // Jeśli wcisnę on
  digitalWrite(G, HIGH);
pozycja=0
} //Podnoś roletę
  if (digitalRead (M) == LOW  && pozycja == 0){ //Jeśli roleta uruchomi krańcówkę 
  bt =  0;
  digitalWrite(G, LOW);} // Wyłącz roletę
}
stiven
Złota rączka
Posty: 1625
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: Sterowanie bluetooth roletami.

Post autor: stiven » 7 lis 2015, 01:53

StegienMS no właśnie spodziewałem się, że masz ręczne sterowanie, dlatego przewidziałem obydwa ustawienia, sprawdź ten mój kod najpierw czy działa, razorxx100 teraz dał też swój. Jak któryś będzie działał dobrze to napisz, jutro ja albo ktoś inny ci podpowie co zrobić z tym dodatkowym warunkiem.
StegienMS
Młodszy majsterkowicz
Posty: 16
Rejestracja: 6 lis 2015, 00:47

Re: Sterowanie bluetooth roletami.

Post autor: StegienMS » 7 lis 2015, 02:08

Ten od Stivena nie działa poprawnie. Staram się rozszyfrować co jest nie tak i będę sprawdzał resztę programów. Naprawdę dziękuję za pomoc. Sporo można się nauczyć w praktyce.
StegienMS
Młodszy majsterkowicz
Posty: 16
Rejestracja: 6 lis 2015, 00:47

Re: Sterowanie bluetooth roletami.

Post autor: StegienMS » 7 lis 2015, 02:09

Ten pierwszy który wysłaleś
StegienMS
Młodszy majsterkowicz
Posty: 16
Rejestracja: 6 lis 2015, 00:47

Re: Sterowanie bluetooth roletami.

Post autor: StegienMS » 7 lis 2015, 02:13

Jest problem z przyciskiem bt '3'. Jeśli jest pozycja dolna i wciskam do góry nic się nie dieje
razorxx100
Starszy majsterkowicz
Posty: 329
Rejestracja: 1 sie 2014, 22:57

Re: Sterowanie bluetooth roletami.

Post autor: razorxx100 » 7 lis 2015, 03:54

Kod: Zaznacz cały

int bt;
int D=8; //Opuszczanie rolety
int K=7; //Krańcówka dolna
int G=9;  // Podnoszenie rolety
int M=6;  // Krańcówka górna
int pozycja;
void setup() { 
pinMode(D, OUTPUT);
pinMode(K, INPUT_PULLUP); 
pinMode(G, OUTPUT);
pinMode(M, INPUT_PULLUP);
Serial.begin(9600);


}

void loop() {
if(Serial.available() > 0){ //Uruchomienie bt
bt = Serial.read();}

if (bt == '1') { // Jeśli wcisnę on
  digitalWrite(D, HIGH); } //Opuszczaj roletę
pozycja=1;
  if (digitalRead (K) == LOW && pozycja == 1){ //Jeśli roleta uruchomi krańcówkę 
  bt =  0;
  digitalWrite(D, LOW);
pozycja=0;
} // Wyłącz roletę
  
  if ((bt == '3') { // Jeśli wcisnę on
  digitalWrite(G, HIGH);
pozycja=0
} //Podnoś roletę
  if (digitalRead (M) == LOW  && pozycja == 0){ //Jeśli roleta uruchomi krańcówkę 
  bt =  0;
  digitalWrite(G, LOW);} // Wyłącz roletę
}
Zobacz ten kod.
stiven
Złota rączka
Posty: 1625
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: Sterowanie bluetooth roletami.

Post autor: stiven » 7 lis 2015, 10:30

Ten kod od razorxx100 będzie dobry, tylko średnika brakuje w jednym miejscu, a ja poprawiłem swój kod. Jeden i drugi będzie działał obojętnie w jakiej pozycji będzie roleta, nie musiałem nic dopisywać, tylko właśnie usunąłem część z warunków, niepotrzebnie to wpisałem wcześniej.

Teraz jak są inaczej warunki napisane w tym moim kodzie, jest dodatkowa zmienna wykorzystana, to nie trzeba zerować zmiennej bt. Kod razorxx100 jest trochę inaczej napisany i tam akurat musi to zostać. W moim kodzie to właściwie musi być to usunięte, bo jak roleta była na dole, to bt było ustawiane na 0 przed ifem podnoszącym roletę i dlatego nie działało podnoszenie.

Kod: Zaznacz cały

int bt;
int D=8; //Opuszczanie rolety
int K=7; //Krańcówka dolna
int G=9;  // Podnoszenie rolety
int M=6;  // Krańcówka górna

int kierunek = 3;

void setup() 
{ 
  pinMode(D, OUTPUT);
  pinMode(K, INPUT_PULLUP); 
  pinMode(G, OUTPUT);
  pinMode(M, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() 
{
  if(Serial.available() > 0){ //Uruchomienie bt
  bt = Serial.read();}

  if((bt == '1') && ((kierunek == 1) || (kierunek == 3))) // Jeśli wcisnę on
  { 
    digitalWrite(D, HIGH); //Opuszczaj roletę
  } 
  if (digitalRead (K) == LOW) //Jeśli roleta uruchomi krańcówkę
  {  
    kierunek = 0;
    digitalWrite(D, LOW);  // Wyłącz roletę
  } 
  
  if ((bt == '3') && ((kierunek == 0) || (kierunek == 3))) // Jeśli wcisnę on
  { 
    digitalWrite(G, HIGH);  //Podnoś roletę
  } 
  if (digitalRead (M) == LOW)  //Jeśli roleta uruchomi krańcówkę 
  { 
    kierunek = 1;
    digitalWrite(G, LOW);} // Wyłącz roletę
  }
StegienMS
Młodszy majsterkowicz
Posty: 16
Rejestracja: 6 lis 2015, 00:47

Re: Sterowanie bluetooth roletami.

Post autor: StegienMS » 7 lis 2015, 10:40

Stawiam piwo :D.... Faktycznie działa. Ja wczoraj walczyłem do 2 w nocy lecz mój poziom umiejętności nie pozwolił tego uruchomić. Już wszystko działa. Dzięki panowie.
stiven
Złota rączka
Posty: 1625
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: Sterowanie bluetooth roletami.

Post autor: stiven » 7 lis 2015, 10:55

Krapi masz rację, niepotrzebnie to tak zrobiłem z tą zmienną. No ale działa też. Tam w warunkach jest OR i int kierunek = 3 jest po to, żeby po włączeniu programu mogło zadziałać i podnoszenie i opuszczanie za pierwszym razem.

Tam w tym kodzie Twoim brakuje klamerek zamykających do tych głównych ifów.
StegienMS
Młodszy majsterkowicz
Posty: 16
Rejestracja: 6 lis 2015, 00:47

Re: Sterowanie bluetooth roletami.

Post autor: StegienMS » 7 lis 2015, 13:04

Dzisiaj montuje wszystko w całość. Postaram się dzisiaj zamieścić zdjęcia z montażu.
razorxx100
Starszy majsterkowicz
Posty: 329
Rejestracja: 1 sie 2014, 22:57

Re: Sterowanie bluetooth roletami.

Post autor: razorxx100 » 7 lis 2015, 19:31

Czekamy z niecierpliwoscia ;)
StegienMS
Młodszy majsterkowicz
Posty: 16
Rejestracja: 6 lis 2015, 00:47

Re: Sterowanie bluetooth roletami.

Post autor: StegienMS » 7 lis 2015, 20:10

No po 6 godzinach silnik zamontowany roleta ustawiona i krańcówki zamontowane lecz jak zwykle problem.... Okazało się że miałem uszkodzoną dolną krańcówke i program się nie zatrzymywał :-D. Zdjęcia zrobione jutro może coś wrzucę :-).
StegienMS
Młodszy majsterkowicz
Posty: 16
Rejestracja: 6 lis 2015, 00:47

Re: Sterowanie bluetooth roletami.

Post autor: StegienMS » 9 lis 2015, 18:02

Opisać swoje wykonanie tutaj czy w projektach ?
StegienMS
Młodszy majsterkowicz
Posty: 16
Rejestracja: 6 lis 2015, 00:47

Re: Sterowanie bluetooth roletami.

Post autor: StegienMS » 9 lis 2015, 20:47

Krapi niestety Twój program nie działa poprawnie a sprawdzam już na podłączonej rolecie. Jeszcze go sprawdzę i poszperam w nim ale coś tu nie gra.
StegienMS
Młodszy majsterkowicz
Posty: 16
Rejestracja: 6 lis 2015, 00:47

Re: Sterowanie bluetooth roletami.

Post autor: StegienMS » 9 lis 2015, 21:11

Skonfigurowałem. Usunąłem w setup kierunek i pozamieniałem te X i Y i tak dalej. będę próbował jeszcze. Problem mam z programem kolegi wcześniej bo po połączeniu bluetooth i naciśnięciu rozwijania roleta rozwija się i nie zatrzymuje się na krańcówce. Staje tylko na pozycji górnej.
stiven
Złota rączka
Posty: 1625
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: Sterowanie bluetooth roletami.

Post autor: stiven » 9 lis 2015, 21:26

No to jak to jest, wcześniej działało a teraz już nie?
Jest takie cykanie silnika jak wcześniej pisałeś czy teraz w ogóle się nie wyłącza? Jeśli w ogóle się nie wyłącza, to nie wina programu tylko połączenia.
StegienMS
Młodszy majsterkowicz
Posty: 16
Rejestracja: 6 lis 2015, 00:47

Re: Sterowanie bluetooth roletami.

Post autor: StegienMS » 14 lis 2015, 00:22

https://www.youtube.com/watch?v=iLd1g43 ... RKlBj9cFRG

To jest link do filmu z całym wykonaniem.
ODPOWIEDZ

Strony partnerskie: