Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Wzrost wartości "delay" poprzez przycisk

nikoś14 07 Maj 2014 15:03 834 5
  • #1 07 Maj 2014 15:03
    nikoś14
    Poziom 2  

    Witam Jestem początkującym w dziedzinie programowania i dlatego chciałbym się zwrócić z prośbą o pomoc otóż napisałem program który ma sterować działaniem przekaźnika w określonym czasie, i tu mam problem chciałbym to zrobić tak żeby działało to w taki sposób że po włączeniu programu delay - czas jest równy 500 a po każdorazowym wciśnięciu przycisku czas zwiększa się o 1000 ( 1sek.). Może mi ktoś podpowiedzieć jak to zrobić bo nie moge sobie z tym poradzić .Z góry dzięki za wszelką pomoc

    Oto mój program

    #include <LiquidCrystal.h>
    LiquidCrystal lcd(0,1,2,3,4,5);
    int czas;

    void setup()
    {
    pinMode(6,OUTPUT);
    pinMode(10,INPUT_PULLUP);

    lcd.begin(16,2);
    lcd.clear();
    }
    void loop ()
    {
    if
    (digitalRead(10) == LOW)
    {
    czas = 500 ;
    /*
    tutaj potrzebuje funkcje która zwiększała by tą zmienną przy kazdorazowym wciśnięciu przycisku (500 1500 2500 itp)
    */
    }

    digitalWrite(6,HIGH);
    delay(czas);
    digitalWrite(6,LOW);
    delay(czas);

    lcd.setCursor(0,0);
    lcd.print("****PREDKOSC****");
    lcd.setCursor(6,1);
    lcd.print (czas);
    }

    0 5
  • Pomocny post
    #2 07 Maj 2014 19:10
    Tomq
    Poziom 38  

    Wklejaj kod używając znacznika SYNTAX.

    Możesz zrobić np.:

    Kod: c
    Zaloguj się, aby zobaczyć kod



    Problemem zapewne będą drgania styków i przydałoby się je wyeliminować. Wypadałoby też zrobić jakieś rolowanie tej funkcji, tak by po przekroczeniu pewnej wartości znów zaczynać od zera, np.:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #3 07 Maj 2014 19:47
    gaskoin
    Poziom 38  

    Zwróciliście uwagę na rozmiary waszych programów z takim rozwiązaniem ?

    0
  • #4 07 Maj 2014 20:22
    Tomq
    Poziom 38  

    Trudno osobie która wykorzystuje same gotowe funkcje tłumaczyć od podstaw timery. Bo innego sensownego sposobu zamiany "delay();" w tym momencie nie widzę.

    Jeśl nikoś14 chciałby się zaznajomić z tym zagadnieniem:
    http://diycenter.acid19.linuxpl.com/readarticle.php?article_id=3
    http://maxembedded.com/2011/07/14/avr-timers-ctc-mode/

    Przy kolejnym wciśnięciu przycisku można np. zwiększać wartość CTC. Ewentualnie zrobić cykliczne przerwania i wciśnięcie przycisku zwiększałoby zmienną, która byłaby następnie dekrementowana w tymże przerwaniu. Ale żadne z tych rozwiązań nie będzie tak proste jak użycie "delay();"

    0
  • Pomocny post
    #5 07 Maj 2014 22:01
    gaskoin
    Poziom 38  

    Nie każę stosować timera. Tylko takie użycie delay powoduje dość sporą jego niedokładność. Jeżeli mamy stałe skoki czasu to można to zrobić tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    I obsługę przerwania/przycisku zrealizować tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Nie widzę sensowniejszego rozwiązania jeśli ktoś nie chce/nie potrafi używać timerów.

    0
  • #6 09 Maj 2014 20:22
    nikoś14
    Poziom 2  

    Dzięki wszystkim za pomoc. Zamykam temat

    0