Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 mar 2024, o 20:16


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 2 ] 
Autor Wiadomość
PostNapisane: 1 paź 2016, o 12:08 
Offline
Nowy

Dołączył(a): 16 wrz 2016
Posty: 1
Pomógł: 0

Witam wszystkich.
Proszę o sprawdzenie poniższego kodu i poprawkę.
Posiadam płytkę STM32F411E-Disco
Czujnik HC-SR04 podpiąłem wg schematu:
DP6(GPIO_Output) - Trig
DP4(GPIO_Input) - Echo
5V-Vcc
GND-GND

Zainicjowałem jako float zmienną odleglosc.

Kod:
HAL_GPIO_WritePin(we_cz_o_GPIO_Port, we_cz_o_Pin, GPIO_PIN_SET);
                 HAL_Delay(10);
                 HAL_GPIO_WritePin(we_cz_o_GPIO_Port, we_cz_o_Pin, GPIO_PIN_RESET);

     odleglosc=HAL_GPIO_ReadPin(wy_cz_o_GPIO_Port,wy_cz_o_Pin)/58.00; //odleglosc w cm
     if(odleglosc<1){
        HAL_GPIO_WritePin(GPIOD,GPIO_PIN_15,GPIO_PIN_SET);
     }
     if(odleglosc<10){
        HAL_GPIO_WritePin(GPIOD,GPIO_PIN_14,GPIO_PIN_SET);
     }
     if(odleglosc<100){
             HAL_GPIO_WritePin(GPIOD,GPIO_PIN_13,GPIO_PIN_SET);
          }
     if(odleglosc<150){
             HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,GPIO_PIN_SET);
          }
     HAL_Delay(500);
     HAL_GPIO_WritePin(GPIOD,GPIO_PIN_15,GPIO_PIN_RESET);
     HAL_GPIO_WritePin(GPIOD,GPIO_PIN_14,GPIO_PIN_RESET);
     HAL_GPIO_WritePin(GPIOD,GPIO_PIN_13,GPIO_PIN_RESET);
     HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,GPIO_PIN_RESET);


Z dokumentacji wyczytałem, że na pin trig (u mnie we_cz_o_Pin podpięte pod PD6) należy wysłać stan wysoki przez 10us, dlatego też pierwsze 3 linijki kodu wyglądają w ten sposób.
Następnie powinienem odczytać długość trwania impulsu na pinie echo (u mnie wy_cz_o_Pin podpięty pod PD4)
Zastanawiam się nad tym jak to zrobić. Potrafię odczytać stan pinu lecz nie potrafię odczytać czas trwania takiego impulsu.
Czy były ktoś na tyle dobry aby pomóc mi z tym problemem? Dopiero zaczynam swoją przygodę z stm32 :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2016, o 12:39 
Offline
Nowy

Dołączył(a): 20 sie 2015
Posty: 11
Pomógł: 0

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Do zmierzenia długości impulsu musisz zaprząc jakiś timer i z przerwania exti zczytać wartość timera przełożyć na czas i przeliczyć dopiero na odległość



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 2 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO