T101 Październik 31, 2024 Udostępnij Październik 31, 2024 Poprawiłem o tym co piszesz i teraz działa jak powinno. Za pierwszym razem źle wpinałem rezystor tzn. był wpięty na tej samej linii co krótsza nóżka czerwonej diody.
T101 Październik 31, 2024 Udostępnij Październik 31, 2024 Chociaż zastanawia mnie jeszcze jedna rzecz. W kursie było takie zdanie "Diody świecą na przemian, ponieważ raz prąd płynie od wyjścia 1 do 2, a raz odwrotnie. Miganie jest możliwe, ponieważ diody wstawione są odwrotnie". Czy dobrze rozumiem, że prąd przepływa z wyjścia mostka, przechodzi przez diodę, a następnie wraca do innego wyjścia mostka?
Sylba Październik 31, 2024 Udostępnij Październik 31, 2024 (edytowany) Dokładnie tak się dzieje. Edytowano Październik 31, 2024 przez Sylba 1
PanMajster Styczeń 20, 2025 Udostępnij Styczeń 20, 2025 Zadanie domowe 8.1 Cytat Dodaj do układu kolejne dwie diody i symuluj nimi drugi silnik. Napisz program, który będzie wykonywał sekwencję: oba do przodu, oba w przeciwne strony, oba w tył i tak w koło. Oczywiście między zmianą kierunku zachowaj odstęp np.: 2 sekundy. void setup() { pinMode(6, OUTPUT); //Sygnał PWM silnika nr 1 digitalWrite(6, HIGH); //Ustawiamy (na stałe) stan wysoki na pinie 6 pinMode(4, OUTPUT); //Sygnał PWM silnika nr 2 digitalWrite(4, HIGH); //Ustawiamy (na stałe) stan wysoki na pinie 4 pinMode(9, OUTPUT); //Sygnały sterujące kierunkiem obrotów silnika nr 2 pinMode(5, OUTPUT); pinMode(7, OUTPUT); //Sygnały sterujące kierunkiem obrotów silnika nr 1 pinMode(8, OUTPUT); } void loop() { digitalWrite(7, HIGH); //Silnik nr 1 - obroty w prawo digitalWrite(9, HIGH); //Silnik nr 2 - obroty w prawo digitalWrite(8, LOW); digitalWrite(5, LOW); delay(2000); digitalWrite(7, LOW); //Silnik nr 1 - obroty w lewo digitalWrite(9, LOW); //Silnik nr 2 - obroty w lewo digitalWrite(5, HIGH); digitalWrite(8, HIGH); delay(2000); digitalWrite(7, HIGH); //Silnik nr 1 - obroty w prawo digitalWrite(9, LOW); //Silnik nr 2 - obroty w lewo digitalWrite(5, HIGH); digitalWrite(8, LOW); delay(2000); digitalWrite(7, LOW); //Silnik nr 1 - obroty w lewo digitalWrite(9, HIGH); //Silnik nr 2 - obroty w prawo digitalWrite(5, LOW); digitalWrite(8, HIGH); delay(2000); } Proszę o sprawdzenie czy o to chodziło. Dzięki ! 1
PanMajster Styczeń 22, 2025 Udostępnij Styczeń 22, 2025 Praca Domowa 8.2 Za pomocą pętli for będzie migał diodą 5 razy. Spróbuj napisać również to samo z wykorzystaniem pętli while. int licznikdiody = 0; void setup() { Serial.begin(9600); //Start komunikacji pinMode(2, OUTPUT); // pin 3 jako wyjscie } void loop() { for (int licznikdiody =0; licznikdiody <= 4; licznikdiody++) { //Wykonaj 5 razy digitalWrite(2, HIGH); Serial.print("Wartosc zmiennej Licznik Diody: "); Serial.print(licznikdiody); //Wyświetl wartość licznika Serial.println(""); //Przejdź do nowej linii delay(200); //Odczekaj chwilkę digitalWrite(2, LOW); delay(200); //Odczekaj chwilkę } digitalWrite(2, HIGH); } Mam tu problem. Napisałem program miał migać 5 razy i przestać. A działa w kółko jak dojdzie do 5 razu to znów idzie od zera i tak w kółko. Na końcu powinno być jakieś break czy coś w tym stylu?
jand Styczeń 22, 2025 Udostępnij Styczeń 22, 2025 Masz dwukrotnie zadeklarowaną zmienną licznikdiody - na początku programu i w pętli for. Trzeba na coś zdecydować. 1
PanMajster Styczeń 22, 2025 Udostępnij Styczeń 22, 2025 37 minut temu, jand napisał: Masz dwukrotnie zadeklarowaną zmienną licznikdiody - na początku programu i w pętli for. Trzeba na coś zdecydować. Dzięki teraz działa ! int licznikdiody = 0; void setup() { Serial.begin(9600); //Start komunikacji pinMode(2, OUTPUT); // pin 3 jako wyjscie } void loop() { for (licznikdiody; licznikdiody <= 4; licznikdiody++) { //Wykonaj 5 razy digitalWrite(2, HIGH); Serial.print("Wartosc zmiennej Licznik Diody: "); Serial.print(licznikdiody); //Wyświetl wartość licznika Serial.println(""); //Przejdź do nowej linii delay(200); //Odczekaj chwilkę digitalWrite(2, LOW); delay(200); //Odczekaj chwilkę } digitalWrite(2, HIGH); } 1
BeeKeyPro Styczeń 22, 2025 Udostępnij Styczeń 22, 2025 9 minut temu, PanMajster napisał: Dzięki teraz działa ! Super! Ogólnie lepiej zmienną zadeklarować w pętli for (jeśli później jej nie będziesz używał). Będzie czytelniej, a w większych projektach można na tym trochę pamięci oszczędzić. 1
ethanak Styczeń 22, 2025 Udostępnij Styczeń 22, 2025 Co to znaczy: for (licznikdiody; ... I czym się różni od: for (; ...
orb777 Styczeń 22, 2025 Udostępnij Styczeń 22, 2025 2 godziny temu, PanMajster napisał: Mam tu problem. Napisałem program miał migać 5 razy i przestać. W takim razie mogłeś umieścić for(;;) w setup() lub wstawić jednorazową funkcję z for(;;), tak jak wspomniano w opisie. W twoim kodzie for(;;) w loop() sprawdza warunek w nieskończoność, czy taki był twój zamiar? 2
PanMajster Styczeń 22, 2025 Udostępnij Styczeń 22, 2025 53 minuty temu, ethanak napisał: Co to znaczy: for (licznikdiody; ... I czym się różni od: for (; ... Niczym sie nie rożni? W sumie myślałem ze trzeba coś tam wpisać. Dlatego tak wpisałem 53 minuty temu, orb777 napisał: W takim razie mogłeś umieścić for(;;) w setup() lub wstawić jednorazową funkcję z for(;;), tak jak wspomniano w opisie. W twoim kodzie for(;;) w loop() sprawdza warunek w nieskończoność, czy taki był twój zamiar? int licznikdiody = 0; void setup() { Serial.begin(9600); //Start komunikacji pinMode(2, OUTPUT); // pin 3 jako wyjscie for (; licznikdiody <= 4; licznikdiody++) { //Wykonaj 5 razy digitalWrite(2, HIGH); Serial.print("Wartosc zmiennej Licznik Diody: "); Serial.print(licznikdiody); //Wyświetl wartość licznika Serial.println(""); //Przejdź do nowej linii delay(200); //Odczekaj chwilkę digitalWrite(2, LOW); delay(200); //Odczekaj chwilkę digitalWrite(2, HIGH); //wylacz diode po cyklu } } void loop() { } Czyli że tak jest lepiej? 1
BeeKeyPro Styczeń 22, 2025 Udostępnij Styczeń 22, 2025 4 minuty temu, PanMajster napisał: Czyli że tak jest lepiej? Zależy wszystko od potrzeb, jeśli nie potrzebujesz, aby ta pętla była sprawdzana ciągle, to lepiej umieścić w void setup(). W Twoim przypadku (chcesz żeby dioda mrugała tylko 5 razy) wychodzi to na lepiej. 1
orb777 Styczeń 22, 2025 Udostępnij Styczeń 22, 2025 1 godzinę temu, PanMajster napisał: Czyli że tak jest lepiej? Niii lepiej, niii gorzej, dokładnie jak opisał @BeeKeyPro. Jako amator wspomnę tylko: przyjrzałbym się miejscom wywoływania funkcji "digitalWrite(2, HIGH)", czy w for(;;) faktycznie musi być odpalana 2x, tj. na początku i końcu pętli? 1
PanMajster Styczeń 22, 2025 Udostępnij Styczeń 22, 2025 Praca domowa 8.3 Napisz program, który odczyta liczbę z zakresu 0-9 wysłaną prze UART, a następnie wyświetli na ekranie tyle samo znaków gwiazdki *. String liczba = ""; // Bufor do przechowywania całej liczby void setup() { Serial.begin(9600); Serial.println("Witaj w SYSTEMIE"); //wprowadzenie Serial.println("Wprowadź liczbe od 1-9"); //wprowadzenie } void loop() { if (Serial.available() > 0) { //jezeli odebrane dane sa powyzej 1 znaku char znak = Serial.read(); // char znak = odczyt z klawiatury if (isdigit(znak)) { //sprawdzamy czy wpisany "znak" to liczba liczba += znak; // Dodaj cyfrę do bufora } else if (znak == '\n') { // Zakładamy, że koniec liczby oznacza znak nowej linii int liczbaInt = liczba.toInt(); switch (liczbaInt) { case 1: Serial.println("*"); break; case 2: Serial.println("**"); break; case 3: Serial.println("***"); break; case 4: Serial.println("****"); break; case 5: Serial.println("*****"); break; case 6: Serial.println("******"); break; case 7: Serial.println("*******"); break; case 8: Serial.println("********"); break; case 9: Serial.println("*********"); break; default: Serial.println("Nieznany KOD"); } liczba = ""; // Wyczyść bufor }} delay(200); } Takie coś wyskrobałem . Dodałem nowa funkcje której jeszcze się nie uczyłem "is digit" wiec nie jestem pewien czy dobrze zrobione. W każdym razie działa. Zadanie domowe 8.4 Napisz program, który za pomocą 2 pętli for będzie płynnie rozpędzał oraz hamował silnik. int i = 0; //predkosc cilnika void setup() { pinMode(6, OUTPUT); //Sygnał PWM silnika nr 1 pinMode(7, OUTPUT); //Sygnały sterujące kierunkiem obrotów silnika nr 1 pinMode(8, OUTPUT); digitalWrite(7, LOW); //Silnik nr 1 - obroty w lewo digitalWrite(8, HIGH); Serial.begin(9600); //Start komunikacji } void loop() { for (i; i <= 255; i++) { analogWrite(6, i); //Spokojne rozpędzanie silnika Serial.println(i); //wyswietlanie predkosci (wypełnienia) delay(30); } for (i; i >= 0; i= i-1) { analogWrite(6, i); //Spokojne zwalnianie silnika Serial.println(i); //wyswietlanie predkosci (wypełnienia) delay(30); }} 1
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ę »