• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Pomoc z funkcja if jak to napisac?
#1
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ć?
 
Odpowiedź
#2
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 );}

}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#3
Dziekuje za pomoc opcja nr 2 bardziej mi pasuje Smile 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 );}
 
Odpowiedź
#4
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
 
Odpowiedź
#5
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);

}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#6
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 !!!
 
Odpowiedź
#7
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);

}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#8
kod stopera też poprawiłem zerknij czy o coś takiego ci chodziło
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#9
oki sprawdzę Smile zabieram sie do roboty Smile
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości