• 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"
#11
50 do 255 oznacza to samo co 50 do 100%
PWM na 255 = 100%
50 nie oznacza 50% a poziom mocy napięcia diody.
Mój błąd, że zastosowałem oba zapisy naprzemiennie.

Niestety program zmuszał mnie do stosowani 4 timerów, gdy opieram się na jednym włączał się tylko jeden kierunkowskaz. reszta nawet się nie odpalała
.
Po próbie uproszczenia kodu, udało mi się zejść do 2 timerów, każdy  odpowiada za jedną ze stron migaczy czyli odpowiednio:
1. Para migaczy z prawej strony (przód/tył).
2. Para migaczy z lewej strony (przód/tył).
Przy próbie zastosowania jednego timera światła awaryjne (funkcja odpalająca wszystkie kierunkowskazy jednocześnie) powoduje, że tylko jedna strona się włącza.
Ale to nie wszystko... Pomimo zastosowania osobnego timera dla pary migaczy (przednich i tylnych) także one potrafią przy 2 - 3 włączeniu nie działać synchronicznie, np. jeżeli wyłączę kierunkowskaz gdy jest zapalony i włączę go ponownie.

Poniżej przesyłam okrojony kod zawierający tylko niezbędne informacje do jego działania:
Kod:
#include <SoftwareSerial.h>
int turnSignalRearL = 5; //PWM 2x diode turn signal rear-left
int turnSignalRearR = 6; //PWM 2x diode turn signal rear-right
int turnSignalFrontL = 7; //2x diode turn signal front-left
int turnSignalFrontR = 8; //2x diode turn signal front-right

const int constStateLed = 50;
int stateLed1 = 50;
int stateLed2 = 50;

//BLINK / FADE
unsigned long currentTime1 = 0;
unsigned long savedTime1 = 0;
unsigned long savedTime2 = 0;
boolean kierunkiLewe = false;
boolean kierunkiPrawe = false;

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

void setup(){
  Bluetooth.begin(9600);   
  pinMode(turnSignalRearL,OUTPUT);
  pinMode(turnSignalRearR,OUTPUT);   
  pinMode(turnSignalFrontL,OUTPUT);
  pinMode(turnSignalFrontR,OUTPUT);
}

void loop(){
  currentTime1 = millis();
 
  //=== LEFT turn signal ===
  if (kierunkiLewe && currentTime1 - savedTime1 >= 300UL) {
    savedTime1 = currentTime1;
    digitalWrite(turnSignalFrontL, !digitalRead(turnSignalFrontL));
    if (stateLed1 == 50)
      stateLed1 = 255;
    else
      stateLed1 = 50;
    analogWrite(turnSignalRearL, stateLed1);
  }

  //=== RIGHT turn signal ===
  if (kierunkiPrawe && currentTime1 - savedTime2 >= 300UL) {
    savedTime2 = currentTime1;
    digitalWrite(turnSignalFrontR, !digitalRead(turnSignalFrontR));
    if (stateLed2 == 50)
      stateLed2 = 255;
    else
      stateLed2 = 50;
    analogWrite(turnSignalRearR, stateLed2);
  }
 

  if(Bluetooth.available()){
    Data=Bluetooth.read();

    //Left ON
    if(Data==('g')){
      kierunkiPrawe = false;
      analogWrite(turnSignalRearR,constStateLed);
      kierunkiLewe = true;
      sendData("turn signal left ON");
    }
    //Left OFF
    if(Data==('h')){
      kierunkiLewe = false;
      analogWrite(turnSignalRearL,constStateLed);
      digitalWrite(turnSignalFrontL,0);;
      sendData("turn signal left OFF");
    }

    //Right ON
    if(Data==('i')){
      kierunkiLewe = false;
      analogWrite(turnSignalRearL,constStateLed);
      kierunkiPrawe = true;
      sendData("turn signal right ON");
    }
    //Right OFF
    if(Data==('j')){
      kierunkiPrawe = false;
      analogWrite(turnSignalRearR,constStateLed);
      digitalWrite(turnSignalFrontR,0);
      sendData("turn signal right OFF");
    }
   
    //Hazzard lights OM
    if(Data==('9')){     
      kierunkiLewe = true;
      kierunkiPrawe = true;
      sendData("HAZARD lights ON");
    }
    //Hazzard lights OFF
    if(Data==('0')){
      kierunkiLewe = false;
      kierunkiPrawe = false;
      digitalWrite(turnSignalFrontL,0);
      digitalWrite(turnSignalFrontR,0);
      analogWrite(turnSignalRearL,constStateLed);
      analogWrite(turnSignalRearR,constStateLed);
      sendData("HAZARD lights OFF");
    }
  }
}
W obecnej formie kodu muszę posługiwać się dwiema zmiennymi przechowującymi stan diod (stateLed1 i stateLed2) oraz dwiema zmiennymi savedTime1 i savedTime2
 
Odpowiedź
  


Wiadomości w tym wątku
RE: Arduino Nano + HC05 - problem z funkcją "millis" - przez raziel - 18-12-2022, 23:49

Skocz do:


Przeglądający: 1 gości