Stránka 1 z 1

Vynulování hodnoty, pokud se nemění

Napsal: 17 kvě 2019, 09:51
od QRocky
Ahojte, potřeboval bych poradit, jak můžu do tohoto kódu vepsat vynulování proměnné "state" pokud zůstává například tři vteřiny na stejné hodnotě. Uvažoval jsem o funkci milis, ale popravdě nevím, jak na to...

Prosím o radu. Děkuji

Kód: Vybrat vše

    int Aura = 3;
    int state; // Vyctena hodnota z bluetooth
    int AuraPWM;



    void setup() {
       
      
      pinMode(Aura, OUTPUT);

      Serial.begin(38400);
      Serial.begin(9600);
    }
    void loop() {

      
     if(Serial.available() > 0)
     { 
        state = Serial.read();
        AuraPWM = state * 10;
     }

Serial.println(state);
delay(1000);
analogWrite(Aura, state);
    }
    

Re: Vynulování hodnoty, pokud se nemění

Napsal: 17 kvě 2019, 10:35
od jankop
Potřebuješ vynulovat, pokud se hodnota tři vteřiny nemění nebo pokud nebyla žádná hodnota tři vteřiny přijata?

Re: Vynulování hodnoty, pokud se nemění

Napsal: 17 kvě 2019, 10:41
od QRocky
jankop píše:
17 kvě 2019, 10:35
Potřebuješ vynulovat, pokud se hodnota tři vteřiny nemění nebo pokud nebyla žádná hodnota tři vteřiny přijata?
Ahoj, potřebuju vynulovat, pokud se hodnota nemění.

Re: Vynulování hodnoty, pokud se nemění

Napsal: 17 kvě 2019, 12:11
od jankop
Tohle by mohlo fungovat

Kód: Vybrat vše

#define Aura 3
int state = 0; // Vyctena hodnota z bluetooth
int OldState = 0;
int8_t AuraPWM = 0;
long unsigned OldMillis = 0;

void setup() {
  pinMode(Aura, OUTPUT);
  Serial.begin(38400);
  Serial.begin(9600);
}
void loop() {
  if (millis() - OldMillis > 3000) {
    OldMillis = millis();
    if (state - OldState == 0) {
      state = 0;
    }
    OldState = state;
  }
  if (Serial.available() > 0)
  {
    state = Serial.read();
    AuraPWM = state * 10;
    if (state != OldState) {
      OldMillis = millis();
      OldState = state;
    }
  }
  Serial.println(state);
  delay(1000);
  analogWrite(Aura, state);
}
Ještě aby to bylo úplně košér, tak je vhodné vypustit delay()

Kód: Vybrat vše

#define Aura 3
int state = 0; // Vyctena hodnota z bluetooth
int OldState = 0;
int8_t AuraPWM = 0;
long unsigned OldMillis = 0;
long unsigned OldMillis2 = 0;
void setup() {
  pinMode(Aura, OUTPUT);
  Serial.begin(38400);
  Serial.begin(9600);
}
void loop() {
  if (millis() - OldMillis > 3000) {
    OldMillis = millis();
    if (state - OldState == 0) {
      state = 0;
    }
    OldState = state;
  }
  if (Serial.available() > 0)
  {
    state = Serial.read();
    AuraPWM = state * 10;
    if (state != OldState) {
      OldMillis = millis();
      OldState = state;
    }
  }
  if (millis() - OldMillis2 > 1000) {
    OldMillis2 = millis();
    Serial.println(state);
    analogWrite(Aura, state);
  }
}