• 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"
#12
Przebudowałem kod w oparciu o switch.
Wszystko wygląda / działa ok i jest zsynchronizowane.
Dziękuję za sugestie.

Poniżej wklejam kod na trochę nietypowe kierunkowskazy oraz światła awaryjne:
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

bool turnSignalIsOn = false;
bool turnSignalIsOn2 = false;
bool turnSignalIsOn3 = false;
bool ledIsOn = false;
unsigned long lastBlinkTime;
int currentFadeValue;

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

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

void loop() {
 
  switch (Bluetooth.read()) {
   
    //=== LEFT turn signal ===
    case 'g':
      analogWrite(turnSignalRearR, 0);    // Right off
      digitalWrite(turnSignalFrontR, 0);  // Right off
      turnSignalIsOn2 = false;            // Right off
      turnSignalIsOn3 = false;            // Hazzard off
      analogWrite(turnSignalRearL, 255);
      digitalWrite(turnSignalFrontL, 1);
      turnSignalIsOn = true;
      lastBlinkTime = millis();
      ledIsOn = true;
      currentFadeValue = 255;
      break;
    case 'h':
      analogWrite(turnSignalRearL, 0);
      digitalWrite(turnSignalFrontL, 0);
      turnSignalIsOn = false;
      ledIsOn = false;
      break;
     
    //=== RIGHT turn signal ===
    case 'i':
      analogWrite(turnSignalRearL, 0);   // Left off
      digitalWrite(turnSignalFrontL, 0); // Left off
      turnSignalIsOn = false;            // Left off
      turnSignalIsOn3 = false;           // Hazzard off
      analogWrite(turnSignalRearR, 255);
      digitalWrite(turnSignalFrontR, 1);
      turnSignalIsOn2 = true;
      lastBlinkTime = millis();
      ledIsOn = true;
      currentFadeValue = 255;
      break;
    case 'j':
      analogWrite(turnSignalRearR, 0);
      digitalWrite(turnSignalFrontR,0);
      turnSignalIsOn2 = false;
      ledIsOn = false;
      break;
     
    //=== HAZZARD signal ===
    case '9':
      analogWrite(turnSignalRearL, 0);    // Left off
      digitalWrite(turnSignalFrontL, 0);  // Left off
      turnSignalIsOn = false;             // Left off
      analogWrite(turnSignalRearR, 0);    // Right off
      digitalWrite(turnSignalFrontR, 0);  // Right off
      turnSignalIsOn2 = false;            // Right off
      analogWrite(turnSignalRearL, 255);
      digitalWrite(turnSignalFrontL, 1);
      analogWrite(turnSignalRearR, 255);
      digitalWrite(turnSignalFrontR, 1);
      turnSignalIsOn3 = true;
      lastBlinkTime = millis();
      ledIsOn = true;
      currentFadeValue = 255;
      break;
    case '0':
      analogWrite(turnSignalRearL, 0);
      digitalWrite(turnSignalFrontL, 0);
      analogWrite(turnSignalRearR, 0);
      digitalWrite(turnSignalFrontR, 0);
      turnSignalIsOn3 = false;
      ledIsOn = false;
      break;
    default: break;
  }

  //=== BLINKING / FADING code ===
 
  //LEFT
  if (turnSignalIsOn) {
    if (millis() - lastBlinkTime >= 300) {
      if (ledIsOn) {
        analogWrite(turnSignalRearL, 50);
        digitalWrite(turnSignalFrontL, 0);
        if (currentFadeValue <= 50)  turnSignalIsOn = false;
      } else {
        Serial.println(currentFadeValue);
        analogWrite(turnSignalRearL, currentFadeValue);
        digitalWrite(turnSignalFrontL, 1);
      }
      ledIsOn = ! ledIsOn;
      lastBlinkTime = millis();
    }
  }
 
  //RIGHT
  if (turnSignalIsOn2) {
    if (millis() - lastBlinkTime >= 300) {
      if (ledIsOn) {
        analogWrite(turnSignalRearR, 50);
        digitalWrite(turnSignalFrontR, 0);
        if (currentFadeValue <= 50)  turnSignalIsOn2 = false;
      } else {
        Serial.println(currentFadeValue);
        analogWrite(turnSignalRearR, currentFadeValue);
        digitalWrite(turnSignalFrontR, 1);
      }
      ledIsOn = ! ledIsOn;
      lastBlinkTime = millis();
    }
  }
 
  //HAZZARD
  if (turnSignalIsOn3) {
    if (millis() - lastBlinkTime >= 300) {
      if (ledIsOn) {
        analogWrite(turnSignalRearL, 50);
        digitalWrite(turnSignalFrontL, 0);
        analogWrite(turnSignalRearR, 50);
        digitalWrite(turnSignalFrontR, 0);
        if (currentFadeValue <= 50)  turnSignalIsOn3 = false;
      } else {
        Serial.println(currentFadeValue);
        analogWrite(turnSignalRearL, currentFadeValue);
        digitalWrite(turnSignalFrontL, 1);
        analogWrite(turnSignalRearR, currentFadeValue);
        digitalWrite(turnSignalFrontR, 1);
      }
      ledIsOn = ! ledIsOn;
      lastBlinkTime = millis();
    }
  }
}
 
Odpowiedź
  


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

Skocz do:


Przeglądający: 1 gości