Skocz do zawartości

Kurs Arduino - #9 - Czujnik odległości HC-SR04, funkcje


Pomocna odpowiedź

@StefanekP najlepiej w ogóle nie używać warunków 😉 tylko potrzeba wiedzy o działaniu tablic. Spróbuj użyć do tego funkcji map. Następnie możesz pokombinować z zamianą zmierzonej odległości przy pomocy funkcji - np wyciągnąć z tego logarytm. Na koniec możesz dodać warunek, który będzie przełączał diody tylko jak zajdzie potrzeba - zauważalna zmiana odległości, wymagająca odświeżenia wskaźnika. 

  • 3 tygodnie później...

A dlaczego w kursie ta funkcja mierząca odleglosc jest typu int, skoro wartość, którą zwraca(zmienna dystans) jest typu long?

  • 2 miesiące później...

Cześć, 
niestety nie działa mi mój kod, choć idea była bardzo prosta: czerwona dioda miała migać w momencie, kiedy zostanie przyłożone napięcie większe (lub równe) od 4V. 
 


int valueRead = 0;
float volt = 0;

void setup() {
  Serial.begin(9600);
  pinMode(8, OUTPUT);
}

void loop() {
  valueRead = analogRead(A5);
  volt = valueRead*(5.0/1024.0);
  Serial.println(volt); 
  
  if(volt >= 4.0) {
  led();
  }

  delay(1000);

}

void led(){

digitalWrite(8, HIGH);
delay(1000);
digitalWrite(8, LOW);
delay(1000);
}

Tymczasem efekt jest taki, że dla jednostek większych lub równych 4V - rzeczywiście, czerwona dioda miga. Ale dla wszystkich innych (poniżej 4V) świeci cały czas (a nie powinna być w ogóle włączona). 
Czy ktoś wie, gdzie może tkwić problem?
Dzięki!

7 minut temu, Krawi92 napisał:

Jakiś warunek po else by się przydał. Spróbuj zrobić 2 funkcje, jedna która miga, druga która wyłącza Led. 

Niestety próbowałam (teraz też - znowu, i to na dwa/trzy sposoby), i nie udało się. Pomijając fakt, że else nie jest chyba podstawą składową funkcji if (przynajmniej nie była w innych językach), więc też nie powinna być wymagana (chyba, że Arduino działa inaczej ;)). 
Dzięki jednak za sugestię.

Po prostu nie wyłączasz led-a gdy napięcie jest mniejsze niż 4V 

5 minut temu, Sekret napisał:

Pomijając fakt, że else nie jest chyba podstawą składową funkcji if (przynajmniej nie była w innych językach), więc też nie powinna być wymagana (chyba, że Arduino działa inaczej ;)). 

CO? https://pl.wikibooks.org/wiki/C/Instrukcje_sterujące "Arduino" nie działa inaczej 😉

8 minut temu, Sekret napisał:

else nie jest chyba podstawą składową funkcji if

 

9 minut temu, Sekret napisał:

przynajmniej nie była w innych językach

Przykład poproszę.

 

  • Lubię! 1
(edytowany)
6 minut temu, farmaceuta napisał:

Choc dziwne...bo tamten kod powinien dzialac poprawnie...wkoncu w funkcji led() pin zawsze jest na LOW przed wyjsciem...

Nie wiesz, jak ten led jest podłączony 😉 bo jeśli anodą do plusa... 

Edytowano przez _LM_
  • Lubię! 1
1 minutę temu, _LM_ napisał:

Nie wiesz, jak ten led jest podłączony 😉

Aaaaa!.....😉 no tak masz racje...no ja zawsze podpinam tak ze HIGH swieci...wiec teraz zasadnicze pytanie do kolezanki...jak podpiety jest led??

(edytowany)

dlatego czasem przydatne są makra: 

 

#define LEDON  digitalWrite(8, LOW)
#define LEDOFF  digitalWrite(8, HIGH)

 

Edytowano przez _LM_

Cześć, wracam po weekendzie, usiadłam na nowo wieczorkiem, z czystym umysłem. 
@ethanak @_LM_ Kolega przed wami zasugerował, że jakiś else przydałby się po ifie, tymczasem ja swoją wypowiedzią chciałam nakierować, że nie powinno być to konieczne (w sensie if może działać bez else i brak elsa nie jest powodem nieodpowiedniego działania -> o to mi chodziło, wybaczcie nieścisłość). 

Rozwiązanie zagadki jest takie, że miałam źle podpięte ledy 😅  A na pewno inaczej niż chciałam. 
Może zacznę stosować te makra... 

Dziękuję wszystkim za pomoc! 😍

Pzdr. 
 

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...