grabarz666 Napisano Listopad 18, 2021 Udostępnij Napisano Listopad 18, 2021 Witam, dopiero zaczynam przygodę z arduino i postanowiłem że tak powiem skopiować najpierw ten projekt i sprawdzić czy działa, udało mi się wszystko się uruchomiło tylko teraz chciałbym to ulepszyć. jest mi ktoś w stanie wytłumaczyć jak dodać kolejne diody aby zapalały się po zmianie odległośći? chciałbym jeszcze wstawić tryb czuwania żeby cały czas nie musieć wyłączać zasilania. link do tematu http://technovade.pl/poradniki/zeszytprojektowyarduino/zpa-016.html Link do komentarza Share on other sites More sharing options...
StefanekP Listopad 19, 2021 Udostępnij Listopad 19, 2021 Możesz przeskalować odległość na zakres, odpowiadający liczbie diod i w pętli for zapalać ilość diod, proporcjonalną do odległości: for(int i=0; i<odlegloscPrzeskalowana; i++){ digitalWrite(numerDiody,HIGH); numerDiody++; } Jak dokładnie miałby działać ten tryb czuwania? 1 Link do komentarza Share on other sites More sharing options...
farmaceuta Listopad 19, 2021 Udostępnij Listopad 19, 2021 Ja bym tam dodal do tego kodu tablice w ktorej byly by wpisane nr pinow (wtedy nr nie musza byc systematyczne...czyli 1/2/3...a moga byc 1/5/7/13 itp...i uzywac jako indeksu zmiennej "i" z for...i dwie takie petle w "gore" i w "dol" i chodzi porzadnie...niech kolega @grabarz666 wrzuci tu swoj kod... Link do komentarza Share on other sites More sharing options...
BananWszyscy Listopad 19, 2021 Udostępnij Listopad 19, 2021 (edytowany) A ja bym modyfikował odpowiednio wartości całych rejestrów 😉 oczywiście przy odpowiednim podłączeniu Edytowano Listopad 19, 2021 przez BananWszyscy 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
grabarz666 Listopad 19, 2021 Autor tematu Udostępnij Listopad 19, 2021 #include "LiquidCrystal.h" #define pin_nadajnik 6 //Definicja pinu, do którego podłączamy nadajnik (pin TRIG) #define pin_odbiornik 7 //Definicja pinu, do którego podłączamy odbiornik (pin ECHO) #define pin_buzzer 1 #define dioda_ostrzegawcza 8 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Definicja pinów do których podłączamy wyprowadzenia ekranu int odleglosc; //Zmienna przechowująca odległość long czas_impulsu = 0; //Zmienna przechowująca czas trwania impulsu na pinie ECHO void setup() { lcd.begin(16,2); //Inicjalizacja pracy LCD pinMode(pin_nadajnik, OUTPUT); pinMode(pin_odbiornik, INPUT); pinMode(dioda_ostrzegawcza, OUTPUT); pinMode(dioda_ostrzegawcza, OUTPUT); } void loop() { digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika delayMicroseconds(10); //Czas trwania 10us digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo odleglosc = czas_impulsu/58; //Wyznaczenie odległości w cm } //Zabezpieczenie przed przekroczeniem zakresu pomiarowego if ( odleglosc < 5 || odleglosc> 200 ) { lcd.setCursor(0,0); lcd.print("Pomiar niedostepny"); } else { lcd.setCursor(0,0); lcd.print("Odleglosc: "); lcd.setCursor(11,1); lcd.print(odleglosc); lcd.print("cm"); } delay(1000); lcd.clear(); //Sygnał dzwiękowy if (odleglosc<=20 && odleglosc>=10) { tone(pin_buzzer, 2000, 200); } //Dioda ostrzegawcza if(odleglosc>50) { digitalWrite(dioda_ostrzegawcza, LOW); } if (odleglosc<50) { digitalWrite(dioda_ostrzegawcza, HIGH); { tone(pin_buzzer, 3000, 200); digitalWrite(dioda_ostrzegawcza, HIGH); } mam to w ten sposób zrobione i działa, buzer jest fizycznie niepodłaczony bo go nie mam ale poza tym wszystko działa, zmodyfikować odległość żeby zapalała się dioda umiem ogarnąć, natomiast jak chce dodać kolejną to już mi to nie działa, bo docelowo chce dać 3 diody, czerowna zielona i żółta i w zależności od odległości będą się zapalały po kolei, tylko nie wiem jak to fizycznie ugryźć Link do komentarza Share on other sites More sharing options...
farmaceuta Listopad 19, 2021 Udostępnij Listopad 19, 2021 (edytowany) #include "LiquidCrystal.h" #define pin_nadajnik 6 //Definicja pinu, do którego podłączamy nadajnik (pin TRIG) #define pin_odbiornik 7 //Definicja pinu, do którego podłączamy odbiornik (pin ECHO) #define pin_buzzer 1 #define dioda_ostrzegawcza 8 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Definicja pinów do których podłączamy wyprowadzenia ekranu int odleglosc; //Zmienna przechowująca odległość long czas_impulsu = 0; //Zmienna przechowująca czas trwania impulsu na pinie ECHO void setup() { lcd.begin(16,2); //Inicjalizacja pracy LCD pinMode(pin_nadajnik, OUTPUT); pinMode(pin_odbiornik, INPUT); pinMode(dioda_ostrzegawcza, OUTPUT); pinMode(9, OUTPUT); } void loop() { digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika delayMicroseconds(10); //Czas trwania 10us digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo odleglosc = czas_impulsu/58; //Wyznaczenie odległości w cm //Zabezpieczenie przed przekroczeniem zakresu pomiarowego if ( odleglosc < 5 || odleglosc> 200 ) { lcd.setCursor(0,0); lcd.print("Pomiar niedostepny"); } else { lcd.setCursor(0,0); lcd.print("Odleglosc: "); lcd.setCursor(11,1); lcd.print(odleglosc); lcd.print("cm"); } delay(1000); lcd.clear(); //Sygnał dzwiękowy if (odleglosc<=20 && odleglosc>=10) { tone(pin_buzzer, 2000, 200); } static byte tab[3] = {8,9,4}; //ledy piny byte skala = map(odleglosc, 0, 190, 0, 3); for (byte i = 0; i < skala; i++) { digitalWrite(tab[i], HIGH); } for (byte i = 3; i > skala; i--) { digitalWrite(tab[i-1], LOW); } } Powinno dzialac...ewentualnie nawiasy klamrowe pogubilem...w tej tablicy podajesz nr pinow od ledow... Edytowano Listopad 19, 2021 przez farmaceuta 1 Link do komentarza Share on other sites More sharing options...
grabarz666 Listopad 19, 2021 Autor tematu Udostępnij Listopad 19, 2021 (edytowany) dzięki, skopiowałem wgrałem i wyskoczyły błędy: Arduino:1.8.15 (Windows 10), Płytka:"Arduino Uno" sketch_nov19a:31:3: error: expected unqualified-id before 'if' if ( odleglosc < 5 || odleglosc> 200 ) ^~ sketch_nov19a:37:3: error: expected unqualified-id before 'else' else ^~~~ sketch_nov19a:45:9: error: expected constructor, destructor, or type conversion before '(' token delay(1000); ^ sketch_nov19a:46:4: error: 'lcd' does not name a type lcd.clear(); ^~~ sketch_nov19a:49:3: error: expected unqualified-id before 'if' if (odleglosc<=20 && odleglosc>=10) ^~ sketch_nov19a:58:1: error: expected unqualified-id before 'for' for (byte i = 0; i < skala; i++) { ^~~ sketch_nov19a:58:18: error: 'i' does not name a type for (byte i = 0; i < skala; i++) { ^ sketch_nov19a:58:29: error: 'i' does not name a type for (byte i = 0; i < skala; i++) { ^ sketch_nov19a:61:1: error: expected unqualified-id before 'for' for (byte i = 3; i > skala; i--) { ^~~ sketch_nov19a:61:18: error: 'i' does not name a type for (byte i = 3; i > skala; i--) { ^ sketch_nov19a:61:29: error: 'i' does not name a type for (byte i = 3; i > skala; i--) { ^ exit status 1 expected unqualified-id before 'if' Ten raport powinien zawierać więcej informacji jeśli w File -> Preferencje zostanie włączona opcja "Pokaż szczegółowe informacje podczas kompilacji" jeżeli mam diody podłączone na pinach 8 i 9 to powinienem wpisać numery pinów? i w których nawiasach? Edytowano Listopad 22, 2021 przez Gieneq Link do komentarza Share on other sites More sharing options...
farmaceuta Listopad 19, 2021 Udostępnij Listopad 19, 2021 (edytowany) 30 minut temu, grabarz666 napisał: jeżeli mam diody podłączone na pinach 8 i 9 to powinienem wpisać numery pinów? i w których nawiasach? Tak musisz zainicjowac piny w setup i wpisac tam gdzie masz tab...2/3/4 to moje piny...ty wpisz swoje...bledy masz bo brakuje nawiasow pewnie...dorzuc na dole klamrowy zamykajacy.. edit poprawilem ten kod...sprawdz czy dziala Edytowano Listopad 19, 2021 przez farmaceuta 1 Link do komentarza Share on other sites More sharing options...
grabarz666 Listopad 19, 2021 Autor tematu Udostępnij Listopad 19, 2021 działa wszystko zapalają się 3 diody, a jak bym chciał żeby każda dioda zapalała się od danej odległości? np 1 od nieskończoności do np 50 cm, druga od 50 cm do 20 i trzecia od 20 do 0? static byte tab[3] = {8,9,4}; //ledy piny byte skala = map(odleglosc, 0, 190, 0, 3); for (byte i = 0; i < skala; i++) { digitalWrite(tab[i], HIGH); } for (byte i = 3; i > skala; i--) { digitalWrite(tab[i-1], LOW); } } to w miejsce 3 musiał bym wpisac 1 i led 8 na początek i reszte skopiowac zmieniając dane odleglosci? Link do komentarza Share on other sites More sharing options...
farmaceuta Listopad 19, 2021 Udostępnij Listopad 19, 2021 (edytowany) 16 minut temu, grabarz666 napisał: to w miejsce 3 musiał bym wpisac 1 i led 8 na początek i reszte skopiowac zmieniając dane odleglosci? To juz lepiej na warunkach if bo funkcja map() dzieli wartosci na rowne czesci...mozna zrobic np tak. if (odleglosc > 50) { //led 51-...cm digitalWrite(8, HIGH); } else { digitalWrite(8, LOW); } if (odleglosc < 50 && odleglosc > 20) { //led 49-21 cm digitalWrite(9, HIGH); } else { digitalWrite(9, LOW); } if (odleglosc < 20 && odleglosc > 0) { // 19-1 cm digitalWrite(10, HIGH); } else { digitalWrite(10, LOW); } tamten kod wywal wczesniejszy a wstaw to...wywal to co ja dopisalem a twoj zostaw,, Edytowano Listopad 19, 2021 przez farmaceuta Link do komentarza Share on other sites More sharing options...
grabarz666 Listopad 19, 2021 Autor tematu Udostępnij Listopad 19, 2021 podpowiedział byś jak? zmieniłem diode na pin 10 bo mialem wolny akurat i nie działa. czarna magia to jest dla mnie, ogólnie chciałem to zrobić w ten sposób, żeby te diody zapalały się po kolei i chciałem jeszcze zrobić jakieś czuwanie i zasilanie bateryjne, ale widze że z takimi podstawami sobie nie radzę i chyba odpuszczę temat Link do komentarza Share on other sites More sharing options...
farmaceuta Listopad 19, 2021 Udostępnij Listopad 19, 2021 8 minut temu, grabarz666 napisał: podpowiedział byś jak? zmieniłem diode na pin 10 bo mialem wolny akurat i nie działa. czarna magia to jest dla mnie, ogólnie chciałem to zrobić w ten sposób, żeby te diody zapalały się po kolei i chciałem jeszcze zrobić jakieś czuwanie i zasilanie bateryjne, ale widze że z takimi podstawami sobie nie radzę i chyba odpuszczę temat Spokojnie...bez stresu, nie ma jednego czlowieka na swiecie ktory sie urodzil i moglby powiedziec "Ja wiem"...😉 kazdy sie musi nauczyc...masz powyzej juz kod z tymi zakresami...sprawdz czy dziala jak chcesz i mozna dzialac dalej... 1 Link do komentarza Share on other sites More sharing options...
grabarz666 Listopad 19, 2021 Autor tematu Udostępnij Listopad 19, 2021 dzięki za wyrozumiałość 🙂 zmieniłem i działa ale nadal ta jedna dioda nie prądzi, zmieniałem na pin 10 pin 13 i w wartościach też to zmieniałem i nie działa 1 Link do komentarza Share on other sites More sharing options...
farmaceuta Listopad 19, 2021 Udostępnij Listopad 19, 2021 3 minuty temu, grabarz666 napisał: dzięki za wyrozumiałość 🙂 zmieniłem i działa ale nadal ta jedna dioda nie prądzi, zmieniałem na pin 10 pin 13 i w wartościach też to zmieniałem i nie działa Tam masz takie cos jak pinMode(10,OUTPUT) to jest funkcja ustalajaca tryb dzialania pinu...w setup() wpisz sobie to co powyzej i bedzie dzialac... Link do komentarza Share on other sites More sharing options...
grabarz666 Listopad 19, 2021 Autor tematu Udostępnij Listopad 19, 2021 jeśli mam tak: pinMode(9, OUTPUT); to wszystko jest ok tylko ta jedna dioda nie działa, jeśli zmienie tak jak pisałeś na 10 to jedna dioda ledwo świeci a ta ostatnia i tak nie działa Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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ę »