marek1707 Maj 3, 2017 Udostępnij Maj 3, 2017 println dołącza zawsze na końcu znak nowej linii. Użyj print: Serial.print("Napiecie wynosi: "); Serial.print(napiecie); Serial.println("V"); A w razie kolejnych wątpliwości zawsze zaczynaj od dokumentacji: https://www.arduino.cc/en/reference/serial 1 Cytuj Link do komentarza Share on other sites More sharing options...
KrzysioJerzyna Maj 3, 2017 Udostępnij Maj 3, 2017 Dzięki wielkie za pomoc 🙂. Pozdrawiam. Cytuj Link do komentarza Share on other sites More sharing options...
MrSnowman24688 Czerwiec 21, 2017 Udostępnij Czerwiec 21, 2017 Witam! Dopiero się uczę i potrzebuję pomocy. Próbowałem zrobić zadanie 4.5 ale niestety nie potrafię rozwiązać jednego problemu. [ podany kod służy jedynie do zademonstrowania problemu ] Chciałbym aby po naciśnięciu przycisku program czekał na podanie imienia i dopiero później przechodził do dalszej części programu. Obecnie wygląda to tak, że po wpisaniu imienia nic się nie dzieje. Dopiero po kolejnym naciśnięciu przycisku pojawia się tekst "Podaj imię:" oraz "Witaj " + odebraneDane + "!". String odebraneDane = ""; //Pusty ciąg odebranych danych void setup () { Serial.begin (9600); pinMode(8,INPUT_PULLUP); } void loop () { if (digitalRead(8) == LOW) { delay(300); Serial.println("Podaj imię:"); if(Serial.available() > 0) { odebraneDane = Serial.readStringUntil('\n'); Serial.println("Witaj " + odebraneDane + "!"); } } } Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Czerwiec 21, 2017 Udostępnij Czerwiec 21, 2017 MrSnowman24688, witam na forum! Podaję hasło klucz: pętla while 🙂 Bez tego będzie ciężko. Nie podaję rozwiązania, spróbuj najpierw podziałać coś samodzielnie. 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
MrSnowman24688 Czerwiec 22, 2017 Udostępnij Czerwiec 22, 2017 Dzięki Treker 😃 "while(Serial.available()==0){}" rozwiązało problem. Mam nadzieję, że o to chodziło. Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Czerwiec 26, 2017 Udostępnij Czerwiec 26, 2017 MrSnowman24688, tak, dokładnie o to 🙂 Inna opcja zapisu (z wykorzystaniem wykrzyknika jako negacji): while(!Serial.available()){} Cytuj Link do komentarza Share on other sites More sharing options...
mario321 Lipiec 8, 2017 Udostępnij Lipiec 8, 2017 Witam, Jestem nowy na forum. Zaczynam przygodę z arduino ! Zadanie domowe 4.1 W skrajnej pozycji potencjometru(minimum) , dioda led delikatnie mruga. W drugiej skrajnej pozycji (max) led pali się światłem ciągłym , ale na oscyloskopie widać szpilki, które powstają z tą samą częstotliwością co mruganie leda na w pozycji potencjometru skręconego na minimum. Jak zatem pozbyć się tego efektu ? Tak, aby led był całkowicie wyłączony lub zapalony . Jak umieścić ten kod w pętli wewnętrznej ? Tak aby czas załączania i wyłączenia leda nie wpływał na inne pętle użyte w kodzie? Pozdrawiam. Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Lipiec 9, 2017 Udostępnij Lipiec 9, 2017 mario321, witam na forum 🙂 Pokaż swój program - łatwiej będzie znaleźć rozwiązanie. Cytuj Link do komentarza Share on other sites More sharing options...
mario321 Lipiec 10, 2017 Udostępnij Lipiec 10, 2017 unsigned long currentTime; unsigned long currentLowTime; unsigned long currentMillis; unsigned long currentTimeB; unsigned long currentLowTimeB; unsigned long currentMillisB; int PotPin = A2; // przypisujemy do zmiennej numer wejścia analogowego ANALOG IN - A2 int pot; // zmienna w której będziemy zapisywać "wartość" potencjometru int zalaczanie; // zmienna w której będziemy zapisywać czas załączania int przerwa; // zmienna w której będziemy zapisywać czas przerwy void setup() { Serial.begin(9600); pinMode(8, OUTPUT); currentMillis=millis(); currentTime=0; currentLowTime=0; pinMode(9, OUTPUT); currentMillis=millis(); currentTime=0; currentLowTime=0; pinMode(10, OUTPUT); } int isInRange(long low, long high,long val) { if(val<low || val>high) return 0; return 1; } void loop() { Serial.println(analogRead(A0)); if(isInRange(800,1023,analogRead(A0))) { currentLowTime=0; currentTime+=(millis()-currentMillis); currentMillis=millis(); if(isInRange(0,200,currentTime)) { digitalWrite(8, HIGH); } else if(isInRange(200,1000,currentTime)) { digitalWrite(8, LOW); } else if(isInRange(1000,1400,currentTime)) { digitalWrite(8, HIGH); } else if(isInRange(1400,2000,currentTime)) { digitalWrite(8, LOW); } else if(isInRange(2000,2600,currentTime)){ digitalWrite(8, HIGH); } else if(isInRange(2600,3000,currentTime)) { digitalWrite(8, LOW); } else if(isInRange(3000,3800,currentTime)) { digitalWrite(8, HIGH); } else if(isInRange(3800,4000,currentTime)) { digitalWrite(8, LOW); } else { digitalWrite(8, HIGH); } } else { currentLowTime+=(millis()-currentMillis); currentMillis=millis(); if(currentLowTime>5) { currentTime=0; digitalWrite(8, LOW); } } { Serial.println(analogRead(A1)); if(isInRange(800,1023,analogRead(A1))) { currentLowTimeB=0; currentTimeB+=(millis()-currentMillisB); currentMillisB=millis(); if(isInRange(0,200,currentTimeB)) { digitalWrite(9, HIGH); } else if(isInRange(200,1000,currentTimeB)) { digitalWrite(9, LOW); } else if(isInRange(1000,1400,currentTimeB)) { digitalWrite(9, HIGH); } else if(isInRange(1400,2000,currentTimeB)) { digitalWrite(9, LOW); } else if(isInRange(2000,2600,currentTimeB)) { digitalWrite(9, HIGH); } else if(isInRange(2600,3000,currentTimeB)) { digitalWrite(9, LOW); } else if(isInRange(3000,3800,currentTimeB)) { digitalWrite(9, HIGH); } else if(isInRange(3800,4000,currentTimeB)) { digitalWrite(9, LOW); } else { digitalWrite(9, HIGH); } } else { currentLowTimeB+=(millis()-currentMillisB); currentMillisB=millis(); if(currentLowTimeB>5) { currentTimeB=0; digitalWrite(9, LOW); } } } { // regulacja potencjometru pot = analogRead(PotPin); // odczytujemy A2 i zapisujemy w zmiennej pot if (pot > 800) { pot=800; } if (pot < 150) { pot=150; } zalaczanie = map(pot, 150, 800, 0, 100); przerwa = map(pot, 150, 800, 100, 0); digitalWrite(10, HIGH); delay(zalaczanie); // przerwa zależna od położenia potencjometru digitalWrite(10, LOW); delay(przerwa); // przerwa zależna od położenia potencjometru } } I jeśli zmieniam czas tutaj : zalaczanie = map(pot, 150, 800, 0, 100); przerwa = map(pot, 150, 800, 100, 0); z 0,100 na 0,1000 i z 100, 0 na 1000, 0 to automatycznie miganie diody na pinie 10 jest wolniejsze, tak jak być powinno, ale diody na pinie 8 i 9 tracą swoją sekwencje przez zmianę czasu w załączaniu i przerwie.... Można to umieścić w pętli wewnętrznej ?(najlepiej by było gdyby był drugi loop 🙂) Tak aby zmiany czasu nie miały wpływu na pin 8 i 9 ? I jeszcze jedno : Kiedy skręcę potencjometr (wejscie A2 , wyjscie 10 ) na minimum to dioda lekko się błyska, zarży się na ułamek sekundy z częstotliwością taką, jaką jest zadana czasowo. zalaczanie = map(pot, 150, 800, 0, 100); przerwa = map(pot, 150, 800, 100, 0); czyli : 0, 100 100,0 Natomiast kiedy skręcę potencjometr na max dioda pali się światłem ciągłym, ale na oscyloskopie widać szpilki, też dokładnie z tą samą częstotliwością jak przypadku potencjometru skręconego na minimum. Nie chcę szpilek, ani zarżenia się diody . Jak się tego pozbyć? Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Lipiec 11, 2017 Udostępnij Lipiec 11, 2017 mario321, niestety Twój program jest dość nieczytelny (brak wcięć, wybrakowane komentarze). Bardzo ciężko go analizować - nie jestem w stanie na ten moment pomóc, bo nie mam pod ręką Arduino, a analizowanie tego w głowie nie przyniesie niczego dobrego. Korzystasz też z funkcji, które nie były omawiane w kursie (milis) dlatego najlepiej będzie, jeśli w przypadku dalszych problemów założysz osobny temat, w którym opiszesz problem. Dzięki temu nie będziemy "mieszać w głowach" innym czytelnikom tego kursu. Z góry dziękuję za zrozumienie i pomoc w utrzymaniu porządku na forum 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
sebastian_sl Lipiec 22, 2017 Udostępnij Lipiec 22, 2017 Cześć, mam pytanie odn. zachowania układu - dioda włączana/wyłączana zależnie od stanu fotorezystora i potencjometru. Dla jasności w programie dodałem funkcję,która wyświetla pomiary na A5 oraz A4. W przypadku zaciemnienia fotorezystora,odczyty z potencjometru spadały, natomiast w odwrotnej sytuacji - rosły. przykładowe pary: 136:680; 45:640; 670:850; Można temu jakoś zaradzić? Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Lipiec 22, 2017 Udostępnij Lipiec 22, 2017 sebastian_sl, jeśli chcesz, aby odczyty były "odwrotne" możesz zrobić to programowo lub sprzętowo. W drugim wypadku wystarczy zamienić zasilanie dzielnika napięcia: masa do fotorezystora, a 5V (Vcc) do rezystora (lub odwrotnie). Cytuj Link do komentarza Share on other sites More sharing options...
RC95 Sierpień 22, 2017 Udostępnij Sierpień 22, 2017 Witam, jako że to mój pierwszy komentarz, chciałem podziękować za kursy, które są świetne. Przeszedłem elektronikę I i dotychczasowe części Arduino z przyjemnością. Teraz przy zadaniu 4.5 napotkałem problem. Chodzi o przekazywanie liczb do Arduino przez UART. Moja filozofia jest taka że rozwiązuje zadania na bazie informacji z kursu i wydaje mi się że tym razem było ich za mało. Ostatecznie rozwiązałem problem posiłkując się kodem jednego z użytkowników, ale nie miałem pełnej satysfakcji. Stąd moja sugestia, żeby dodać do kursu coś o instrukcji/poleceniu(?) "xxx.toInt()". Kolejną nurtującą mnie rzeczą jest zastosowanie dzielnika napięcia przy fotorezystorze. Skoro jego rezystancja jest zależna od oświetlenia, to czy odczytów z ADC nie można dokonać po prostu "za" szeregowym połączeniem fotorezystora z rezystorem (bez konieczności stosowania dzielnika)? Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Sierpień 23, 2017 Udostępnij Sierpień 23, 2017 RC95, witam na forum, dziękuję za miłe słowa! Faktycznie w tej części nie ma informacji o xxx.toInt(), pierwotnie zamysł był taki, aby zmusić czytelników do szukania i główkowania 😉 Jeszcze zostawię to w takiej formie, jeśli pojawi się więcej problemów, to zrobię stosowną aktualizację. Niestety nie wiem jak dokładnie chciałbyś inaczej podłączyć fotorezystor. W końcu dzielnik napięcia, to tak naprawdę szeregowe połączenie dwóch rezystorów. Nie rozumiem gdzie dokładnie chciałbyś dokonywać pomiaru. Spróbuj przerysować sobie schemat - może wtedy wszystko się rozjaśni. Cytuj Link do komentarza Share on other sites More sharing options...
Krigare Wrzesień 25, 2017 Udostępnij Wrzesień 25, 2017 Treker Przydało by się poprawić w kursie to co Pakos napisał. Wybacz, że to piszę ale chwilę się męczyłem niczym doszedłem to tego co Pakos. Już myślałem że uszkodziłem Arduino. Mam kilka uwag do funkcji map(). W artykule zwracasz uwagę, że poprawne działanie "Wskaźnik na diodach" uzyskałeś zmieniając wartość z 1023 na 1021. Zgodnie z kodem funkcji map() long map(long x, long in_min, long in_max, long out_min, long out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } dla map(x, 0, 1023, 1, 5); piaty warunek zachodzi tylko gdy x=1023. Czyli sygnał analogowy podzielony jest na 4 przedziały i wystąpienie wartości max. Lepsze działanie kodu uzyskamy poprzez: map(x, 0, 1023, 0, 5); i zmieniając warunki lub map(x, 0, 1023, 1, 6); 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!