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

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Odpovědět
QRocky
Příspěvky: 15
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


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: 527
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: 15
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: 527
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 1 host