Skocz do zawartości
Komentator

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

Pomocna odpowiedź

(edytowany)

Cześć,

Do tej pory nie było problemów z wgrywaniem szkiców na płytkę, ale od przykładu z kontraktonem nie mogę wgrać kodu.

Resetowałem komputer, odinstalowałem Arduino i zainstalowałem z powrotem, usuwałem port COM i włączałem od nowa.

Zmieniałem gniazda USB.

Nic nie pomogło. 

2019-12-15.png

Edytowano przez husadam5

Udostępnij ten post


Link to post
Share on other sites

@husadam5 odłącz dla pewności wszystko od Arduino i tuż przed programowaniem wciśnij reset na płytce (spróbuj kilka razy, za którymś razem powinno się udać) 🙂

Udostępnij ten post


Link to post
Share on other sites

Zapomniałem napisać, znalazłem winowajcę.  Problem był z wgraniem czegokolwiek gdy kabel kontraktonu był wpięty w pin "RX  <- 0". Wyciągam go z tego pinu na czas wgrywania i jest OK.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Hej. Super cześć kursu. Kodów do prac domowych nie wrzucam, bo opierają się one na zmianach pojedynczych wartości. Jednak chciałbym się odnieść do posta @husadam5. U mnie było podobnie. Gdy pisałem 2 dni temu kody na użycie kontraktronu i wpięty był w pin RX (0) nie było żadnych problemów. Usiadłem dziś znów, pogrzebałem trochę w kodach i przywitał mnie błąd: stk500_getsync() attempt 1 of 10: not in sync: resp=0x3f. Już miałem obawę, że w jakiś sposób uszkodziłem płytkę. Podłączyłem drugie UNO, które mam na stanie i błąd ten sam, więc tą opcję wykluczyłem. Poszukałem trochę w internecie i znalazłem informację, że taki błąd powstaje podczas gdy mamy coś wpięte w piny 0 lub 1. Przepięcie kontraktronu w inny pin rozwiązało problem. Jednak w internecie nie piszą dlaczego tak się dzieje. Znacie odpowiedź dlaczego tak się dzieje?

Udostępnij ten post


Link to post
Share on other sites
5 minut temu, BHBmacieg napisał:

Jednak w internecie nie piszą dlaczego tak się dzieje. Znacie odpowiedź dlaczego tak się dzieje?

Jeśli coś podepniesz do tych linii (0 i 1 czyli Rx i Tx) - albo Arduino nie będzie mogło odebrać tego, co mu przekazuje konwerter USB/UART, albo konwerter nie będzie mógł odebrać danych z Arduino.

 

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Mnie ciekawi inna rzecz, trochę w temacie, a trochę poza nim. 

Ustawiamy SoftwareSeriala, podłączamy, NA TEJ SAMEJ PARZE PINÓW, dwa różne urządzenia, wiemy na pewno(?), że Arduino gada ALBO  z jednym ALBO z drugim, nigdy(?) jednocześnie z dwoma naraz, będzie działać? 

Udostępnij ten post


Link to post
Share on other sites

Zdefiniuj "na pewno".

Udostępnij ten post


Link to post
Share on other sites

Chodziło mi o to, że albo gada z jedym albo z drugim, ale nie wiem czy czasem są jakieś wbudowane "mechanizmy" które uniemożliwiają takie kombinacje. Kompilator Arduino IDE problemu nie widzi:) 

Udostępnij ten post


Link to post
Share on other sites

Tu raczej chodzi o to, który układ jest w danej chwili aktywny. Jeśli masz jakiś multiplekser to wiesz, z którym układem gadasz. Bez tego możesz tylko zgadywać. 

Udostępnij ten post


Link to post
Share on other sites

Ale stosując jakieś tam biblioteki do konkretnych peryferii, to dane komendy zrozumie chyba tylko jeden z nich, a inne ten drugi... Wiadomo, że są wysyłane szeregowo do obu jednocześnie, ale każdy zrozumie tylko swoje. Przynajmniej na tym wysokim poziomie programowania wydaje się to logiczne, ale przecież te sygnały to tylko kombinacje 0 i 1 więc nie wiem jak to wygląda z punktu widzenia takiego układu... 

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Niekoniecznie. pamiętaj, że nie masz tu żadnego adresowania i układ nie wie, czy polecenie jest dla niego. Np niech a1 oznacza odtwórz nagranie nr 1 dla playera, i wezwij policję dla alarmu... 

Edytowano przez ethanak

Udostępnij ten post


Link to post
Share on other sites

Super! Miło czytać słowa uznania 🙂 

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
#define LED_R 10
#define LED_G 11
#define LED_B 12
#define PIR 2

volatile uint8_t counter=0;

void alarm(){
   counter++;
   Serial.print(" Przerwanie ! ");
   Serial.println(counter);
   if(counter%2==0){
     digitalWrite(LED_R,HIGH);
     digitalWrite(LED_G,LOW);
   }
   else
   {
     digitalWrite(LED_R,LOW);
     digitalWrite(LED_G,HIGH);
   }
 }

void setup() {
  pinMode(LED_R, OUTPUT); 
  pinMode(LED_G, OUTPUT);
  pinMode(LED_B, OUTPUT);
  pinMode(PIR, INPUT); 
  pinMode(8,OUTPUT);
  digitalWrite(LED_R, HIGH); 
  digitalWrite(LED_G, HIGH);
  digitalWrite(LED_B, HIGH);
  attachInterrupt(digitalPinToInterrupt(2), alarm, RISING);
  Serial.begin(9600);
}
  

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

Witam, nie rozumiem dlaczego przerwanie nie działa mi poprawnie w momencie gdy w funkcji loop wrzucę miganie diodą.

Gdy miał taki sam kod tylko bez wnętrza funkcji loop() przerwanie wykonywało się tylko raz w momencie wykrycia w ruchu przez czujnik i zmieniało kolor diody na inny. Z dodaniem migającej diody przerwanie wykonuje się klika razy co pół sekundy (jest to związane pewnie z delayem między stanami diody), czego kompletnie nie rozumiem. Proszę o pomoc 😄

Edit. Problemem była równolegle wpięta dioda od wyjścia sygnałowego czujnika PIR, po jej usunięciu wszystko działa poprawnie. Zastanawia mnie tylko dlaczego ona wywoływała te przerwania o.O ?

Edytowano przez Merfinius

Udostępnij ten post


Link to post
Share on other sites

@Merfinius witam na forum 🙂

23 godziny temu, Merfinius napisał:

Edit. Problemem była równolegle wpięta dioda od wyjścia sygnałowego czujnika PIR, po jej usunięciu wszystko działa poprawnie. Zastanawia mnie tylko dlaczego ona wywoływała te przerwania o.O ?

Jak dokładnie była podłączona ta dioda i jaki efekt dzięki temu chciałeś uzyskać? Zgodnie z Twoim programem dioda była na pinie 8, a czujnik jest na pinie nr 2. Nie rozumiem jak dokładnie było to w praktyce połączone 😉

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