Skocz do zawartości

Cała aktywność

Strumień aktualizowany automatycznie     

  1. Wczoraj
  2. To nie jest poprawienie błędu, tylko marzenie, że dane wejściowe będą akurat takie a nie inne (inaczej: zamiatanie pod dywan, ulubiony sposób działania programistów PHP)... co będzie, gdy zamiast monitora z Arduino IDE będziesz chciał użyć jakiegokolwiek innego, który akurat takiej funkcjonalności nie posiada? Albo wprowadzisz dwa znaki (np. CZ)? A to jest prawidłowy sposób poprawienia błędu. Oczywiście nie jedyny możliwy, ale prawidłowy. Nie jest natomiast prawidłowa inna konstrukcja: Zastanów się: czy po wyjściu z pętli while istnieje możliwość, że Serial.available() jest mniejsze lub równe zeru? I jeszcze drobiazg: z przyczyn czysto technicznych zmienna odebraneDane powinna być lokalna w loop(), a nie globalna. Nie chcę się tu rozpisywać na temat niebezpieczeństw związanych z taką a nie inną deklaracją, ale jeśli kogoś to baaaaaardzo interesuje, warto poczytać o ograniczeniach funkcji malloc() i free() w mikrokontrolerach (np. na stronie poświęconej avr-libc). W takim prostym programie raczej nic nie grozi, ale jak się człowiek przyzwyczai do czegoś to potem można przeżyć traumę (np. "dlaczego mój program przestaje działać po jakimś czasie" - autentyczny przypadek z forum).
  3. @ethanak 1. Błąd znika gdy ustawię w monitorze portu szeregowego opcję brak zakończenia linii. Nowa linia oznacza, że za każdym razem gdy wyślemy tekst będzie on zakończony nową linią. Rozumiem to tak, że arduino dostanie jakby dwie dane: nasz tekst i znak nowej linii i dlatego 2 razy pojawia mi się wtedy zapytanie o kolor diody którą chce zapalić. Brak zakończenia linii oznacza, że wiadomości czekają na odbiór w buforze i zostają odczytane dopiero z najbliższą wiadomością, którą zakończymy znakiem nowej linii. Także mamy tylko jedną daną w związku z czym tylko jedno pytanie o kolor diody. 2. Błąd znika również gdy pozostawię zakończenie nową linią natomiast zmodyfikuje program tak żeby odbierał cały string jako dane wejściowe a nie tylko jeden znak. #define Zielona 9 #define Czerwona 8 String odebraneDane = ""; byte kolor = 0; void setup() { Serial.begin(9600); pinMode(Zielona, OUTPUT); pinMode(Czerwona, OUTPUT); digitalWrite(Zielona, LOW); digitalWrite(Czerwona, LOW); } void loop() { Serial.print("Podaj czy uruchomić diodę ZIELONĄ czy CZERWONĄ: \n"); while (Serial.available() == 0) { delay(1000); } if (Serial.available() > 0) { //jeśli Arduino otrzymało jakieś dane odebraneDane = Serial.readStringUntil('\n'); //przypisujemy wpisane dane do zmiennej odebraneDane } if (odebraneDane == "zielona") { kolor = 1; } else if (odebraneDane == "czerwona") { kolor = 2; } switch (kolor) { case 1: //jeśli odebrana wartosc brzmi Zielona to zapalamy zieloną diodę digitalWrite(Zielona, HIGH); delay(1000); digitalWrite(Zielona, LOW); break; case 2: //tu zapalamy czerwoną diodę digitalWrite(Czerwona, HIGH); delay(1000); digitalWrite(Czerwona, LOW); break; default: Serial.println("Nie posiadamy takiego koloru!"); break; } delay(1000); }
  4. Właśnie dlatego napisałem "oczywiście to przykład, jest kilka sposobów jak to rozwiązać"; ponieważ wydaje mi się (ale musi wypowiedzieć się autor) że gamepad od XBoxa był tylko przykładem. Wówczas projekt zostaje znacząco uproszczony, chociaż (moim zdaniem ) kwestia sterowania nie jest pierwszoplanowa w kontekście zbudowania nawet prostej platformy z małym ramieniem - chociaż tu też autor nie napisał - to ma być "for fun" czy coś więcej?
  5. A to musi być koniecznie pad od XBoxa? Robiłem swego czasu sterowanie na czymś takim: https://botland.com.pl/pl/kontrolery-do-gier-usb/2560-gamepad-bezprzewodowy-kontroler-z-odbiornikiem-6952581600954.html Działa bardzo ładnie, i to bezpośrednio z Arduino.
  6. @mateusz797 Oczywiście to, o czym piszesz jest jak najbardziej możliwe do zrealizowania - ba - jest tak dobrym rozwiązaniem, że zrealizowano je wielokrotnie Jedyna różnica jest taka, że tutaj mamy Bluetooth - jeśli chodzi o pad Xbox, to szukaj pod hasłem interfacing xbox controller with arduino; tylko chyba konieczny jest Processing, program, który uruchamiasz na PC, więc to też weź pod uwagę - oczywiście to przykład, jest kilka sposobów jak to rozwiązać Pozwolę sobie jedynie zauważyć, że to bardzo trudny projekt - nie wolisz sobie rozbić go na części, czyli najpierw autko zdalnie sterowane z Arduino, potem proste ramię (niekoniecznie na 6 serwach) i potem to wszystko razem?
  7. Dear Admin I have reviewed hundreds of sites on similar topics on the web. The site with the most beautiful narration among the sites I have reviewed is your site. Moreover, although I wrote it in your original language, I got clear and understandable results even in my translations with Google Translate. I want to thank you. I am waiting for your more detailed and more subject courses. Note: Since I do not speak English, the text has been translated by Google Translate. Alaattin Akın Turkey
  8. Mnie może ten projekt za bardzo nie zachwycił, ale szanuję pomysł i wykonanie Autorki. A jeśli chodzi o wykorzystanie elastycznego PCB, to ja 4 lata temu miałem pomysł, żeby przy jego pomocy zrobić podświetlenie klawiatury w netbooku. Kupiłem super cienki laminat FR4 PCB 0,14mm 10x20cm, żeby sprawdzić, jak się będzie sprawował w praktyce i czy będzie się mieścił pomiędzy obudową (wnęką) a klawiaturą - było tam na tyle dużo miejsca, że zarówno ten laminat, jak i super cienkie (niskie) diody SMD dałoby się użyć do tego. Nawet kupiłem po kilka różnych diod (różnych wielkości, kolorów), żeby sprawdzić w praktyce, jak to będzie się sprawowało. Projektu jednak nigdy nie wykonałem, po części z braku czasu (tak, wiem, to standardowa wymówka), a po części z braku ochoty na zaprojektowanie płytki drukowanej (trzeba było poumieszczać diody SMD na płytce PCB w odpowiednich miejscach tak, by ich światło prześwitywało przez klawiaturę netbooka i stosownie do tego poprowadzić ich połączenia).
  9. No tak zgadzam się, że warto uczyć się na początku czegoś prostego, choć co jest proste to już kwestia dyskusyjna, bo to zależy do czego ten jeżyk będzie używany. Ale to też specyfika uczenia się programowania - abstrakcja i dopasowanie narzędzi do poziomu abstrakcji, który ma reprezentować rzeczywiste działanie, przy czym dochodzą do tego dobre i złe drogi, obie prowadzą do celu, ale niekoniecznie po linii najmniejszego oporu Pocieszam się faktem, że przeglądając forum czasem trafiają się dość zdolni kursanci, którzy dobrze sobie radzą
  10. A mnie się ten projekt bardzo podoba, jako ciekawy pomysł i oryginalne, dopracowane wykonanie. Często takie projekty są później inspiracją do własnych pomysłów i uważam, że warto publikować takie rozwiązania.
  11. Oj, jestem pewien, że spotka się on z dużym zainteresowaniem i wywoła ożywioną dyskusję na temat tego co dokładnie można a czego nie, gdzie jest granica pomiędzy "u mnie działa" a "tak się nie robi" i znajdziesz tutaj bardzo dużo bratnich dusz.
  12. @ethanak nie napisalem o kimkolwiek, ze jest cieniasem. Artykul moge napisac. Tyle, ze moze on zostac zle odebrany. Ale jak znajde czas na zrobienie pomiarow, wykresow oraz przygotuję tekst to jak najbardziej. Dla podanego przypadku radyjka mozna podoiac bez rezystora gdyz sama dioda LED bedzie miala takie parametry zlacza, ze nie poplynie prad, ktory moglby ja przy tym napieciu uszkodzic. Jak wyzej napisalem, jak pozbieram dane to owszem.
  13. @arkady_pl a może zamiast przydzielać zadania sam napisałbyś artykuł o tym jak dobrać rezystor do diody 3,2V zasilanej z 3V i o tym kiedy można przechodzić na czerwonym świetle nie bojąc się pędzącego po pustej ulicy o 4 rano maniaka prędkości? Na forum jest dział "artykuły czytelników" i jestem pewien, że taki artykuł byłby bardzo dobrze przyjęty. Można by go wtedy podlinkować z tego artykułu jako rozszerzenie.
  14. @arkady_pl dziękuję za sugestię, na razie nie planujemy rozbudowywać tego artykułu, ale weźmiemy pod uwagę to zgłoszenie, jeśli będziemy tworzyć drugą część wpisu (w końcu o zasilaniu diod można napisać jeszcze kilka takich artykułów). Oczywiście przypominam również, że każdy z czytelników Forbota może sam napisać artykuł (w tym miejscu: https://forbot.pl/forum/kategoria/5-artykuly-uzytkownikow/). Już wiele artykuł z tego miejsca trafiło później na naszego bloga - zachęcam więc do działania
  15. Czytam tak sobie, czytam i zastanawiam się, co chcesz osiągnąć. W artykule podano sposoby obliczania rezystora dla najbardziej popularnych przypadków (kiedy napięcie zasilające jest wyższe niż napięcie przewodzenia diody i w dodatku jest na tyle stabilne, że można owej niestabilności nie uwzględnić w obliczeniach). Ty chcesz udowodnić coś co jest oczywiste - że na tej podstawie nie da się obliczyć rezystora dla innych, mniej popularnych przypadków. Owszem, dla wartości które podałeś da się to policzyć, ale trzeba mieć jeszcze trochę danych. A trudno w artykułach dla początkujących wyciągać charakterystyki diod różnej maści, wprowadzać pojęcie rezystancji dynamicznej i ogólnie fizyki kwantowej z dodatkiem astrologii. Proponuję, abyś pokazał jak policzyć rezystor dla radyjka zasilanego z bateryjek (btw. to się nazywa ogniwo, bateria to zestaw więcej niż jednego - ogniw, dział, butelek czy bębnów) i białej diody. Na pewno będzie z tego więcej pożytku niż ze stwierdzeń w stylu "ja się nie czepiam ale jesteście cieniasy", czyli Mam nieodparte wrażenie, że zgłosiłeś się na ochotnika OK, więcej się nie wtrącam...
  16. @deshipu ograniczenie pradowe bylo wowczas ustawione na 5A. Zasilacz w żaden sposob nie chronil diody. Stabilizowal tylko napiecie. Porownanie ze swiatlami na skrzyzowaniu nawet trafne. Tak, jak jest 3 rano i nic nie jedzie to ide na czerwonym zamiast stac. Bo rozumiem do czego sluzy sygnalizacja swietlna a nie wykonuje bezmyslnie czynnosci nakazane. Wielu pieszych zginelo na pasach gdy mieli zielone swiatlo. Takze bardzo dobrze mowisz. W szkole powinni uczyc nie o tym, ze idziesz na zielonym ale po co to jest. Diode LED moge zasilac bez rezytora bo wiem jak to dziala. Wiem kiedy musze go dac a kiedy moge go nie wstawiac. Dam Ci proste zadanie. Masz zbudowac radyjko zasilane z napiecia 3V, dwie baterie o napieciu 1,5V każda. Do tego chce aby byla biala dioda LED z napieciem roboczym 3,2V. Wedlug artykulu nie da sie jej zasilic. Czyli nie zbudujesz takiego urzadzenia bo nie wiesz jaki rezytor wstawic. A baterie spokojnie dadza nawet 500mA jesli trzeba. Zatem wedlug wielu teorii sie spali LED jesli bedzie bez rezystora. Napisalem co uwazam. Kazdy zrobi co uwaza. Ide budowac radyjko z biala leda bez rezystora @deshipu nie czepiam sie(choc moze tak to brzmi) lecz w mojej ocenie warto aby uzupelnic artykul. Ot i tyle.
  17. Technologia elastycznych PCB zdecydowanie zrewolucjonizowała elektronikę ubieralną, czyli wearables. Jednak takie płytki drukowane mogą też pełnić funkcję oryginalnych ozdób. Z elastycznego PCB można stworzyć np. motyla w stylu origami, który ma na sobie diody SMD. [blog]https://forbot.pl/blog/motyl-origami-wykonany-z-elastycznego-pcb-id41075[/blog]
  18. @Gieneq Ja nie twierdzę, że pętle czy opóźnienia to źródło wszelkiego zła. Po prostu na samym początku, kiedy delikwent jeszcze nie bardzo wie o co w tym całym programowaniu chodzi powinien uczyć się od rzeczy najprostszych. Tak jak dziecko na początku w przedszkolu poznaje literki, potem uczy się pisać, a dopiero potem poznaje tajniki gramatyki i w końcu zostaje wybitnym pisarzem. Gdybyś od początku chciał wprowadzić np. odmianę przez przypadki - raczej nic by z tego nie wyszło. I tu - zanim się człowiek nie nauczy jak działają warunki w instrukcjach warunkowych, jak się tworzy bloki - nie ma co szaleć z pętlami (które wymagają uprzedniego poznania obu tych rzeczy). Bo inaczej człowiek owszem sparzy się, ale nie będzie miał bladego pojęcia co go tak naprawdę sparzyło Akurat opóźnienia to przeciwieństwo pętli. Tak jak dziecko najpierw ma zeszyt w dwie linie, a potem dopiero się okazuje że te dodatkowe linijki nie są już potrzebne - tak samo tu: najpierw poznaje się opóźnienia, a potem pokazuje się że bez nich też można (tyle że trzeba wiedzieć coś więcej). Nie wspomnę już o goto (o którym to na szczęście w kursie w ogóle nie wspomniano) - jeśli stosować tę instrukcję prawidłowo, program nie traci na czytelności, nie ma jakichś dziwnych efektów ubocznych a przy okazji jest krótszy niż gdyby na siłę pozbyć się goto nawet tam, gdzie jest to naturalne.
  19. @ethanak faktycznie pętle te (podobnie jak opóźnienia) bywają nagminnie stosowane nie tam gdzie trzeba, ale z drugiej strony kiedyś początkujący musi się nauczyć z czym to się je, czasem też musi się sparzyć i zastanowić nad ich sensem, może odkryje koło na nowo i będzie mieć powiedzmy życiową lekcję Podobnie jak opóźnienia, gdyby nie one to przykład blink, który jest bardzo dobrym testem środowiska/płytki zanim ruszy się dalej byłby bardziej skomplikowany, a z czasem niektórzy zauważają, że opóźnienia w programie wcale nie są niezbędne i da się to zrobić inaczej.
  20. Jasne, zdarza się. Pytanie: już wiesz o co chodzi i skąd się wzięło to "podwójne pytanie"?
  21. Początkowo było Serial.readStringUntil('\n'); bo miałem trochę inny zamiar na to zadanie. Kod zmieniłem a komentarz został stary, mój błąd
  22. A kto Ci takich bajek naopowiadał o jakiejś spacji? Serial.read() pobiera dokładnie jeden znak z bufora UART. Czyli w Twoim przypadku sprawa wygląda tak: Program pyta o coś tam Czeka na znak Ty wysyłasz np. znak 'C' i znak nowej linii Program pobiera C z bufora UART Program zapala czerwoną diodę na sekundę Program pyta o coś tam Program pobiera znak nowej linii z bufora UART Program nie robi nic Program pyta o coś tam... A jak się tego pozbyć? Napisać program prawidłowo.
  23. Ostatni tydzień
  24. Nagraliśmy z bratem też krótki filmik na którym widać lekko 'upośledzone' działanie naszego czujnika natężenia światła. Musiałbym jakoś stabilnie przymocować cały serwomechanizm żeby to wytrzymało bez trzymania przeze mnie. Ale nie mam przy sobie taśmy dwustronnej, a nie chce tego na ten moment zaklejać sztyftem i niepotrzebnie brudzić Następnym razem umiejętności nagrywania brata jak i umiejętności edycji filmów wideo moje zostaną poprawione i dodamy do tego jakąś melodyjkę.
  25. Zadanie 6.1 #define FotorezystorJeden A5 #define Potencjometr A4 #define FotorezystorDrugi A3 #define Przycisk 8 int counter = 0; //licznik ile razy wcisnieto przycisk int valFoto1 = 0; //zmienne do przechowywania wartosci odczytanych z peryferiow int valFoto2 = 0; int valPotencjometr = 0; void setup() { Serial.begin(9600); //rozpoczęcie komunikacji przez UART pinMode(Przycisk, INPUT_PULLUP); //przypisanie przycisku pod pin } void loop() { valFoto1 = analogRead(FotorezystorJeden); //odczytanie wartosci z peryferiow valFoto2 = analogRead(FotorezystorDrugi); valPotencjometr = analogRead(Potencjometr); if (digitalRead(Przycisk) == LOW) { counter += 1; //za kazdym kliknieciem przycisku ilosc klikniec bedzie sie zwiekszac o 1 Serial.print("Fotorezystor 1: "); Serial.print(valFoto1); Serial.print(", Fotorezystor 2: "); Serial.print(valFoto2); Serial.print(", Potencjometr: "); Serial.print(valPotencjometr); Serial.print(" Przycisk wciśnięto "); Serial.print(counter); Serial.print(" razy.\n"); delay(1000); //opoznienie zeby z kazdym wcisnieciem przycisku wyswietlalo nam wartosci tylko raz a nie kilka na raz } } Efekt w monitorze portu szeregowe: Zadanie 6.2 #define Zielona 9 #define Czerwona 8 int odebraneDane = 0; void setup() { Serial.begin(9600); pinMode(Zielona, OUTPUT); pinMode(Czerwona, OUTPUT); digitalWrite(Zielona, LOW); digitalWrite(Czerwona, LOW); } void loop() { Serial.print("Podaj jaką diodę mamy uruchomić ('C' -> czerwona, 'Z' -> zielona: \n"); while (Serial.available() == 0) { delay(1000); } if (Serial.available() > 0) { //jeśli Arduino otrzymało jakieś dane odebraneDane = Serial.read(); //przypisujemy wpisane dane do zmiennej odebraneDane switch (odebraneDane) { case 'Z': //jeśli odebrana wartosc brzmi Zielona to zapalamy zieloną diodę digitalWrite(Zielona, HIGH); delay(1000); digitalWrite(Zielona, LOW); break; case 'C': //tu zapalamy czerwoną diodę digitalWrite(Czerwona, HIGH); delay(1000); digitalWrite(Czerwona, LOW); break; } } delay(1000); } Działa, tylko nie mogę sobie poradzić z jedną rzeczą. Na początku pyta raz czy chcemy uruchomić diodę czerwoną czy zieloną. Po wybraniu jednorazowo opcji, np. Z, zapala diodę zieloną, czeka sekundę i ją gasi. Ale wtedy pytanie pojawia się zamiast raz, dwa razy z rzędu chwilę po sobie. Może ktoś podpowie jak usunąć ten nie zbyt istotny natomiast mało estetyczny aspekt. Zadanie 6.3 Dodałem 2 przyciski po wciśnięciu jednego serwomechanizm wskazuje wartość minimalną, po wciśnięciu drugiego wskazuje wartość maksymalną. #include <Servo.h> //biblioteka odpowiedzialna za serwomechanizm #define fotorezystor A5 //zadeklarowanie pinów dla peryferiów #define przyciskMIN 6 #define przyciskMAX 7 Servo serwomechanizm; byte pozycja = 0; //aktualna pozycja serwa w skali 0-180 stopnii int pozycjaPoprzednia = 0; int valMIN = 0; //wartosc minimalna dla swiatla int valMAX = 958; //wartosc maksymalna void setup() { serwomechanizm.attach(11); Serial.begin(9600); //rozpoczęcie komunikacji przez UART pinMode(przyciskMIN, INPUT_PULLUP); pinMode(przyciskMAX, INPUT_PULLUP); } void loop() { int odczytCzujnika = analogRead(fotorezystor); while (digitalRead(przyciskMAX) == LOW) { valMAX = odczytCzujnika; delay(100); } while (digitalRead(przyciskMIN) == LOW) { valMIN = odczytCzujnika; delay(100); } //odczytujemy wartosc z fotorezystora pozycja = map(odczytCzujnika, valMIN, valMAX, 180, 0); //mapujemy ja na mozliwy zakres ruchu serwomechanizmu pozycja = constrain(pozycja, 180, 0); if (abs(pozycja - pozycjaPoprzednia) > 5) //sprawdzamy czy różnica jest większa niż 5 stopni { serwomechanizm.write(pozycja); //wykonujemy ruch pozycjaPoprzednia = pozycja; //nadpisujemy aktualną pozycje jako poprzednia } Serial.println("Aktualna wartość fotorezystora: "); Serial.println(odczytCzujnika); //wysyłamy wartość do terminala UART delay(300); } Zadanie 6.4 Poniosło mnie z kolorami. Ale korzystałem wyłącznie z tego co miałem pod ręką w domu rodzinnym
  1. Załaduj więcej aktywności
×
×
  • Utwórz nowe...