• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Podajnik sterowany przez UNO + LCD
#29
Witam. Z ciężkim bólem kod przerobiony na użycie samego millis(). Błąd z dioda pozostał.
W szkicu led na pinie 12 sygnalizuje działanie funkcji migacz a led_builtin wskazuje stan przycisku. I w sytuacji gdy stan led na pinie 13 jest HIGH to funkcja migacz działa poprawnie. Lecz jeśli stan przycisku się zmieni na przeciwny( led_bultin gaśnie ) w momencie gdy led na pinie 12 jest w stanie HIGH , to już taki zostaje do momentu zmiany stanu przycisku. Mam nadzieję, że zrozumiale to opisałem.
A poza tym sklejenie dwóch przykładów (BlinkWithoutMillis + Debounce) tyle czasu ponieważ wiedziałem, że muszę wstawić odpowiedni warunek do działania kodu. Problem w tym, że nie wiedziałem gdzie go wstawić. Poradniki tego nie "mówią".

Kod:
const int ledPin =  LED_BUILTIN;
int ledPin1 = 12;
int ledState1 = LOW;
static int ledState = LOW;
const long interval = 500;
int przycisk = 2;
int stanPrzycisku;
int poprzedniStanPrzycisku = LOW;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;



void setup() {

 pinMode(ledPin, OUTPUT);
 pinMode(ledPin1, OUTPUT);
 pinMode(przycisk, INPUT_PULLUP);
}
void migacz() {
static  unsigned long previousMillis = 0;

 unsigned long currentMillis = millis();


 if (ledState1 == HIGH) {
   if ( currentMillis - previousMillis >= interval ) {
     ledState1 = LOW;
     previousMillis = currentMillis;
     
   }
 }
 else {
   if ( currentMillis - previousMillis >= interval * 5 ) {
     ledState1 = HIGH;
     previousMillis = currentMillis;
   }
     digitalWrite(ledPin1, ledState1);
 }
}

void loop() {

 int odczyt = digitalRead(przycisk);

 if (odczyt != poprzedniStanPrzycisku) {
   lastDebounceTime = millis();
 }

 if ((millis() - lastDebounceTime) > debounceDelay) {
   if (odczyt != stanPrzycisku) {
     stanPrzycisku = odczyt;

     if (stanPrzycisku == LOW) {
       ledState = !ledState;

     }
     digitalWrite(ledPin, ledState);
   }
 }
 poprzedniStanPrzycisku = odczyt;

 if (ledState == HIGH) {
   migacz();
 }
}
Ten kod jest z dwoma opóźnieniami. Zasada ta sama.
 
Odpowiedź
  


Wiadomości w tym wątku
Podajnik sterowany przez UNO + LCD - przez Fuks81 - 06-03-2017, 18:12
RE: Podajnik sterowany przez UNO + LCD - przez namok - 06-03-2017, 21:58
RE: Podajnik sterowany przez UNO + LCD - przez namok - 07-03-2017, 13:12
RE: Podajnik sterowany przez UNO + LCD - przez namok - 07-03-2017, 20:18
RE: Podajnik sterowany przez UNO + LCD - przez namok - 07-03-2017, 23:48
RE: Podajnik sterowany przez UNO + LCD - przez bob35 - 07-03-2017, 22:45
RE: Podajnik sterowany przez UNO + LCD - przez namok - 08-03-2017, 23:26
RE: Podajnik sterowany przez UNO + LCD - przez namok - 09-03-2017, 20:27
RE: Podajnik sterowany przez UNO + LCD - przez namok - 10-03-2017, 17:43
RE: Podajnik sterowany przez UNO + LCD - przez namok - 10-03-2017, 23:11
RE: Podajnik sterowany przez UNO + LCD - przez namok - 18-03-2017, 19:42
RE: Podajnik sterowany przez UNO + LCD - przez namok - 18-03-2017, 21:35
RE: Podajnik sterowany przez UNO + LCD - przez namok - 20-03-2017, 23:06
RE: Podajnik sterowany przez UNO + LCD - przez namok - 04-04-2017, 17:55
RE: Podajnik sterowany przez UNO + LCD - przez namok - 08-04-2017, 09:49
RE: Podajnik sterowany przez UNO + LCD - przez Fuks81 - 12-04-2017, 22:23
RE: Podajnik sterowany przez UNO + LCD - przez namok - 13-04-2017, 07:50

Skocz do:


Przeglądający: 1 gości