Arduino Polska Forum

Pełna wersja: Podajnik sterowany przez UNO + LCD
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2 3 4
1. Brak definicji zmiennej "previousMillis".
2. Co to robi -> "previousMillis == 0;"
Zamiast:
Kod PHP:
if (currentMillis 5000) {
    
previousMillis == 0;
} else {
    
previousMillis currentMillis;

    if (
ledState == LOW) {
        
ledState HIGH;
    } else {
        
ledState LOW;
    }

    
digitalWrite(ledPinledState);

można było prościej:
Kod PHP:
if (currentMillis 5000) {
    
previousMillis currentMillis;

    if (
ledState == LOW) {
        
ledState HIGH;
    } else {
        
ledState LOW;
    }

    
digitalWrite(ledPinledState);


Oczywiście ja zrobiłbym to całkiem inaczej Wink.
Musisz mi wybaczyć moje błędy. Nie wszystkim przychodzi to z łatwością
(09-03-2017, 19:22)Fuks81 napisał(a): [ -> ]Musisz mi wybaczyć moje błędy. Nie wszystkim przychodzi to z łatwością

Tu nie ma co wybaczać, to są uwagi które maja służyć poprawieniu programu i nauce.

Następne zadanie to to co chciałeś w poście #5 -> różny czas stanu niskiego i wysokiego. Na razie bez przycisku i bez opóźnienia. Taki BlinkWithoutDelay ale z różnymi czasami zapalenia i zgaszenia. Możesz to zrobić z użyciem if lub lepiej switch. W zależności od stanu zmiennej ledState zmieniaj interval lub w dowolny inny sposób który wymiślisz.
Namok DZIĘKUJĘ CI SERDECZNIE ZA POŚWIĘCANIE CZASU DLA MNIE.
Jeśli chodzi o użycie IF to myślę, że powinienem mieć dwa interwały uruchamiane naprzemiennie. Co do SWITCH to też jeszcze nie wiem, którą zmienną mam podstawić i jak powinny wyglądać warunki. Z pomocą przychodzi symulator. Podsumowując odezwę się jak będą efekty. Jeszcze raz dzięki.
(10-03-2017, 16:52)Fuks81 napisał(a): [ -> ]Co do SWITCH to też jeszcze nie wiem, którą zmienną mam podstawić i jak powinny wyglądać warunki.
Musisz się wczytywać co piszę Smile
(09-03-2017, 20:27)namok napisał(a): [ -> ]Możesz to zrobić z użyciem if lub lepiej switch. W zależności od stanu zmiennej ledState zmieniaj interval lub w dowolny inny sposób który wymiślisz.
Zrozumiałem Twoją wypowiedź. Po prostu wydaje mi się, że dobrze umieć dowolny sposób a jeszcze lepiej poznać kilka.
Chyba jednak się do tego nie nadaję. Napisałem kod na dwa interwały ale to jest raczej kombinacja na chybił trafił.
Niby wszystko jest OKI ale nic nie rozumiem z tego kodu. Biorę się za switch, może tu osiągnę jakiś sukces. Zaczynam się zniechęcać. A to dopiero przedszkole.

Kod:
const int ledPin =  13;
const int led_off = 5000;
const int led_on = 1000;

int LedState = HIGH;


unsigned long previousMillis = 0;  

void setup() {
    
    
    pinMode(ledPin, OUTPUT);
}

void loop() {
    
    
    unsigned long currentMillis = millis();  
    
    
    if (LedState == HIGH) {    
        
        
        if ( currentMillis - previousMillis >= led_on) {
            LedState = LOW;
            digitalWrite(ledPin, LedState);
            
            previousMillis = currentMillis;
            
        }
    }
    else {
        
        if ( currentMillis - previousMillis >= led_off) {
            LedState = HIGH;
            digitalWrite(ledPin, LedState);
            
            previousMillis = currentMillis;
            
        }
    }
}
Każde rozwiązanie które działa jest dobre. Można się spierać co do "jakości" programu ale "jakość" przychodzi z czasem.
Wprowadziłeś dwie zmienne "len_on" i "led_off" zamiast "interval". A można zmieniać wartość "interval" w zależności od stanu "ledState".
Jeśli tem problem zaczyna Cię nużyć to proponuje odłożyć go na jakiś czas("z problemem czasem trzeba sie przespać") i przerobić jakiś kurs arduino który niedość że pozwili zapoznać się z podstawowymi instrukcjami(które koniecznie trzeba poznać) to da gotowe rozwiązania na podstowe problemy.
Wracam po chwilowej nieobecności. Na upartego chciałem się nauczyć instrukcji SWITCH CASE. Bez wskazówki jestem na to za głupi. Nie mogę tego ogarnąć.
Ten kod wymodziłem już dawno. Jest to wersja na jeden "interval" oraz z przykładowym opóźnieniem czasowym.

Kod:
const int ledPin =  13;
const int interval = 5000;


int LedState = HIGH;


unsigned long previousMillis = 0;  

void setup() {
    
    
    pinMode(ledPin, OUTPUT);
}

void loop() {
    
    
    unsigned long currentMillis = millis();   
 
    if(LedState == HIGH) {    
        
        
        if ( currentMillis - previousMillis >= (interval/5)) {
            LedState = LOW;
            digitalWrite(ledPin, LedState);
            
            previousMillis = currentMillis;
        }
        
        
    }
    else {
        
        if ( currentMillis - previousMillis >= interval) {
            LedState = HIGH;
            digitalWrite(ledPin, LedState);
            if(currentMillis > 15000) {
                
                previousMillis = currentMillis;
                
            }    
        }
    }
}
Oglądam skoki więc dużo nie napisze.
Jeśli chodzi o switch to w internecie jest sporo kursów czy to c czy c++.
Stron: 1 2 3 4