Chce odczytać wartość z wejscia analogowego np. A0 wskazania od 0-1000 nastęnie chce za pomocą" if " zrobić tak aby np gdy wartosc przekorczy 100 dioda(np. ledPin 13) sie zapala i gaśnie potem gdy przekroczy 200 zapala sie i gasnie, potem gdy przekroczy 300 itd. Ktoś wie jak to napisać?
Kod:
void setup() {
pinMode(13, OUTPUT);
pinMode(A0, INPUT);}
void loop() {
int x = analogRead(A0);
if ( x == 100 or x == 200 or x == 300 ){digitalWrite( 13 ,1 );}
else{digitalWrite( 13 ,1 );}
}
a tutaj od -> do
Kod:
void setup() {
pinMode(13, OUTPUT);
pinMode(A0, INPUT);
}
void loop() {
int x = analogRead(A0);
if ( ( x > 100 and x < 105 ) or ( x > 200 and x < 205) ){digitalWrite( 13 ,1 );}
else{digitalWrite( 13 ,1 );}
}
Dziekuje za pomoc opcja nr 2 bardziej mi pasuje
bo analogowy odczyt u mnie ma wahania +-10.
Jeszcze mam pytanko. Czy mógłbyś mi podpowiedzieć jak napisać kod to tego kodu nr 2 tak aby po wciśnięciu przycisku buttonaPin(8) zapalała się dioda co
if ( ( x == 100 and x < 110 ) or ( x == 200 and x < 210) or (x==300 and x<310){digitalWrite( 13 ,1 );}
a po wciśnieciu buttonPin(9)
if ( ( x == 50 and x < 60 ) or ( x == 100 and x < 110) or (x==150 and x<160){digitalWrite( 13 ,1 );}
Dobra powiem tak "trochę się zakopałem"....chciałem zrobić coś takiego - mam odczyt z wagi na wejściu analogowym z modułu HX711 i tensometru. Stawiam na tym np zbiornik z wodą za każdym razem to może być inna waga od 0 do 5000gram. Chciałem zrobić tak aby ArduinoUNO po ubyciu 100gram zapalał diodę na powiedzmy 1sek. Przykłady wyżej są ok pod warunkiem jak wody za każdym razem biedzie full tzn 5000gram(znamy wartość początkową) a jak ktoś zaleje np 2759g ?
czyli jeśli wartość analogowa(wagi) spadnie o 100 to dioda ma się zapalić na 1 sek. i o kolejne 100 dioda 1 sek....
HELP
Będzie to troszkę karkołomne i niedokładne ponieważ odczyt masz 0-1023 a mierzysz 5000 więc na każdy 1 punkt pomiaru przypada prawie 5 gram .
tu masz na poprzednie pytanie
Kod:
char state1 = HIGH;
char state2 = HIGH;
void setup() {
pinMode(13, OUTPUT);
pinMode(A0, INPUT);
pinMode(8 , INPUT_PULLUP);
pinMode(9 , INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
int x = analogRead(A0);
if ( digitalRead(8) == LOW ){
if ( state1 == LOW){state1 = HIGH;}
else if ( state1 == HIGH ){state1 = LOW;}
delay(200);}
if ( digitalRead(9) == LOW ){
if ( state2 == LOW){state2 = HIGH;}
else if ( state2 == HIGH ){state2 = LOW;}
delay(200);}
if (state1 == LOW ){
if ( ( x >= 100 and x <= 110 ) or ( x >= 200 and x <= 210 ) or ( x >= 300 and x <= 310 ) ){digitalWrite( 13 ,1 );}
else{digitalWrite( 13 ,0);}}
if (state2 == LOW ){
if ( ( x >= 50 and x <= 60 ) or ( x >= 150 and x <= 160) or (x >= 250 and x <= 260 ) ){digitalWrite( 13 ,1 );}
else{digitalWrite( 13 ,0 );}}
Serial.println(x);
}
wiem, że to może głupie ale czy takie rozwiązanie jest dobre?
do każdego warunku dopisałem if ( ( x >= 100 and x <= 110 ) or ( x >= 200 and x <= 210 ) or ( x >= 300 and x <= 310) or ( x >= 300 and x <= 310) or ( x >= 400 and x <= 410) or ( x >= 500 and x <= 510) itd ..... aż do 5000
?
Dziękuje Ci JasQ za dotychczasową jesteś KOZAKIEM !!!
To tu masz w automacie zanim zetrzesz znaczki na klawiaturze . Tak na szybko .....
Po odpaleniu programu w setup wartość "Z" jest mapowana na podstawie odczytu A0 dla pełnego zbiornika 5000ml i zapamiętana , w loop x jest mapowana jako odczyt aktualny i czeka aż spadnie od 95-110 zaświeci dioda . Powyżej 110 z zmienia wartość na aktualną , dioda gaśnie i znowu czeka aż spadnie od 95 - 110 i tak aż braknie wody . Jak nie zależy ci na super dokładności to dodałem linijkę kodu która po wlaniu wody przywróci wartość z ale jet błąd pomiarowy 10 jednostek w tej linijce if ( o < - 10 ){z = x;} jeżeli masz układ stabilny to możesz dać mniej jak masz wachania większe daj więcej .
Kod:
int y ;
int x ;
int z ;
int o ;
void setup() {
pinMode(13, OUTPUT);
pinMode(A0, INPUT);
pinMode(8 , INPUT_PULLUP);
pinMode(9 , INPUT_PULLUP);
Serial.begin(9600);
delay(500);
z = map(analogRead(A0),0,1023,0,5000);
}
void loop() {
y = analogRead(A0);
x = map(y,0,1023,0,5000);
o = ( z - x );
if ( o >= 95 and o <= 110 ){digitalWrite( 13 ,1 );}
if ( o > 110 ){z = x;digitalWrite( 13 ,0 );}
if ( o < - 10 ){z = x;}
Serial.print(z);
Serial.print(" / ");
Serial.print(o);
Serial.print(" / ");
Serial.println(x);
}
kod stopera też poprawiłem zerknij czy o coś takiego ci chodziło
oki sprawdzę
zabieram sie do roboty