Skocz do zawartości

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


Komentator

Pomocna odpowiedź

Dobry trop 😉 Tak, jest to wykonalne. W tym celu należy skorzystać z tablic: https://www.arduino.cc/reference/en/language/variables/data-types/array/

Dzięki za szybką odpowiedź 🙂

Hmmm. Coś wymyśliłem. Wpiąłem diody w inne miejsca, zastosowałem tablice.

I mam problem, który nie wiem jak wyeliminować.

#define trig 11
#define echo 12


#define dioda1 8
#define dioda2 3
#define dioda3 9
#define dioda4 4
#define dioda5 5
#define dioda6 6



void setup() {
 Serial.begin(9600);
 pinMode(echo, INPUT);
 pinMode(trig, OUTPUT);
 pinMode(dioda1, OUTPUT);
 pinMode(dioda2, OUTPUT);
 pinMode(dioda3, OUTPUT);
 pinMode(dioda4, OUTPUT);
 pinMode(dioda5, OUTPUT);
 pinMode(dioda6, OUTPUT);
}

void loop() {
   int zakres= map(jakdaleko(),3,80,5,0);        // zmapowane tak zeby pokazywalo dystans od 3 do 80 cm na 6 diodach. 5 najblizej, 0 najdalej.
  // Serial.println(zakres); 
         zgaswszystkie();                        //w przypadku gdy diod zapalonych bylo 5 a wskaznik ma wskazac np.3, efekt nie bylby widoczny
         zaswiec(zakres);                        //zaswiecenie odpowiedniej liczby diod (zalezna od zmiennej zakres)


}




int jakdaleko () {                              //funkcja oddajaca odleglosc
     long czas, odleglosc;
     digitalWrite(trig, LOW);
     delayMicroseconds(2);
     digitalWrite(trig, HIGH);
     delayMicroseconds(10);
     digitalWrite(trig, LOW);

     czas= pulseIn(echo, HIGH);
     odleglosc= czas/58;
     //    Serial.println(odleglosc);           //do sprawdzenia zakresu
     return(odleglosc);                        //oddanie wartosci
}





void zgaswszystkie() {                            //funkcja gaszaca wszystkie diody
 digitalWrite(dioda1, LOW);
 digitalWrite(dioda2, LOW);
 digitalWrite(dioda3, LOW);
 digitalWrite(dioda4, LOW);
 digitalWrite(dioda5, LOW);
 digitalWrite(dioda6, LOW);
}




void zaswiec(int zaswiecile) {                                                //funkcja zapalajaca odpowiednia liczbe diod, jako argument liczba diod
 for (int i=0; i<=zaswiecile; i++) {
   int diody[6]= {dioda1,dioda2,dioda3,dioda4,dioda5,dioda6};             //tworze tablice z 6 elementami, wypisane piny podpietych diod po kolei(tak jak maja sie zapalac)
   Serial.print("zapalam"); Serial.println(diody[i]);                        //wyswietlenie ktore diody sa w danym momencie zapalane
   digitalWrite(diody[i],HIGH);                                              //wpisywanie wartosci przypisanych konkretnych diod np. dla i=2 zapala sie dioda 3
 }
}

Chciałem wytłuścić co zmieniłem ale niestety się nie da. Co się zmieniło:

1. Diody podpięte gdzie indziej

2. Zmapowane tak aby dawało od 5 do 0 (wcześniej 6 do 1). Tablica liczy pierwszy element jako element zerowy

3. Dodana tablica w "funkcji zapalającej"

I tutaj pojawia się problem. Wszystko prawie działa. Niestety diody wyraźnie migają 😤

Obstawiam że wynika z użycia "funkcji gaszącej". Nigdzie nie jest użyty delay. Powinny zgasnąć i zapalić się na tyle szybko że miganie nie powinno być widoczne.

Jakiś pomysł? 🙂

Link do komentarza
Share on other sites

Nigdzie nie jest użyty delay. Powinny zgasnąć i zapalić się na tyle szybko że miganie nie powinno być widoczne. Jakiś pomysł?

Wydaje mi się, że problem właśnie wynika z tego, że ciągle je włączasz i wyłączasz. Pomijając mikrosekundowy czas pomiaru w programie nie ma żadnego opóźnienia i diody są praktycznie ciągle gaszone i włączane. Najprościej uniknąć tego efektu pisząc program, który gasi tylko te diody, które powinny zgasnąć, a nie wszystkie 😉

Link do komentarza
Share on other sites

Kiedy próbuję wgrać program

int kwadratPole(int a) {
 int wynik = 0;
 wynik = a * a;

 return wynik;
}

pojawia się komunikat: Błąd kompilacji dla płytki Arduino/Genuino Uno. Jaką bibliotekę powinnam wgrać?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Pytanie kontrolne.

Powiedzmy, że robisz pączki. Potrzebna jest marmolada, ciasto, jakiś ceres żeby to usmażyć, jakiś lukier czy coś żeby ten pączek po polukrowaniu.(czy co) ładnie wyglądał i lepiej smakował.

I teraz na blogasku zajefajne.ponczki.tld dostajesz przepis na super marmeladę poziomkową.

Zrobisz tę marmeladę... i co? Wrzucisz do gara i będziesz czekać aż się pączki zrobią? Bez ciasta, ceresu i cukru/lukru?

Link do komentarza
Share on other sites

Hej, mam pewien problem z moim czujnikiem odległości a także z samym Arduino.

Podłączyłem wszystko tak jak jest na schemacie, program skopiowałem ze strony i wgrałem. Niestety kiedy włączyłem monitor portu szeregowego Arduino zauważyłem, że lampka zasilania nie pali się. Dopiero kiedy odłączyłem 5V od płytki  stykowej Arduino się włączyło. 3.3V działa "normalnie" ale kiedy podepnę ten Pin pod płytkę stykową to lampka zasilania świeci coraz słabiej i w końcu gaśnie.

Czy ktoś mógłby mi pomóc rozwiązać ten problem?

 

Link do komentarza
Share on other sites

@Fitzpatrick - pokaż swoje połączenie. Wygląda na to, że jednak coś podłączyłeś inaczej i widocznie powstało jakieś zwarcie. Raczej szansa jest nikła, aby przy dobrym podłączeniu stało się coś takiego. Musiałbyś trafić perfidnie uszkodzony czujnik, a przez ostatnie kilka lat nie pamiętam, aby komuś przytrafiła się tutaj taka przygoda 😉 

Link do komentarza
Share on other sites

Cieszę się, że problem rozwiązany. Dla formalności dodam, że odwrotne podłączenie samego buzzera nie powinno go uszkodzić (chyba, że używa się jakiś modułów z buzzerem - wtedy czasami może się on uszkodzić przy odwrotnej polaryzacji). Wszystko zależy od tego co konkretnie znajduje się na danym module.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.