bartleo Luty 25, 2018 Udostępnij Luty 25, 2018 Witam moja propozycja do zadania 2.4 String kolor; //zmienna dla koloru int dane; //zmienna dla przeksztalcenia koloru w cyfre void setup() { Serial.begin(9600); //wlaczym uart pinMode(8, OUTPUT); //okreslamy pin pinMode(9, OUTPUT); // okreslamy pin Serial.println(" Wpisz kolor diody \n do wyboru masz \n czerwony \t zielony"); //krtótka instrukcja") } void loop() { if (Serial.available() > 0) { //czekamy na tekst kolor = Serial.readStringUntil('\n'); //odczytujemy zmienna if (kolor == "zielony") { //jesli zmienna to zielony dane = 1; //dane = 1 } else if (kolor == "czerwony") { //jeśli zmienna to czerwony dane = 2; //dane = 2 } else { dane=3; } //w przypadku nieprawidlowego wpisu switch (dane) { //stosujemy switcha do dane case 1: //w przypadku 1 Serial.println("zapaliles diode koloru zielonego"); //wyswietlamy teskt digitalWrite(9, HIGH); //zapalamy zielona digitalWrite(8, LOW); //wylaczamy czerwona break; case 2: //w przypadku 2 Serial.println("zapalisles diode koloru czerwonego"); // wyswietlamy tekst digitalWrite(9, LOW); //wylaczamy zielona digitalWrite(8, HIGH); //wlaczamy czerwona break; case 3: Serial.println("postepuj zgodnie z instrukcja i podaj kolor ;)"); //jesli zaden z powyzszych wyswietl komunikat digitalWrite(9, LOW); //wylaczamy digitalWrite(8, LOW); //wylaczamy break; } } } Pozdrawiam Cytuj Link do komentarza Share on other sites More sharing options...
Coorsar Luty 26, 2018 Udostępnij Luty 26, 2018 Cześć Znalazłem dwa błędy. Raczej nikomu nie przeszkadzają, ale nie zaszkodzi poprawić 1. Raz jest napisane fototranzystor, później fotorezystor. "Potrzebne do tego będzie Arduino z podłączonym !!!fototranzystorem!!! w układzie dzielnika napięcia oraz serwomechanizm." "Druga część schematu to podłączenie rezystora i !!!fotorezystora!!! w dzielnik napięcia. Dokładniejsze informacje na ten temat znaleźć można w części dotyczącej ADC w Arduino." 2. Zbędne znajduje "Na końcu !!!znajduje!! opcjonalnie możemy umieścić kod pomiędzy default oraz break." Najlepszy kurs jaki znalazłem. Gratulacje dla autora 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
bartleo Marzec 1, 2018 Udostępnij Marzec 1, 2018 Mechanizm kalibracji urządzenia z użyciem potencjometru. #include <Servo.h> //podlaczamy serwo Servo miernik; //nazywamy serwo int p; //zmienna dla fotorezystora int pp; //zmienna po ustaleniu pozycji wskazówki int po; //odczyt z potencjometru void setup() { miernik.attach(9); //konfigurujemy serwo pod PWM Serial.begin(9600); //wlaczamy uart } void loop() { p = analogRead(A5); //odczytujemy fotorezystor po = analogRead(A4); //odczytujemy potencjometr Serial.println(p); //odczyt fotorezystora delay(50); //opoznienie p = map( p, 0, po, 0, 180); /* mapujemy fotorezystor gdzie minimalny odczyt to 0 maksymalny to odczyt z potencjometru, nastepnie katy od 0 do 180 */ if (abs( p - pp) > 5) { //ustawiamy tolerancje zmienionego oswietlenia miernik.write( p); //ustawiamy kat pp = p; //zapamietujemy pozycje serwa } } Pozdrawiam Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Marzec 6, 2018 Udostępnij Marzec 6, 2018 Coorsar, witam na forum! Dziękuję za miłe słowa na temat kursu - cieszę się, że jest pomocny. Zgłoszone błędy zostały poprawione 🙂 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
Kamar Grudzień 21, 2018 Udostępnij Grudzień 21, 2018 Mam pewien problem z zadaniem 6.2 Diody zapalają się, jednak po zgaśnięciu i tak wyświetla się komunikat o błędzie, gdy wpisze inna literę niż "z" lub "c" wyświetlają się 2 komunikaty o błędzie. W wcześniejszych postach zauważyłem problemy podobnego do mojego, jednak odpowiedzi do nich nie pomogły mi. int OdebraneDane=0 ; #define z 8//dioda zielona #define c 10//dioda czerwona void setup() { Serial.begin(9600); pinMode(z, OUTPUT); pinMode(c, OUTPUT); } void loop() { while(Serial.available()==0); //zatrzymanie w pustej petli OdebraneDane= Serial.read( ); switch( OdebraneDane){ case'z': //dioda zielona digitalWrite(z,HIGH); delay(1000); digitalWrite(z,LOW); break; case'c': //dioda czerwona digitalWrite(c,HIGH); delay(1000); digitalWrite(c,LOW); break; default: //cokolwiek innego Serial.println("Błąd"); break; } delay(1000); } Dnia 20.06.2016 o 11:36, piotrino napisał: Chumanista napisał: Zobacz czy terminal ci czegoś nie dodaje, na przykład \r\n. BINGO:) Miałeś rację, teraz działa jak należy. Moja nieuwaga. Pozdrawiam To jest chyba rozwiązanie mojego problemu, ale nadal nie wiem jak wprowadzić go w życie, gdzie dodać jakie komendy. Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Grudzień 21, 2018 Udostępnij Grudzień 21, 2018 @Kamar, w prawym dolnym rogu terminala wybierasz jak mają być kończone linie. Wybierz opcję, która zapewnia transmisję bez znaków zakończenia linii i sprawdź działanie programu 😉 1 Cytuj Link do komentarza Share on other sites More sharing options...
Kamar Grudzień 21, 2018 Udostępnij Grudzień 21, 2018 (edytowany) Treker Po raz kolejny mi pomogłeś, wystarczyło wybrać "brak zakończenia linii" , dziękuję bardzo 😉 Edytowano Grudzień 21, 2018 przez Kamar 1 Cytuj Link do komentarza Share on other sites More sharing options...
miszczur Styczeń 14, 2019 Udostępnij Styczeń 14, 2019 Witam wszystkich, niedawno zacząłem przygodę z Arduino. Zrodziło się pytanie odnośnie Serwa i zadania z natężeniem światła. Otóż moglibyście podpowiedzieć co robię źle? W wyżej wymienionych kodach jak sterujecie kątem dajecie: pozycja = map(odczytCzujnika, 0, 970, 0, 180); Otóż u mnie wskazówka wychyla się wtedy w drugą stronę, czyli jak świecę lampką w fotorezystor to na tarczy będzie mi wskazywać około 0%. Jedyne co na myśl mi przyszło to odwrócić w funkcji map wartości 0 i 970 ( odczyt z ADC na dzielniku). Czy z moim Serwomechanizmem jest coś nie tak? Pozdrawiam Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Styczeń 14, 2019 Udostępnij Styczeń 14, 2019 @miszczur, prawdopodobnie podłączyłeś odwrotnie dzielnik napięcia z fotorezystorem. Zobacz, który jego "koniec" masz podłączony do plusa, a który do minusa zasilania. Zamiana zasilania dzielnika napięcia powinna odwrócić działanie układu. Cytuj Link do komentarza Share on other sites More sharing options...
miszczur Styczeń 14, 2019 Udostępnij Styczeń 14, 2019 23 minuty temu, Treker napisał: @miszczur, prawdopodobnie podłączyłeś odwrotnie dzielnik napięcia z fotorezystorem. Zobacz, który jego "koniec" masz podłączony do plusa, a który do minusa zasilania. Zamiana zasilania dzielnika napięcia powinna odwrócić działanie układu. Wydaje mi się, że podłączyłem jak na obrazku w kursie, tak myślałem, że może to dzielnik, teraz już nie sprawdzę, bo działam z LCD i rozmontowałem poprzedni układ na płytce stykowej. Tak czy siak dziękuję za odpowiedź! Cytuj Link do komentarza Share on other sites More sharing options...
jogaszu Marzec 3, 2019 Udostępnij Marzec 3, 2019 Dnia 14.01.2019 o 14:20, Treker napisał: @miszczur, prawdopodobnie podłączyłeś odwrotnie dzielnik napięcia z fotorezystorem. Zobacz, który jego "koniec" masz podłączony do plusa, a który do minusa zasilania. Zamiana zasilania dzielnika napięcia powinna odwrócić działanie układu. Też podpiąłem odwrotnie (dopiero teraz zobaczyłem, że to robi różnicę). Dzięki odwrotnemu przepięciu dowiedziałem się również, że funkcja map() skaluje również jeżeli jako pierwszą damy większą wartość, a jako drugą mniejszą (przykład w kodzie poniżej). Dodałem również opcję auto-kalibracji #include <Servo.h> //Biblioteka odpowiedzialna za serwa Servo serwomechanizm; //Tworzymy obiekt, dzięki któremu możemy odwołać się do serwa byte pozycja = 0; //Aktualna pozycja serwa 0-180 int pozycjaPoprzednia = 0; int minWartosc = 50; //wartosc min odczytu dla przeskalowania int maxWartosc = 700; //wartosc max odczytu void setup() { serwomechanizm.attach(11); //Serwomechanizm podłączony do pinu 11 Serial.begin(9600); } void loop() { int odczytCzujnika = analogRead(A5); //Odczytujemy wartość z czujnika pozycja = map(odczytCzujnika, minWartosc, maxWartosc, 180, 0); //Zamieniamy ją na pozycję serwa if (odczytCzujnika < minWartosc) { //Autokalibracja-sprwdzenie czy odczytana wartosc jest mniejsza od min ustawionej minWartosc = odczytCzujnika; //jezeli mniejsza to zamiana } else if (odczytCzujnika > maxWartosc) { //jak wyzej maxWartosc = odczytCzujnika; } else if (abs(pozycja - pozycjaPoprzednia) > 5) { //Sprawdzamy czy pozycje różnią się o ponad 5 stopni serwomechanizm.write(pozycja); //Wykonajujemy ruch pozycjaPoprzednia = pozycja; //Zapamiętujemy aktualną pozycję jako poprzednią } Serial.print("Min: "); Serial.println(minWartosc); Serial.print("Max: "); Serial.println(maxWartosc); Serial.println(odczytCzujnika); //Wysyłamy wartość do terminala delay(300); //Opóźnienie dla lepszego efektu } oto mój wskaźnik 😋 1 Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Marzec 3, 2019 Udostępnij Marzec 3, 2019 5 godzin temu, jogaszu napisał: Dzięki odwrotnemu przepięciu dowiedziałem się również, że funkcja map() skaluje również jeżeli jako pierwszą damy większą wartość, a jako drugą mniejszą (przykład w kodzie poniżej). Dokładnie tak, ta funkcja jest bardzo wygodna i przydaje się również w takich niestandardowych przypadkach 😉 Jedna uwaga do formatowania programu, zamiast tak: } else if (abs(pozycja - pozycjaPoprzednia) > 5) { Lepiej będzie robić tak: } else if (abs(pozycja - pozycjaPoprzednia) > 5) { Mniejsza szansa, że później coś pomylisz podczas rozbudowywania programu. 1 Cytuj Link do komentarza Share on other sites More sharing options...
narbej Marzec 4, 2019 Udostępnij Marzec 4, 2019 (edytowany) 13 godzin temu, Treker napisał: Lepiej będzie robić tak Dziwię się trochę, że czepiasz się takiego drobiazgu, a przecież autor nie pisze tak: } else if (abs(pozycja - pozycjaPoprzednia) > 5) { tylko raczej tak 😉 : } else if (abs(pozycja - pozycjaPoprzednia) > 5) { i jeżeli robi to konsekwentnie i systematycznie to jest to zupełnie czytelne i poprawne. Dziwię się, bo jest dużo zamieszczanych tu kodów z gorszymi, moim zdaniem, całkowicie przemilczanymi błędami. Poniżej malutki fragment kodu z programu zamieszczonego w tym wątku: dane = 2; //dane = 2 } ... switch (dane) { //stosujemy switcha do dane case 1: //w przypadku 1 Rozumiem doskonale, że piszą je początkujący i czasami dodatkowo nie za bardzo znają angielski i że lepiej aby program był brzydki jak przysłowiowa noc i działał, niż żeby był piękny jak ... a zupełnie nie działał, Jeżeli ktoś nie wie o co chodzi, to chodzi o komentarze. A wystarczyłoby może w tych miejscach kursu, gdzie wspomina się o dodawaniu komentarzy do swojego kodu, dodać, aby nie przesadzać i nie robić tego na siłę. Jeżeli to mają być takiego typu komentarze jak powyżej, to dużo lepiej aby się nie pojawiły w ogóle. A to tylko jeden drobny przykład z bardo wielu takich przypadków. Edytowano Marzec 4, 2019 przez narbej styl Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Marzec 4, 2019 Udostępnij Marzec 4, 2019 3 godziny temu, narbej napisał: Dziwię się, bo jest dużo zamieszczanych tu kodów z gorszymi, moim zdaniem, całkowicie przemilczanymi błędami. "Czepiam" się dlatego, że jeśli ktoś zamieszcza ogólnie poprawny i ładnie sformatowany kod to warto wytknąć nawet małe drobiazgi, które sprawią, że będzie jeszcze lepiej. Jak ktoś początkujący wkleja kompletnie źle sformatowany program, ale ma on z tego wielką radość, bo siedział nad tym 5 godzin i jest to jego drugi program w życiu, to wytykanie mu takich drobiazgów na tym etapie wiele nie zmieni (może go jedynie zniechęcić). Dlatego każdy kod staram się ocenić trochę inaczej. Tutaj widać, że @jogaszu radzi sobie całkiem dobrze, to się uczepiłem drobiazgu 😉 3 godziny temu, narbej napisał: jeżeli robi to konsekwentnie i systematycznie to jest to zupełnie czytelne i poprawne. Tylko, że jest to raczej mało popularny sposób formatowania warunków. Oczywiście gdzieś tam można go spotkać, ale przeważa jednak wersja, którą tutaj zaproponowałem. Do tego, właśnie taka wersja była przedstawiana w kursie. Wystarczy też przejrzeć kilka różnych źródeł na temat programowania i raczej ze znacznie większym prawdopodobieństwem trafimy na "moją wersję". Pierwsze z brzegu przykłady: https://pl.wikibooks.org/wiki/C/Instrukcje_sterujące#if https://www.tutorialspoint.com/cprogramming/if_else_statement_in_c.htm Właściwie szukając teraz takich przykładów nigdzie nie trafiłem na inną wersję formatowania warunków z else. Samo Arduino w swoich programach demonstracyjnych również formatuje warunki sposób, który zaproponowałem. Przykład z projektu IfStatmentConditional: // if the analog value is high enough, turn on the LED: if (analogValue > threshold) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } Do tego, po prostu uważam, że takie formatowanie jest wygodniejsze. Mniejsza szansa, że "wstrzelimy" coś przypadkiem między else, a nawias rozpoczynający blok instrukcji. Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Marzec 4, 2019 Udostępnij Marzec 4, 2019 sposobów formatowania jest przeszło więcej, ja stosuję z reguły coś podobnego do "kernel". proponuję zapoznanie się z programem indent i jego możliwościami formatowania. tak przy okazji - parę razy miałem przyjemność analizy i przerabiania kodu tworzonego przez niewidomych... to jest dopiero masakra 🙂 1 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!