• 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
Arduino Nano + HC05 - problem z funkcją "millis"
#1
Cześć,

Od kilku dni pracuje nad swoim pierwszym projektem.
W projekcie mamy do czynienia z trzema diodami led z funkcją on / off. Dwie z nich działają w trybie ciągłym, trzeci ma działać w trybie przerywanym (migotanie). Sterowanie odbywa się za pośrednictwem modułu BT (HC05).

Problem dotyczy działania funkcji millis (migotanie LED - 0,5s) w przypadku gdy jej wykonanie znajduje się w funkcji sprawdzającej dostępność modułu BT - dioda włącza się i działa w trybie ciągłym lub nie włącza się zupełnie (najprawdopodobniej zależy to od tego czy "wstrzelę się" w ustawione 0,5s).
Gdy wyciągam "migotanie LED" poza "Bluetooth.available" dioda się włącza i migoce zgodnie z założeniem. 
Komunikacja BT i reszta kodu działa poprawnie.
Proszę o pomoc.
Kod poniżej (linijki mające wpływ na działanie migotania LED zakomentowane są "migająca led"):

#include <SoftwareSerial.h>
#define SWGlowne 5
#define SWDodatkowe 6
#define SWAwaryjne 7 // migająca led

int stanLED1 = LOW; // migająca led
unsigned long aktualnyCzas = 0; // migająca led
unsigned long zapamietanyCzasLED1 = 0; // migająca led

SoftwareSerial Bluetooth(0, 1);
char Data;
void sendData(String transmitData){
Bluetooth.println(transmitData);}

void setup(){
    Bluetooth.begin(9600);
    pinMode(SWGlowne,OUTPUT);
    pinMode(SWDodatkowe,OUTPUT);
    pinMode(SWAwaryjne,OUTPUT);
}

void loop(){
    aktualnyCzas = millis(); // migająca led / Pobierz liczbe milisekund od startu
   
    if(Bluetooth.available()){
        Data=Bluetooth.read();
        if(Data==('4')){
            digitalWrite(SWGlowne,1);
            sendData("SwiataGlowne ON");
        }
        if(Data==('1')){
            digitalWrite(SWGlowne,0);
            sendData("SwiataGlowne OFF");
        }
        if(Data==('5')){
            digitalWrite(SWDodatkowe,1);
            sendData("SWDodatkowe ON");
        }
        if(Data==('2')){
            digitalWrite(SWDodatkowe,0);
            sendData("SWDodatkowe OFF");
        }
        if(Data==('6')){
          if (aktualnyCzas - zapamietanyCzasLED1 >= 500UL) {
            zapamietanyCzasLED1 = aktualnyCzas; // migająca led / Zapamietaj aktualny czas
            if (stanLED1 == LOW) { // migająca led / Zmieniamy stan diody na przeciwny
            stanLED1 = HIGH;
            } else {
            stanLED1 = LOW;
            }
            digitalWrite(SWAwaryjne, stanLED1); // migająca led / ustawiamy nowy stan na diodzie
          }
        }
        if(Data==('3')){
            digitalWrite(SWAwaryjne,0);
            sendData("SWAwaryjne OFF");
        }
        if(Data==('9')){
            digitalWrite(SWGlowne,1);
            digitalWrite(SWDodatkowe,1);
            digitalWrite(SWAwaryjne,1);
            sendData("ALL LIGHTS ON");
        }
        if(Data==('0')){
            digitalWrite(SWGlowne,0);
            digitalWrite(SWDodatkowe,0);
            digitalWrite(SWAwaryjne,0);
            sendData("ALL LIGHTS OFF");
        }
    }
}
 
Odpowiedź
  


Wiadomości w tym wątku
Arduino Nano + HC05 - problem z funkcją "millis" - przez raziel - 20-11-2022, 14:29

Skocz do:


Przeglądający: 1 gości