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, ...)
-
QRocky
- Příspěvky: 36
- Registrován: 28 zář 2017, 16:30
- Reputation: 0
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: 1034
- Registrován: 06 zář 2017, 20:04
- Reputation: 0
- Bydliště: Brno
-
Kontaktovat uživatele:
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
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: 1034
- Registrován: 06 zář 2017, 20:04
- Reputation: 0
- Bydliště: Brno
-
Kontaktovat uživatele:
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);
}
}
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti