kacpermateusz7 Napisano Lipiec 27, 2021 Udostępnij Napisano Lipiec 27, 2021 Witam wszystkich😀 Potrzebuje pomocy w dokończeniu kodu dla arduino, ale zacznijmy od początku. W moim projekcie zastosowałem 2 przekaźniki, arduino uno, moduł bluetooth HC-06 oraz 2 przyciski. Całość ma sterować elektrozaworem oraz pompą do podlewania. Do tej pory udało mi się napisać kod, dzięki któremu mogę zmieniać stan przekaźników z wysokiego na niski i na odwrót za pomocą telefonu i modułu bluetooth. Teraz potrzebuje pomocy w dodaniu do kodu jeszcze możliwości zmiany stanów przekaźników za pomocą przycisków podłączonych pod pin 6 i 7 w arduino, tak abym mógł włączać i wyłączać elektrozawór i pompę z poziomu aplikacji w telefonie oraz przycisków, które znajdować się będą przy arduino. Poniżej przesyłam kod. #include <SoftwareSerial.h> SoftwareSerial mySerial(12, 13); char val; void setup() { pinMode(2,OUTPUT); pinMode(3,OUTPUT); digitalWrite(2,HIGH); digitalWrite(3,HIGH); mySerial.begin(9600); Serial.begin(9600); } void loop() { if( mySerial.available() >0 ) { val = mySerial.read(); Serial.println(val); } if( val == 'a' ) { flag2 = LOW; digitalWrite(2,LOW); } else if( val == 'b' ) { digitalWrite(3,LOW); } else if( val == '9' ) { digitalWrite(2,LOW); digitalWrite(3,LOW); } else if( val == 'A' ) { digitalWrite(2,HIGH); } else if( val == 'B' ) { digitalWrite(3,HIGH); } else if( val == 'I' ) { digitalWrite(2,HIGH); digitalWrite(3,HIGH); } } Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Lipiec 27, 2021 Udostępnij Lipiec 27, 2021 Nie powielaj watku bo to i tak nic nie da...😉 do tego kodu co teraz dodaj obsluge guzikow podobnie jak z blue zrobiles...na koncu kodu zmiennej val przypisz zero tak zeby w loop tylko raz zostal spelniony warunek...wtedy gdy wcisniesz ktorys guzik to zostanie wykonane twoje polecenie i czekasz na nastepne czy to z guzuka czy z blue... Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Lipiec 27, 2021 Udostępnij Lipiec 27, 2021 4 minuty temu, kacpermateusz7 napisał: udało mi się napisać kod, dzięki któremu mogę zmieniać stan przekaźników z wysokiego na niski i na odwrót za pomocą telefonu i modułu bluetooth Hm... na pewno kod jest prawidłowy? Co się stanie, jeśli: wciskasz klawisz na telefonie program odbiera i wstawia go do 'val' następuje kolejny obrót pętli loop nie odbierasz żadnego znaku Co będzie w 'val'? Czy na pewno chcesz, aby program w nieskończoność powtarzał ostatnia operację? Jeśli to rozwiążesz, podłączenie przycisków będzie bardzo proste. Cytuj Link do komentarza Share on other sites More sharing options...
H1M4W4R1 Lipiec 27, 2021 Udostępnij Lipiec 27, 2021 Posprzątaj kod, bo tego nie da się czytać... Zastanów się co się stanie jeżeli wciśniesz przycisk i po jego wciśnięciu wykona się kolejna pętla loop (brak danych w buforze portu szeregowego)? Potem podmień obsługę przekaźników na zmienne flagowe Na koniec pętli loop dodaj przekształcanie wartości zmiennej flagowej na wyjście przekaźnika Przed instrukcjami z pkt. 4 dodaj obsługę przycisków. Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
kacpermateusz7 Lipiec 27, 2021 Autor tematu Udostępnij Lipiec 27, 2021 Jestem osobą początkującą i jeszcze nie do końca wszystko ogarniam. Widzę, że społeczność na tym forum oczekuje od zwykłego kowalskiego, nie wiadomo jakiej wiedzy. Po to jest forum, aby pytać i wspólnie rozwiązywać problemy tak jak w tym przypadku. Ponadto kod będzie wykorzystany wyłącznie w celach testowych więc nie wymagam, aby ten kod był jakoś mega uporządkowany i czytelny. Dla mnie najważniejsze jest to, aby to zadziałało i nic więcej. Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Lipiec 27, 2021 Udostępnij Lipiec 27, 2021 2 minuty temu, kacpermateusz7 napisał: nie wymagam, aby ten kod był jakoś mega uporządkowany i czytelny Więc nie wymagaj, aby ktoś się przegryzał przez nieczytelny kod. Jeśli chcesz aby ktoś Ci pomógł - zrób wszystko, aby mu udzielenie pomocy ułatwić. 3 minuty temu, kacpermateusz7 napisał: Jestem osobą początkującą Rozumiem, że pytanie które zadałem było zbyt skomplikowane? Cóż - bez Twoich odpowiedzi na takie pytania nie będziemy mogli "wspólnie" rozwiązywać problemu. Bo nawet odpowiedź "nie wiem" jest odpowiedzią. Stwierdzenie "jestem początkujący" nie jest. A początkujących to tu się przewinęło więcej niż Ci się wydaje i nie jesteś przypadkiem nietypowym. Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Lipiec 27, 2021 Udostępnij Lipiec 27, 2021 6 minut temu, kacpermateusz7 napisał: Widzę, że społeczność na tym forum oczekuje od zwykłego kowalskiego, nie wiadomo jakiej wiedzy. Wcale tak nie jest...tu duzo poczatkujacych..(ja tez😉) A masz mozliwosc zmiany tego co wysylasz?? Np. Zamiast znakow to cyfry 1/2/3/4 itp...? Cytuj Link do komentarza Share on other sites More sharing options...
H1M4W4R1 Lipiec 27, 2021 Udostępnij Lipiec 27, 2021 (edytowany) 1 godzinę temu, kacpermateusz7 napisał: Jestem osobą początkującą i jeszcze nie do końca wszystko ogarniam. Widzę, że społeczność na tym forum oczekuje od zwykłego kowalskiego, nie wiadomo jakiej wiedzy. My tylko wymagamy podstaw logicznego myślenia i umiejętności szukania informacji w sieci. Punkt 1 - ładnie sformatowany kod to nawiasy (klamrowego) zawsze w osobnej linii, wnętrze nawiasu zawsze o 1 tabulator więcej niż położenie nawiasu (klamrowego) np. void moja_funkcja () { if (a == b) { print ("Hello"); } else { print ("Hi"); } } Punkt 2 - tutaj wystarczy prześledzić wykonywanie programu na kartce papieru, żadnej skomplikowanej wiedzy Punkt 3 - zmienna flagowa to inaczej bool, który określa stan przekaźnika Punkt 4 - inaczej ustaw wyjście przekaźnika względem tej zmiennej bool z punktu 3 Punkt 5 - https://forbot.pl/blog/kurs-arduino-podstawy-programowania-porty-io-id3648 To jest instrukcja wystarczająca, by osoba początkująca dała radę zrobić to, o co prosisz. Jak się nie podoba zapraszam na elektrodę 😉 (szybko zmienisz zdanie) Appendix... Tym razem zrobię kod za Ciebie, ale Twoim zadaniem domowym jest nauczyć się z niego, co zrobiłeś źle. (Może wymagać poprawek, nie testowałem na sprzęcie). Nie zależy nam na tym, by dawać "świeżakom" rybę, tylko tego, by się czegoś nauczyli. #include <SoftwareSerial.h> SoftwareSerial mySerial(12, 13); // Definicje ułatwiają potem zmianę np. pinu, gdyż nie musisz szukać tego wszędzie w kodzie, tylko zmieniasz aby w jednym miejscu // Na przykład gdybyś chciał podpiąć przekaźnik do pinu 5. #define RELAY_A 2 #define RELAY_B 3 // Tak samo z UART - możesz kupić moduł pracujący na 115200, a nie 9600 i co? Będziesz szukać tego w kodzie?... #define BT_COMM_FREQ 9600 #define PC_COMM_FREQ 9600 // Przyciski tak samo jak z przekaźnikami #define BTN_A 6 #define BTN_B 7 char btCommand; // Komenda BT, nazywaj zmienne sensownie, a nie np. 'zmienna', bo inaczej szybko zapomnisz do czego są używane bool relayA; // Stan przekaźnika A, true = HIGH, false = LOW bool relayB; // Stan przekaźnika B, true = HIGH, false = LOW void setup() { // Inicjacja przycisków pinMode(BTN_A, INPUT_PULLUP); pinMode(BTN_B, INPUT_PULLUP); // Inicjacja przekaźników pinMode(RELAY_A, OUTPUT); // Przekaźnik 1 pinMode(RELAY_B, OUTPUT); // Przekaźnik 2 digitalWrite(RELAY_A, HIGH); digitalWrite(RELAY_B, HIGH); // Inicjacja UART mySerial.begin(BT_COMM_FREQ); // Połączenie do modułu Serial.begin(PC_COMM_FREQ); // Komunikacja z komputerem } void loop() { // Bluetooth kontroluje przekaźniki if( mySerial.available() > 0 ) { btCommand = mySerial.read(); Serial.println(btCommand); } // Odczyt komend z BT przełącza zmienne flagowe na odpowiednie wartości if( btCommand == 'a' ) { // Jeżeli w warunku występuje tylko jedna instrukcja to można pominąć klamry, tutaj zostały dla czytelności relayA = false; } else if( btCommand == 'b' ) { relayB = false; } else if( btCommand == '9' ) { relayA = relayB = false; } else if( btCommand == 'A' ) { relayA = true; } else if( btCommand == 'B' ) { relayB = true; } else if( btCommand == 'I' ) { relayA = relayB = true; } /* Musisz wyczyścić bufor komendy, bo inaczej program będzie powtwarzał ją w nieskończoność i wciskanie przycisku nic Ci nie da */ btCommand = 0x0; // Brak operacji (0x0) // Kod przycisków - przełącza dany przekaźnik naprzemiennie if(digitalRead(BTN_A) == LOW) relayA = !relayA; // Tutaj przykład z pominięciem klamr if(digitalRead(BTN_B) == LOW) relayB = !relayB; // Wykonaj przełącznie przekaźnika. Jeżeli przekaźnik ma działać w odwrotnej polaryzacji zamień HIGH i LOW. digitalWrite(RELAY_A, relayA ? HIGH : LOW); digitalWrite(RELAY_B, relayB ? HIGH : LOW); } Edytowano Lipiec 27, 2021 przez H1M4W4R1 Cytuj Link do komentarza Share on other sites More sharing options...
kacpermateusz7 Lipiec 27, 2021 Autor tematu Udostępnij Lipiec 27, 2021 Dziękuje za pomoc!!! Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!