Skocz do zawartości

mcklaklen

Użytkownicy
  • Zawartość

    5
  • Rejestracja

  • Ostatnio

Informacje

  • Płeć
    Mężczyzna

Osiągnięcia użytkownika mcklaklen

Młodszy odkrywca

Młodszy odkrywca (3/19)

  • Za 5 postów
  • To już rok!
  • To już 5 lat!

Odznaki

0

Reputacja

  1. Zadanie 6.3 nie dodałem funkcji cyfry(); w komentarzu bo to jest switch case odpowiedzialny za liczby i zajmuje dużo miejsca, chciałem tą funkcje zrobić w postaci tablicy niestety nie potrafię byte liczba = 0; byte a = 0; byte b = 0; unsigned long czasReal = 0; unsigned long czasPobrany = 0; unsigned long czasDelay = 0; #define wyswietlacz1 4 #define wyswietlacz2 5 void setup() { pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(wyswietlacz1, OUTPUT); pinMode(wyswietlacz2, OUTPUT); } void loop() { czasReal = millis(); czasDelay = millis(); if (czasReal - czasPobrany > 300) { //zmiana wartości na wyswietlaczu nr 2 a++; czasPobrany = czasReal; } digitalWrite(wyswietlacz1, HIGH); digitalWrite(wyswietlacz2, LOW); cyfry(a); while (czasDelay - czasReal < 5UL) { //zatrzymanie w While na 5ms jako delay czasDelay = millis(); } czasReal = millis(); digitalWrite(wyswietlacz1, LOW); digitalWrite(wyswietlacz2, HIGH); cyfry(b); while (czasDelay - czasReal < 5UL) { //zatrzymanie w While na 5ms jako delay czasDelay = millis(); } if (a > 9) { //zmiana warosci na wyswietlaczu 2 b++; //dodanie wartosci na wyswietlaczu 1 a = 0; //wyzerowanie wyswietlacza nr 2 po wartsci 9 if (b == 9) { //wyzerowanie wyswietlacza nr 1 po wartsci 9 b = 0; } } }
  2. teraz rozumiem gdzie leży błąd, dziękuje bardzo za odpowiedź.
  3. nie do końca o to mi chodzi... Chciałbym, aby dioda po wciśnięciu guzika wykonała załóżmy 5 cykli mrugania (1 cykl pwm od 0 do 255 i 255 do 0 z pewnym opóźnieniem), wyłączyła się po tym i oczekiwała na kolejne naduszenie.
  4. ok dość chaotycznie to opisałem. Chodzi mi o to że chciałem napisać program który działa dopiero po wciśnięciu guzika i wykorzystuje pwm do kilku "przebłyśnięć" Tylko że ten program nie działa. Działa tak ,że muszę trzymać guzik i chodzi (ciągle ) ,ale tylko do momentu aż puszczę guzik, potem zatrzymuje się na pewnej wartości. Drugi program ten co tam wcześniej podałem na forum (na drugiej pozycji) musiałem trochę pokombinować aby zablokować to w pętli while (co prawda program działa dobrze ,ale wydaje mi się bardzo przekombinowany), ten podany niżej to ten co nie działa w sumie nie wiem dlaczego. czy jest jakoś prostszy sposób na napisane tego programu? int pwm; int zmiana = 5; void setup() { pinMode(5, INPUT_PULLUP); // przypisanie pinu 5 na guzik pinMode(11, OUTPUT); //wyście LED } void loop() { if(digitalRead(5) == LOW){ //po nacisnieciu guzika... for(int i =0; i <5; i++){ funkcjaLED(); } } } void funkcjaLED(){ analogWrite(11,pwm); //przypisanie wwjscia sygnalu pwm pwm += zmiana; delay(10); if(pwm == 255 || pwm ==0){ zmiana = 0-zmiana; //zmiana znaku na przeciwny jezeli osiagnie próg 0 lub 255 } }
  5. Witam, mam pewien problem w odniesieniu do tego zadania z artykułu Zadanie domowe 9.1 Napisz funkcję, która sprawia, że dioda będzie pulsować (stopniowe przygaszanie i rozjaśnianie). Skorzystaj oczywiście z wiadomości zdobytych podczas lekcji o sygnale PWM. chciałem to trochę rozbudować o funkcje stopniowego przygaszania i rozjaśniana po wciśnięci guzika i napisałem program: int pwm; int zmiana = 5; void setup() { pinMode(5, INPUT_PULLUP); // przypisanie pinu 5 na guzik pinMode(11, OUTPUT); //wyście LED } void loop() { delay(100); if(digitalRead(5) == LOW){ //jeżeli przycisne guzik zostanie wywołana funkcja funkcjaLED(); } } void funkcjaLED(){ analogWrite(11,pwm); //przypisanie wwjscia sygnalu pwm pwm += zmiana; delay(10); if(pwm == 255 || pwm ==0){ zmiana = 0-zmiana; //zmiana znaku na przeciwny jezeli osiagnie próg 0 lub 255 } } kod ten nie działa, bo dioda przygasza się i rozbłyska tylko gdy trzymam guzik, więc go przerobiłem i rozbudowałem o potencjometr który reguluje ilość błyśnięć: int pwm; int zmiana = 5; int q; void setup() { pinMode(5, INPUT_PULLUP); // przypisanie pinu 5 na guzik pinMode(11, OUTPUT); //wyście LED } void loop() { int ilosc = analogRead(A0); //odczytanie wartosci z potencjometru int ile =map(ilosc,0,1023,1,10); //podzielenie wartosc z potencjometru na 10 rozjasnien delay(200); digitalWrite(11, LOW); //wylaczenie diody po skonczonym obiegu, bo inaczej by sie ciagle żarzyła if(digitalRead(5) == LOW){ //po nacisnieciu guzika... ulepsz(ile); //okresla "ile" razy sygnal pwm ma powodowac rozjasnienie z odczytanej i zmapowanej wartosci potencjometru } } void ulepsz(int ile){ q= 2*ile; //okreslenie ilosci blysniec x2 bo za kazdym przejscie przez 0 i 255 daje 1, więc przy 10 byłoby 5 gdyby nie x2 while(q != 0){ //zatrzymanie w pętli while funkcjaLED(); } } void funkcjaLED(){ analogWrite(11,pwm); //przypisanie wwjscia sygnalu pwm pwm += zmiana; delay(10); if(pwm == 255 || pwm ==0){ zmiana = 0-zmiana; //zmiana znaku na przeciwny jezeli osiagnie próg 0 lub 255 q--; //odjęcie } } Ten kod działa wyśmienicie ale czy da się ten kod uprościć? Zastanawia mnie fakt dlaczego w pierwszym kodzie dioda mruga tylko wtedy gdy trzymam guzik. Dla "for" kod mi nie działał, dopiero gdy zatrzymałem w while działa. Moje ostatnie pytanie dlaczego jak pwm jest na 0 dioda ciągle się "żarzy" i nie wygasza, gdy pętla się skończy, muszę ją zawsze po pętli wyłączyć? Dziękuje z góry za odpowiedzi mnie nękające 🙂
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.