Lekka modyfikacja kodu (czasowy włącznik)

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
ODPOWIEDZ
Awatar użytkownika
Gangus
Młodszy majsterkowicz
Posty: 7
Rejestracja: 3 sty 2019, 00:56

Lekka modyfikacja kodu (czasowy włącznik)

Post autor: Gangus » 3 sty 2019, 01:10

Witam, na wstępie informuję że jestem początkującym i to może jakaś pierdułka ale nie potrafię sobie z tym poradzić. A więc chodzi o to że w tym kodzie chcę zrobić tak że pin 9 włączał się tylko na określony czas po czym się wyłącza. Proszę o pomoc bo sam próbowałem to ogarnąć ale bez powodzenia.

Kod: Zaznacz cały

/*
Lamp 1 connected to PinOut 2 Arduino
Lamp 2 connected to PinOut 3 Arduino
Lamp 3 connected to PinOut 4 Arduino
Lamp 4 connected to PinOut 5 Arduino
Lamp 5 connected to PinOut 6 Arduino
Lamp 6 connected to PinOut 7 Arduino
Lamp 7 connected to PinOut 8 Arduino
Lamp 8 connected to PinOut 9 Arduino
--->you can connected to relay modul 8 channel

Serial data sending from Bluetooth Controll Lamp.apk
data '1'-'8' to on is lamp 1-8
data 'A'-'H' to off is lamp 1-8
data '9' to on ALL is lamp
data 'I' to off ALL is lamp
======================================================================================*/

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); //Pin10 RX , Pin 11 TX connected to--> Bluetooth TX,RX

#define Lamp1 2
#define Lamp2 3
#define Lamp3 4
#define Lamp4 5
#define Lamp5 6
#define Lamp6 7
#define Lamp7 8
#define Lamp8 9

//If Out to active Low change ON 0 and OFF 1
//If Out to active High change ON 1 and OFF 0
#define ON 0
#define OFF 1
char val;
String statusLamp1,statusLamp2,statusLamp3,statusLamp4,statusLamp5,statusLamp6,statusLamp7,statusLamp8;

void setup() {
  pinMode(Lamp1,OUTPUT);digitalWrite (Lamp1,OFF);
  pinMode(Lamp2,OUTPUT);digitalWrite (Lamp2,OFF);
  pinMode(Lamp3,OUTPUT);digitalWrite (Lamp3,OFF);
  pinMode(Lamp4,OUTPUT);digitalWrite (Lamp4,OFF);
  pinMode(Lamp5,OUTPUT);digitalWrite (Lamp5,OFF);
  pinMode(Lamp6,OUTPUT);digitalWrite (Lamp6,OFF);
  pinMode(Lamp7,OUTPUT);digitalWrite (Lamp7,OFF);
  pinMode(Lamp8,OUTPUT);digitalWrite (Lamp8,OFF);
  mySerial.begin(9600);
  Serial.begin(9600);
}

void loop() {
//cek data serial from bluetooth android App
if( mySerial.available() >0 ) {
    val = mySerial.read();
    Serial.println(val);
}
//Lamp is on
  if( val == '1' ) {
    digitalWrite(Lamp1,ON); statusLamp1="1"; }
  else if( val == '2' ) {
    digitalWrite(Lamp2,ON); statusLamp2="2"; }
  else if( val == '3' ) {
    digitalWrite(Lamp3,ON); statusLamp3="3"; }
  else if( val == '4' ) {
    digitalWrite(Lamp4,ON); statusLamp4="4"; }
  else if( val == '5' ) {
    digitalWrite(Lamp5,ON); statusLamp5="5"; }
  else if( val == '6' ) {
    digitalWrite(Lamp6,ON); statusLamp6="6"; }
  else if( val == '7' ) {
    digitalWrite(Lamp7,ON); statusLamp7="7"; }
  else if( val == '8' ) {
    digitalWrite(Lamp8,ON); statusLamp8="8"; }
  else if( val == '9' ) {
    digitalWrite(Lamp1,ON); statusLamp1="1"; 
    digitalWrite(Lamp2,ON); statusLamp2="2"; 
    digitalWrite(Lamp3,ON); statusLamp3="3"; 
    digitalWrite(Lamp4,ON); statusLamp4="4"; 
    digitalWrite(Lamp5,ON); statusLamp5="5"; 
    digitalWrite(Lamp6,ON); statusLamp6="6"; 
    digitalWrite(Lamp7,ON); statusLamp7="7"; 
    digitalWrite(Lamp8,ON); statusLamp8="8"; 
 }
 //Lamp is off
  else if( val == 'A' ) {
    digitalWrite(Lamp1,OFF); statusLamp1="A"; }
  else if( val == 'B' ) {
    digitalWrite(Lamp2,OFF); statusLamp2="B"; }
  else if( val == 'C' ) {
    digitalWrite(Lamp3,OFF); statusLamp3="C"; }
  else if( val == 'D' ) {
    digitalWrite(Lamp4,OFF); statusLamp4="D"; }
  else if( val == 'E' ) {
    digitalWrite(Lamp5,OFF); statusLamp5="E"; }
  else if( val == 'F' ) {
    digitalWrite(Lamp6,OFF); statusLamp6="F"; }
  else if( val == 'G' ) {
    digitalWrite(Lamp7,OFF); statusLamp7="G"; }
  else if( val == 'H' ) {
    digitalWrite(Lamp8,OFF); statusLamp8="H"; }
  else if( val == 'I' ) {
    digitalWrite(Lamp1,OFF); statusLamp1="A";
    digitalWrite(Lamp2,OFF); statusLamp2="B";
    digitalWrite(Lamp3,OFF); statusLamp3="C";
    digitalWrite(Lamp4,OFF); statusLamp4="D";
    digitalWrite(Lamp5,OFF); statusLamp5="E";
    digitalWrite(Lamp6,OFF); statusLamp6="F";
    digitalWrite(Lamp7,OFF); statusLamp7="G";
    digitalWrite(Lamp8,OFF); statusLamp8="H";
 }
  //synchronize Arduino to APK
 else if( val == 'S' ) {
    //send data to android apk
    delay(500);    
    mySerial.println(statusLamp1+statusLamp2+statusLamp3+statusLamp4+statusLamp5+statusLamp6+statusLamp7+statusLamp8+"J"); //delay(500);
    val=' ';
 }
}


//Arduino project created by: pujar 
Ostatnio zmieniony 3 sty 2019, 12:00 przez Gangus, łącznie zmieniany 1 raz.

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


Awatar użytkownika
Marhef
Złota rączka
Posty: 1165
Rejestracja: 18 lis 2011, 02:18

Re: Lekka modyfikacja kodu (czasowy włącznik)

Post autor: Marhef » 3 sty 2019, 09:14

A co próbowałeś zmienić? I w jaki sposób?
I jak to teraz działa?
A w ogóle sam napisałeś ten kod? Bo proponuję takie podejście do nauki. Przerabianie cudzych kodów nie zawsze jest łatwiejsze. A i uczyć się jest trudniej.
Awatar użytkownika
Gangus
Młodszy majsterkowicz
Posty: 7
Rejestracja: 3 sty 2019, 00:56

Re: Lekka modyfikacja kodu (czasowy włącznik)

Post autor: Gangus » 3 sty 2019, 12:12

Jakich zmian dokładnie próbowałem to nie jestem w stanie napisać bo to było już jakiś czas temu, a z tego co pamiętam to nie mogłem tego wgrać na płytkę. Ten kod został pobrany ze strony aplikacji.
Awatar użytkownika
Marhef
Złota rączka
Posty: 1165
Rejestracja: 18 lis 2011, 02:18

Re: Lekka modyfikacja kodu (czasowy włącznik)

Post autor: Marhef » 3 sty 2019, 12:40

Jakiej aplikacji?
Jak to teraz działa? Wyjście 9 załącza się dopóki nie wyślesz 'H' albo 'I'?
A w ogóle, chcesz gotowca, czy się dowiedzieć jak to zrobić?
Awatar użytkownika
Gangus
Młodszy majsterkowicz
Posty: 7
Rejestracja: 3 sty 2019, 00:56

Re: Lekka modyfikacja kodu (czasowy włącznik)

Post autor: Gangus » 3 sty 2019, 15:14

Aplikacja nazywa się "Bluetooth Control Lamp" ale to nie jest takie ważne, bo mam już własną aplikację. Działa to tak, że muszę wysłać "8" żeby włączyć a "H" żeby wyłączyć pin 9. Cyfry "1-8" są do włączania a litery "A-H" są do wyłączania. Wolę gotowca, ale też nie pogardzę informacją jak to zrobić.
Edit: A chcę zrobić tak że pin 9 włącza się na określony czas i się wyłącza i to samo z pinem 8.
Awatar użytkownika
Marhef
Złota rączka
Posty: 1165
Rejestracja: 18 lis 2011, 02:18

Re: Lekka modyfikacja kodu (czasowy włącznik)

Post autor: Marhef » 3 sty 2019, 16:32

A zmiana może zablokować działanie programu na czas załączenia lampy, czy możesz w tym czasie coś odbierać?
Awatar użytkownika
Gangus
Młodszy majsterkowicz
Posty: 7
Rejestracja: 3 sty 2019, 00:56

Re: Lekka modyfikacja kodu (czasowy włącznik)

Post autor: Gangus » 3 sty 2019, 16:37

Tego to w sumie nawet nie wiem, ale wydaje mi się, że program się nie blokuje.
Edit: To może napiszę coś, co powinienem zrobić na początku, mam arduino nano, moduł bluetooth oraz moduł z 8 przekaźnikami.
Awatar użytkownika
Marhef
Złota rączka
Posty: 1165
Rejestracja: 18 lis 2011, 02:18

Re: Lekka modyfikacja kodu (czasowy włącznik)

Post autor: Marhef » 4 sty 2019, 09:18

Nie do końca o to mi chodziło. Może tak, jak ja to rozumiem:
Wysyłasz 1-8 -> zapala się odpowiednia lampa i świeci cały czas.
Wysyłasz 9 -> zapalają się wszystkie lampy i świecą cały czas.
Wysyłasz A-H -> gaśnie odpowiednia lampa.
Wysyłasz I -> gasną wszystkie lampy.
A chcesz mieć tak (gaszenie lamp rozumiem że bez zmian?):
Wysyłasz 1-7 -> zapala się odpowiednia lampa i świeci cały czas.
Wysyłasz 8 -> zapala się lampa na pinie 9 i świeci przez określony czas (np. 10 sekund).
Wysyłasz 9 -> zapalają się wszystkie lampy i świecą cały czas. Co z lampą na pinie 9? Ma świecić cały czas? Czy tylko przez określony czas?
I co z gaszeniem lampy na pinie 9? Możesz wyłączyć wysyłając H lub I, czy ma się świecić przez cały ustawiony czas?
Można to zrobić na dwa sposoby. Z blokowaniem działania (jak większość początkujących robi) lub bez blokowania.
Pierwsza opcja jest o kant... stołu rozbić. Jeżeli w trakcie odliczania czasu nadleci np. 1, to lampa się nie zapali.
Drugie rozwiązanie jest duuużo lepsze, bo w trakcie świecenia lampy na pinie 9 możesz zapalać/gasić inne lampy.
Tylko doprecyzuj, jak to ma działać! Weź pod uwagę wszystkie możliwości!
Awatar użytkownika
Gangus
Młodszy majsterkowicz
Posty: 7
Rejestracja: 3 sty 2019, 00:56

Re: Lekka modyfikacja kodu (czasowy włącznik)

Post autor: Gangus » 5 sty 2019, 02:12

To opiszę Ci, do czego chcę to wykorzystać, chodzi o to, że od 1 do 6 chciałbym podłączyć jakieś urządzenia elektryczne w pokoju a pod 7-8 chciałbym podłączyć roletę (mały silnik z przekładnią) i jeżeli roleta np. będzie opuszczona a ja wyślę "9" to ponownie będzie ją opuszczać, co skutkuje przekręceniem rolety. Chciałbym zrobić tak, że włączając "wszystko" uruchamia tylko urządzenia elektryczne, a roletę zostawia w spokoju. A po wysłaniu 8 opuszcza, a 9 podnosi roletę. W skrócie 1-6 zostaje bez zmian, 7 i 8 włącza 2 przekaźniki na pewien czas. Bo podejrzewam, że do samej rolety potrzebuję 2 przekaźników.
gavron
Majsterkowicz
Posty: 76
Rejestracja: 17 sie 2018, 07:43

Re: Lekka modyfikacja kodu (czasowy włącznik)

Post autor: gavron » 5 sty 2019, 08:51

A skąd twój układ ma wiedzieć czy roleta jest opuszczona czy podniesiona? Owszem na początku możesz zsynchronizować i liczyć że będzie ok ale co w przypadku braku prądu? Już się może rozsynchronizowac

Wysłane z mojego Neffos Y5s przy użyciu Tapatalka

Awatar użytkownika
Gangus
Młodszy majsterkowicz
Posty: 7
Rejestracja: 3 sty 2019, 00:56

Re: Lekka modyfikacja kodu (czasowy włącznik)

Post autor: Gangus » 5 sty 2019, 09:09

To nie układ ma wiedzieć tylko ja, bo to ja będę naciskał na aplikacji odpowiednie guziki. To ma być manualne a nie że konkretnie o danej godzinie ma mi podnieść roletę. Chodzi mi o to że np. nacisnę guzik do opuszczania to mi ją opuści do końca a nie że muszę patrzeć na nią i w odpowiednim czasie wyłączyć.
gavron
Majsterkowicz
Posty: 76
Rejestracja: 17 sie 2018, 07:43

Re: Lekka modyfikacja kodu (czasowy włącznik)

Post autor: gavron » 5 sty 2019, 09:41

Ja nawet nie mówię o automacie ale co się stanie jak się pomyślisz? Już przy tworzeniu aplikacji czy układu trzeba brać taki problem pod uwagę.... Powinieneś mieć jakieś informacje zwrotna że jest up/down albo brak stanu oznacza "w trakcie". Nie jest to trudne do zrobienia jeśli nie masz takiego stanu bo wystarczą dwa najtańsze kontaktrony a na pewno taka informacja bardzo Ci się przyda.

Wysłane z mojego Neffos Y5s przy użyciu Tapatalka

Awatar użytkownika
Marhef
Złota rączka
Posty: 1165
Rejestracja: 18 lis 2011, 02:18

Re: Lekka modyfikacja kodu (czasowy włącznik)

Post autor: Marhef » 7 sty 2019, 09:52

Kolego Gangus, nie idź tą drogą ;-)
Jak wyżej koledzy doradzili, przy silnikach poleganie tylko na czasie pracy nie jest dobrym rozwiązaniem. Jak wspomniał gavron, co w przypadku braku prądu w połowie opuszczania? Przy kolejnym podnoszeniu/opuszczaniu roleta się przekręci.

Programowo takie czasowe włączenie jest bardzo prosto zrobić. Ale zastanów się, czy ma to sens.

Podpowiedź z krańcówkami wydaje mi się najrozsądniejsza. Montujesz dwa kontaktrony na oknie - przy skrajnym położeniu rolety. Na rolecie montujesz mały magnes, który będzie załączał kontaktron. A potem obsługujesz zdarzenia od kontaktronów w programie. I na pewno będzie działało. Nawet po zaniku zasilania (oczywiście przy braku prądu nie będzie działać. Bo "urządzenia zasilane z reguły działają lepiej")
gavron
Majsterkowicz
Posty: 76
Rejestracja: 17 sie 2018, 07:43

Re: Lekka modyfikacja kodu (czasowy włącznik)

Post autor: gavron » 7 sty 2019, 15:37

Ale to też nie jest dobre rozwiązanie bo równie dobrze możesz ją ręcznie opuścić podnieść... Najlepsze sa kontsktrony lub krańcówki.. ogólnie poprostu trzeba mieć info "roleta opuszczona" "roleta podniesiona" i wtedy będziesz spać spokojnie :)

Wysłane z mojego Neffos Y5s przy użyciu Tapatalka

Awatar użytkownika
Marhef
Złota rączka
Posty: 1165
Rejestracja: 18 lis 2011, 02:18

Re: Lekka modyfikacja kodu (czasowy włącznik)

Post autor: Marhef » 7 sty 2019, 16:09

Zgadzam się z przedmówcą. To, że dziś roleta w ustawionym czasie przejedzie określoną odległość nie oznacza, że za pół roku też tak będzie. Silnik się zużywa, przekładnie się zużywają. "Łożyska" w rolecie też. Rosną opory, silnik potrzebuje więcej czasu na dojechanie w określone miejsce.
Awatar użytkownika
Gangus
Młodszy majsterkowicz
Posty: 7
Rejestracja: 3 sty 2019, 00:56

Re: Lekka modyfikacja kodu (czasowy włącznik)

Post autor: Gangus » 8 sty 2019, 22:27

Daliście mi do myślenia z tymi krańcówkami :) Zastosuje je i tak jak napisałeś Marhef postaram się sam napisać kod :) Dziękuję wszystkim za odpowiedzi i wezmę wszystkie wskazówki pod uwagę :)
Awatar użytkownika
Marhef
Złota rączka
Posty: 1165
Rejestracja: 18 lis 2011, 02:18

Re: Lekka modyfikacja kodu (czasowy włącznik)

Post autor: Marhef » 9 sty 2019, 09:07

Jeśli coś nie będzie działało, pytaj śmiało. Postaramy się pomóc.
ODPOWIEDZ

Strony partnerskie: