Wpis z mikrobloga

Mam pytanie dot #programowanie w #arduino

Jest najprostszy programik, którego zadaniem jest odczytanie wartości analogowej z A0 i wysłanie go na serial

int wartosc

void setup() {
Serial.begin(9600);
}
void loop() {
wartosc = analogRead(A0);
Serial.print(wartosc);
}

Teraz chodzi mi o to, aby wartość była wysyłana tylko i wyłącznie w przypadku, gdy ulegnie zmianie i tak myślę że
trzeba coś takiego zrobić:

int wartosc
int zmiana

void setup() {
Serial.begin(9600);
}
void loop() {
wartosc = analogRead(A0);

if (wartosc!=zmiana)
{
Serial.print(wartosc);
zmiana=wartosc
}
}

Ale czy jest jeszcze inny, może prostszy sposób, może jakaś funkcja?
Może pytanie z tych banalnych, nie zabijcie mnie, ale ja się cały czas uczę (jak to mówił pewien narciarz z Pałacu Prezydenckiego)
  • 4
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@kecajek: No twoje rozwiązanie jest najprostsze, tylko jedna rzecz. Odczytaj wartość w setup na dzień dobry (o ile się da, nie jestem za bardzo w #arduino), bo inaczej może być bug jeśli pierwsza wartość będzie wynosić 0, bo wtedy nie wyślę się ona (zmienne globalne są domyślnie zerowane).
  • Odpowiedz
@kecajek: W teorii ok, w praktyce pewnie analogRead pewnie będzie wariował czyli delikatnie zmieniał wartość zwracaną kiedy na wejściu nic się nie zmieni. Więc zamiast porównywać wartości znakiem = sprawdzaj sobie zakres czy wartość nie zmieniła się o zadany margines.
  • Odpowiedz
@zwei: dzięki
@Hauleth: racja, może tak być - sprawdzę to jeszcze dokładnie

@echelon_: Tak, wiem, że analogRead może lekko się wahać. Generalnie chodziło mi o przykład. Problem w tym że u mnie na serial (dokładnie na wyświetlacz Nextion) będzie wysyłanych bardzo wiele różnych wartości. Niektóre są praktycznie stałe - odczytane raz przy załączeniu układu, natomiast inne będą się zmieniać i to dosyć dynamicznie. I chodzi mi
  • Odpowiedz