Skocz do zawartości

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

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 😉

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

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ć?

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?

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

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?

 

@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 😉 

  • 1 miesiąc później...

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.

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

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