Skocz do zawartości
Komentator

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

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ł? 🙂

Udostępnij ten post


Link to post
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 😉

Udostępnij ten post


Link to post
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ć?

Udostępnij ten post


Link to post
Share on other sites

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?

Udostępnij ten post


Link to post
Share on other sites

Racja, nie samą marmoladą pączek istnieje, zabrakło znacznej części składników, teraz już wiem co robić.

Udostępnij ten post


Link to post
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?

 

Udostępnij ten post


Link to post
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 😉 

Udostępnij ten post


Link to post
Share on other sites

Wysyłam dwa zdjęcia. Na pierwszym 5V jest podłączone i Arduino nie działa, na drugim 5V jest odłączone i Arduino działa.

IMG_20180905_153357333.thumb.jpg.793c53b655ced4bd9a39eb2ffb033df2.jpgIMG_20180905_153414597.thumb.jpg.37b74be84ab027b2507659c9ddcb7776.jpg

Udostępnij ten post


Link to post
Share on other sites

Czy podpiecie buzzera w odwrotnej polaryzacji usmazy go?

Mozna skasowac to pytanie, (+) mialem podpietego do pinu 2 zamiast 3 - glupi blad.

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
Share on other sites

Pod pierwszą animacją jest literówka, jest "Wróżmy" - powinno być "Wróćmy".

  • Lubię! 1

Udostępnij ten post


Link to post
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!

Gość
Napisz odpowiedź...

×   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...