marek1707 Marzec 13, 2020 Udostępnij Marzec 13, 2020 (edytowany) Zła wiadomość: monitor portu szeregowego wbudowany w IDE Arduino to jeden z najprymitywniejszych programów tego typu jakie istnieją. Nie obsługuje praktycznie żadnych znaków sterującyh oprócz oczywistych NewLine i CarriageReturn. Dobra wiadomość: nie jest jedyny, więc zawsze możesz zmienić na coś innego (HyperTerm z poprzednich Windowsów, Putty, TeraTerm itd..). Każdy z nich rozumie obszerny repertuar znaków sterujących (to te z kodami poniżej 0x20) a także tzw. sekwencji ANSI/ESC. Zacznij od tego: http://www.asciitable.com/ skupiając się na znaczeniu kodów poniżej 0x20, oraz tego: https://en.wikipedia.org/wiki/ANSI_escape_code#DOS_and_Windows albo od razu od któregoś standardu VT52/100: http://ascii-table.com/ansi-escape-sequences-vt-100.php Już od dawana ludzie zauważyli, że mając "na drugim końcu kabelka" urządzenie tekstowe fajnie byłoby mieć możliwość przekazywania mu jakichś bardziej ciekawszych poleceń niż tylko "wypisz kolejny znak o kodzie N". Dlatego w standardzie ASCII są 32 znaki sterujące (0x00-0x1F) z których niektóre robią rzeczy typowe (wyczyszczenie całego ekranu: (Form Feed 0x0C), przejście do nowej linii itp) a niektóre (ESC: 0x1B) są "zaczątkiem" zupełnie nowych pomysłów wykraczających daleko poza ASCII. I tutaj jest już wiele różnych standardów, ale na szczęście niektóre są bardziej popularne od innych. Jeśli w programie terminalowym jaki sobie zainstalujesz włączysz np. emulację terminala (kiedyś takie urządzenia były osobnymi, fizycznymi sprzętami) VT52 albo VT100 to nagle okaże się, że za pomocą dobrze określonych sekwencji znaków wysyłanych z Arduino do PC możesz zmieniać kolor tekstu, mrugać znakami, przesuwać kursor po całym ekranie (a raczej okienku programu) tworząc/rysując nowe wirtualne "okienka" i w nich przesuwać tekst niezleżnie od innych obszarów itd itp. Także zacznij od znalezienia instalki/paczki odpowiedniego programu obsługującego port szeregowy, odpal go i zapomnij o tym co wbudowano w IDE Arduino. To tylko prymitywny monitor przychodzących znaków. Przynajmniej w wersji IDE, jaką posiadam u siebie. Edytowano Marzec 13, 2020 przez marek1707 Poprawione linki. Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Marzec 13, 2020 Udostępnij Marzec 13, 2020 9 minut temu, marek1707 napisał: Nie obsługuje praktycznie żadnych znaków sterującyh oprócz oczywistych NewLine i CarriageReturn. Tyle, że w tym przypadku to może być zaleta a nie wada. W przypadku wysłania jakiegoś binarnego pliku (albo próbie odbioru danych z inną prędkością) może się przydarzyć, że odebrane dane będzą odpowiadać jakiejś tam sekwencji sterującej. Pół biedy jeśli to będzie "przesuń kursor w lewo", ale np. ":ustaw kolor tekstu na biały" może być deprymujące 🙂 Niestety - albo albo. Albo (jak sugerował @marek1707) użyjesz bardziej profesjonalnego programu (ale narazisz się na niewygodę w przypadku odebranej przypadkowej sekwencji) - albo pozostaniesz przy prymitywnym monitorku wbudowanym w IDE, ale nie będziesz miał nawet możliwości czyszczenia ekranu. Osobiście polecałbym używanie tych "profesjonalniejszych" programów tylko wtedy, gdy są rzeczywiście potrzebne (np. gdy chcemy zrobić piękne menu rysowane w konsoli kompa podłączonego do Arduino), a pozostanie przy wbudowanym w trakcie tworzenia programu. Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Marzec 13, 2020 Udostępnij Marzec 13, 2020 No ale przecież Kolega pytał o czyszczenie ekranu, więc potrzebuje funkcji niedostępnej w Monitorze Portu. 23 minuty temu, ethanak napisał: pozostanie przy wbudowanym w trakcie tworzenia programu Niekoniecznie. Te lepsiejsze programy potrafią np. wypisywać/podglądać transmisje w postaci HEX (i to w obie strony) a to już bardzo pomaga w przypadku gdy wysyłamy (lub właśnie nie) coś dziwnego, szczególnie "w trakcie tworzenia programu", czyż nie? A zmiana koloru na biały wcale taka prosta nie jest, więc szansa jest mała. Już bardziej to, że migający ekran pliku binarnego (bo co chwila przychodzą FormFeedy) pokryty dziwną masą znaczków jest raczej mało komunikatywny, przynajmniej na początku.. Z drugiej strony rzadko udaje się komuś, kto używa tylko printf zrobić taką kaszanę a wiedza, że zawsze można zrobić bold czy mruganie czy kolor a nawet przepisać/zmienić fragment ekranu pomaga projektować ładniejsze interfejsy użytkownika. Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Marzec 13, 2020 Udostępnij Marzec 13, 2020 3 minuty temu, marek1707 napisał: Kolega pytał o czyszczenie ekranu, więc potrzebuje funkcji niedostępnej w Monitorze Portu. Zawsze można wysłać \r i kilkadziesiąt \n 🙂 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
MisterPablo Marzec 13, 2020 Udostępnij Marzec 13, 2020 Witam Jestem początkujący o programowaniu nie mam pojęcia i czy chcąc nauczyć się tworzyć na arduino i raspberry pi wystarczą te kursy czy powinienem sam się uczyć języka C, C++? Zadaje to pytanie bo jestem w trakcie 1 kursu na Arduino #4 zatrzymałem się na ćw 4.5 nie potrafiłem je samodzielnie wykonać na podstawie wiedzy z poprzednich lekcji, rozwiązania w komentarzach wydają się jakieś skomplikowane i niejasne, na pewno sam bym tak nie zrobił. Z góry dzięki za odp 1 Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Marzec 14, 2020 Udostępnij Marzec 14, 2020 @MisterPablo witam na forum 🙂 W zdecydowanej większości przypadków wystarczy wiedza z kursu - takie było założenie. Czasami trzeba coś dodatkowo poszukać, ale nie są to zbyt skomplikowane tematy. Jeśli masz problem z rozwiązaniem jakiegoś zadania to śmiało pytaj w komentarzach o konkrety. Pokaż to co napisałeś, daj znać na czym utknąłeś itd. Jeśli chodzi o programy wklejane przez inne osoby to pamiętaj, że część osób zna już podstawy programowania w C++, więc przy okazji, "z rozpędu" wplatają oni do rozwiązań pewne zapisy, które nie były omawiane w kursie. Często zadania da się rozwiązać jednak prościej 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
Radek77 Marzec 18, 2020 Udostępnij Marzec 18, 2020 Cześć, zrobiłem zadanie 4.6, poproszę o komentarz doświadczonych programistów. Pozdrawiam #define fotoLeft A4 //przypisanie pina do lewego fotorezystora #define fotoRigh A5 //przypisanie pina do prawego fotorezystora int odczytFotoLewy = 0; int odczytFotoPrawy = 0; int roznica = 0; int zakres = 0; void setup() { pinMode(6, OUTPUT); //konfiguracja wyjść pod diody pinMode(7, OUTPUT); //konfiguracja wyjść pod diody pinMode(8, OUTPUT); //konfiguracja wyjść pod diody pinMode(9, OUTPUT); //konfiguracja wyjść pod diody pinMode(10, OUTPUT); //konfiguracja wyjść pod diody Serial.begin(9600); } void loop() { odczytFotoLewy = analogRead(fotoLeft); //odczyt z lewego fotorezystora odczytFotoPrawy = analogRead(fotoRigh); //odczyt z prawego fotorezystora Serial.print("lewy "); Serial.println(odczytFotoLewy); Serial.print("prawy "); Serial.println(odczytFotoPrawy); delay(200); roznica = odczytFotoLewy - odczytFotoPrawy; roznica = map(abs(roznica), 0, 250, 1, 3); //przeskalowanie różnicy na zakres 3 stopniowy Serial.print("lewy "); Serial.println(odczytFotoLewy); Serial.print("prawy "); Serial.println(odczytFotoPrawy); //delay(100); if (odczytFotoLewy - odczytFotoPrawy < 0 && roznica == 3) { digitalWrite(6, HIGH); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); } if (odczytFotoLewy - odczytFotoPrawy < 0 && roznica == 2) { digitalWrite(6, LOW); digitalWrite(7, HIGH); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); } if (roznica == 1) { digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, HIGH); digitalWrite(9, LOW); digitalWrite(10, LOW); } if (odczytFotoLewy - odczytFotoPrawy > 0 && roznica == 2) { digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, HIGH); digitalWrite(10, LOW); } if (odczytFotoLewy - odczytFotoPrawy > 0 && roznica == 3) { digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, HIGH); } delay(50); //opóźnienie, aby nie odczytywać ADC zbyt szybko } 1 Cytuj Link do komentarza Share on other sites More sharing options...
Gieneq Marzec 20, 2020 Udostępnij Marzec 20, 2020 @Radek77 fajnie że przysiadłeś do zadania dodatkowego. Użycie wartości bezwzględnej jest dobrym pomysłem, ale mógłbyś popróbować jakoś zastąpić warunki jedną funkcją. Odpowiedzi na to pytanie jest kilka ale możesz spróbować zaprojektować funkcję, gdzie dla każdej diody wyliczana jest pewna średnia ważona. Cytuj Link do komentarza Share on other sites More sharing options...
Radek77 Marzec 20, 2020 Udostępnij Marzec 20, 2020 @Gieneqciekawa podpowiedź, spróbuję tego 👍 1 Cytuj Link do komentarza Share on other sites More sharing options...
Beskid Kwiecień 3, 2020 Udostępnij Kwiecień 3, 2020 Takie pytanie. Co do zadania 4.5 da się wczytać z wiersza poleceń wartość użytkownika od razu do INT, zamiast do STRING? Próbowałem używać Serial.parseInt(); ,ale to tak jakby nie czyściło mi pamięci Arduino i zawsze Serial.available() był większy zera. Cytuj Link do komentarza Share on other sites More sharing options...
tenacious Kwiecień 4, 2020 Udostępnij Kwiecień 4, 2020 Witam, czy ktoś z was ma może schemat połączeń do zadania 4.5? Cytuj Link do komentarza Share on other sites More sharing options...
Gieneq Kwiecień 6, 2020 Udostępnij Kwiecień 6, 2020 @Beskid pewnie że jest to możliwe, przykłąd ze strony Arduino do funkcji toInt() ze Stringa: void loop() { // Read serial input: while (Serial.available() > 0) { int inChar = Serial.read(); if (isDigit(inChar)) { // convert the incoming byte to a char and add it to the string: inString += (char)inChar; } // if you get a newline, print the string, then the string's value: if (inChar == '\n') { Serial.print("Value:"); Serial.println(inString.toInt()); Serial.print("String: "); Serial.println(inString); // clear the string for new input: inString = ""; } Możesz też spróbować własnych sił i napisać swój algorytm konwersji 🙂 jest on dość prosty. @tenacious Jest to zadanie domowe, więc ciężko będzie podać odpowiedź 🙂 Podpowiem, masz w zadaniu coś o potencjometrze i diodzie świecącej. Poszukaj w treści tego odcinka jak można zmontować układ z tych części, żeby dało się z nich korzystać osobno. Cytuj Link do komentarza Share on other sites More sharing options...
tenacious Kwiecień 6, 2020 Udostępnij Kwiecień 6, 2020 @Gieneq 5 godzin temu, Gieneq napisał: Poszukaj w treści tego odcinka chciałeś tu podać jakiś link? czy o jaki odcinek chodzi? Jestem bardzo świeży w tematach forum i arduino, dlatego przepraszam z góry jeśli to jest błahy problem . Cytuj Link do komentarza Share on other sites More sharing options...
Gieneq Kwiecień 6, 2020 Udostępnij Kwiecień 6, 2020 @tenacious jest dokładnie w tej części kursu. Pisząc tego miałem na myśli ten do które linkuje ten temat na forum. Schemat masz w akapicie "Regulacja pracy programu dzięki ADC". Cytuj Link do komentarza Share on other sites More sharing options...
Lorenzini Kwiecień 13, 2020 Udostępnij Kwiecień 13, 2020 int odczytanawartosc = 0; //liczba zmienna float napiecie = 0; //wartosc przeliczona na napiecie w woltach void setup(){ //uruchamiane Serial.begin(9600); //inicjacja transmisjii Serial.println("Cyfrowy woltomierz do napięcia 5[V}"); delay(5000); //opoznienie by kazdy mogl przeczytac } void loop() //rozpoczecie programu { odczytanawartosc = analogRead(A0); //odczytujemy wartosc napiecia napiecie = odczytanawartosc * (5.0/1024.0); //przeliczanie wartosci na wolty Serial.println("Aktualnie napięcie wynosi"); //napis z napieciem Serial.println(napiecie + String("[V]")); //napiecie wraz z jednostka delay(200); //opoznienie dla odczytania wynikow } Bardzo dobrze zrobiony kurs na temat przetworników ADC! Najbardziej spodobał mi się miernik napięcia który myślę że przyda się mi przez jakiś czas. Przesyłam mój projekt i lekko zmodyfikowany kod 🙂 2 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!