Skocz do zawartości
Komentator

Kurs Arduino II - #4 - przerwania, kontaktron, czujnik PIR

Pomocna odpowiedź

@drozdziak, witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start:

  • Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników.
  • Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć?
  • Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości.

Dnia 8.11.2018 o 22:18, drozdziak napisał:

mega fajny artykuł! idealny do nauki 🙂

mam taki maly problem, bo napisalem prosty program ktory, jeśli odległość wskazania czujnika jest mniejsza niż 100 cm to włącza monitor i wyświetla tą wartość na monitorku przez 5 sek.

Cieszę się, że artykuł nadal jest pomocny. Jeśli chodzi o Twoje problemy to oczywiście warto zająć się dalszym rozwijaniem programu (filtrowanie i uśrednianie pomiarów), ale zacząłbym też od sprawdzenia elektroniki. Upewnij się, że masz dobre zasilanie, nie ma luźnych przewodów itd. Sprawdź też ustawienie czujnika, jeśli "patrzy" minimalnie w dół to możesz mieć czasami zakłócenia, bo czujnik np. zobaczy biurko, na którym leży itd.

Udostępnij ten post


Link to post
Share on other sites

Witam wszystkich serdecznie. Na wstępie chciałbym bardzo podziękować za kurs, który jest naprawdę świetnie napisany! Kawał dobrej roboty! 😄

Mam jednak problem który odkryłem podczas tej lekcji, mianowicie kontaktron podpięty do pinu 0 nie działa, przy sprawdzaniu problemu okazało się że to samo dotyczy np. diody LED. Nigdy nie miałem problemów z płytką aż do tej pory 😕 Możliwe jest uszkodzenie jedynie pojedynczego portu płytki? W moim przypadku wszystko oprócz pinu 0 działa poprawnie 😞 

Udostępnij ten post


Link to post
Share on other sites

Pokaż program - może tu masz błąd? Kontaktron i LED to chyba dwie różne sytuacje. Raz port jako WEJŚCIE, a innym razem jako WYJŚCIE.

Udostępnij ten post


Link to post
Share on other sites

W ramach testów wrzuciłem na płytkę kod żywcem skopiowany z kursu więc kod nie jest tutaj problemem. Zmiana definicji kontaktronu z pinu 0 na np pin 1 (oraz przepięcie kabla kontaktronu ;)) zalatwia sprawę, kontaktron działa prawidłowo 

Udostępnij ten post


Link to post
Share on other sites

Więc nadal nie wiesz co z tym portem. Do testów to sobie uruchom np. taki programik:

void setup() 
{
  pinMode(0,OUTPUT);
}

void loop() 
{
digitalWrite(0,HIGH);
delay(500);
digitalWrite(0,LOW);
delay(500);
}

Tu sprawdzisz działanie portu jako WYJŚCIE. Podłącz do niego katodę diody LED, a anodę tej LED przez rezystor np. 330R do +5V. LED powinien migać.

Jeśli chcesz sprawdzić działanie tego portu jako WEJŚCIE to możesz się posłużyć np. takim programem:

void setup() 
{
  pinMode(0,INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() 
{
Serial.println(digitalRead(0));
}

Teraz uruchamiasz monitor portu szeregowego i na port podajesz 0 czyli GND i nie podajesz (będzie 1 przez wewnętrzny PULLUP). W monitorze powinieneś widzieć 0 i 1.

Udostępnij ten post


Link to post
Share on other sites

Dzięki za odpowiedź, tak jak pisałem w pierwszym poście, sprawdzałem działanie LEDa na pinie 0 i dioda się wgl nie zaświeca. Przetestowałem drugi program który podesłałeś i Arduino wysyła do ciągle wartość 1, nie reaguje na wpięcie/wypięcie GND 😕

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

No to przy założeniu, że do Arduino nic nie było podpięte (nawet PC - Arduino zasilane np. z bateryjki nie z USB!) to może mamy do czynienia z fizycznym uszkodzeniem portu.

Edytowano przez Belferek

Udostępnij ten post


Link to post
Share on other sites

@Rafgart, witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start:

  • Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników.
  • Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć?
  • Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości.

Dnia 15.11.2018 o 15:47, Rafgart napisał:

Witam wszystkich serdecznie. Na wstępie chciałbym bardzo podziękować za kurs, który jest naprawdę świetnie napisany! Kawał dobrej roboty! 😄

Miło słyszeć, że kurs jest pomocny 🙂

Jeśli chodzi o Twój problem to akurat testowanie go przez UART (w taki sposób) nie jest zbyt dobrym wyborem. Pin 0, który testujesz jest wykorzystywany do komunikacji przez UART i nie powinno się w takim przypadku podłączać do niego żadnych elementów (mogą zakłócać komunikację). Lepiej zrobić test takim programem:

int incomingByte = 0; 

void setup() {
    Serial.begin(9600); 
}

void loop() {
  if (Serial.available() > 0) {
    incomingByte = Serial.read();
    Serial.print((char)incomingByte);
  }
}

Wgraj go i uruchom monitor portu szeregowego. Wszystko co wyślesz do Arduino powinno natychmiast wrócić do PC i być wyświetlone jako dane odebrane. Dzięki temu sprawdzisz działanie całego UARTu (czyli przy okazji sprawdzisz pin 0 oraz pin 1). Daj znać czy taki program u Ciebie działa. Pamiętaj tylko, aby ustawić w monitorze portu szeregowego odpowiednią prędkość transmisji tj. 9600. Sprawdziłem kod przed chwilą na Arduino UNO i działa na 100%.

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Dodam tylko, że programik jaki ja zaproponowałem też działa OK. Sprawdziłem "namacalnie" 🙂 z Arduino podpiętym przez USB do PC. To że D0 jest wykorzystywane do transmisji szeregowej z układami zewnętrznymi za pośrednictwem UART to tak na marginesie nawet jest "napisane" na płytce UNO (RxD czyli receiver - odbiornik).

Edytowano przez Belferek
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

@Treker Dzięki za program. Przetestowałem go na swojej płytce i działa bez zarzutu. Wychodzi na to że komunikacja płytki z PC działa poprawnie (ufff :D) 

Udostępnij ten post


Link to post
Share on other sites
8 godzin temu, Rafgart napisał:

Dzięki za program. Przetestowałem go na swojej płytce i działa bez zarzutu. Wychodzi na to że komunikacja płytki z PC działa poprawnie (ufff :D) 

To dobry znak, ale warto jednak iść dalej. Wgraj teraz zwykły program Blink z przykładów dostępnych w IDE. Sprawdź czy zadziała normalnie w domyślnej konfiguracji (miganie diody wbudowanej w Arduino - pin 13). Jak zadziała to podmień informacje o diodzie na pin 0 i sprawdź woltomierzem, czy na tym pinie będzie coś się zmieniało. Musiałbyś mieć pecha, aby tak uszkodzić płytkę, aby UART działał, ale zwykłe sterowanie portem cyfrowym było już uszkodzone. 

Dnia 17.11.2018 o 14:01, Belferek napisał:

Dodam tylko, że programik jaki ja zaproponowałem też działa OK.

Tak, w tym układzie będzie działał, ale jeśli ktoś chciałby testować pin nr 1, albo miałby podłączone jakieś "dziwne" peryferia do tych pinów to program nie działałby już poprawnie. Dlatego lepiej, akurat do testowania działania pinów numer 0 i 1 nie używać UARTa 😉

Udostępnij ten post


Link to post
Share on other sites
Dnia 22.11.2018 o 00:47, Treker napisał:

Jak zadziała to podmień informacje o diodzie na pin 0 i sprawdź woltomierzem, czy na tym pinie będzie coś się zmieniało. Musiałbyś mieć pecha, aby tak uszkodzić płytkę, aby UART działał, ale zwykłe sterowanie portem cyfrowym było już uszkodzone. 

@Treker Sprawdziłem tak jak radziłeś i niestety, port 0 nie podaje żadnego napięcia. Dla pewności wykonałem też pomiar dla innego portu i tam wszystko się zgadzało

Udostępnij ten post


Link to post
Share on other sites

To ja już nie mam innego pomysłu, chyba faktycznie "udało Ci się" uszkodzić Arduino w tak niestandardowy sposób 😉

Udostępnij ten post


Link to post
Share on other sites

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ę »

×