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

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
QRocky
Příspěvky: 36
Registrován: 28 zář 2017, 16:30
Reputation: 0

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

Příspěvek od QRocky » 17 kvě 2019, 09:51

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);
    }
    

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

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

Příspěvek od jankop » 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?

QRocky
Příspěvky: 36
Registrován: 28 zář 2017, 16:30
Reputation: 0

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

Příspěvek od QRocky » 17 kvě 2019, 10:41

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í.

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

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

Příspěvek od jankop » 17 kvě 2019, 12:11

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);
  }
}

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 15 hostů