Skocz do zawartości

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


Komentator

Pomocna odpowiedź

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
Link do komentarza
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?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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
Link do komentarza
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ć? 

Link do komentarza
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:) 

Link do komentarza
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... 

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

#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
Link do komentarza
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 😉

Link do komentarza
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!

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

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.