Arduino Polska Forum

Pełna wersja: Zatrzymanie silnika
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam, 

Robię projekt na Arduino uno, który będzie sterować silnikiem. Do tego projektu zamierzam użyć dwa czujniki odległości. Mój silnik mam za zadanie otworzyć i zamknąć klape. Gdy czujnik coś wyłapie na danej odległości kapa ma się otwierać przez jakiś czas, później chwila pauzy no i po pauzie ma się zamknąć. Mój problem polega na tym, że nie wiem jak napisać kod, który zatrzyma silnik przy zamykaniu klapy wtedy, gdy czujnik odległości coś wykryje. Chciałbym, żeby to działało na takiej samej zasadzie jak brama wjazdowa. Czyli jak fotokomórka coś wykryje przy zamykaniu bramy to wtedy brama się zatrzyma i po chwili zacznie się na nowo otwierać.
 
Dodałbym ten kod tutaj, tylko nie wiem jak ;(

Z góry dziękuję za pomoc!
Rozwiązań jest wiele. Najrozsądniejsze wydaje się aby czujnik wywołał przerwanie w obsłudze którego silnik zostanie zatrzymany.
(06-12-2018, 20:56)es2 napisał(a): [ -> ]Rozwiązań jest wiele. Najrozsądniejsze wydaje się aby czujnik wywołał przerwanie w obsłudze którego silnik zostanie  zatrzymany.

Tak, tylko problem w tym, że nie wiem jak ta komende wpisać 

U mnie jest coś takiego, teraz pytanie co tam dopisać?

void CZUJNIK1(){

digitalWrite(OTWIERANIE, HIGH); 
delay(czas2);
digitalWrite(OTWIERANIE, LOW); 
delay(pauza); 
digitalWrite(ZAMYKANIE, HIGH);
delay(czas1);
digitalWrite(ZAMYKANIE, LOW);

}

void CZUJNIK2(){

digitalWrite(OTWIERANIE, HIGH); 
delay(czas2);
digitalWrite(OTWIERANIE, LOW); 
delay(pauza); 
digitalWrite(ZAMYKANIE, HIGH);
delay(czas1);
digitalWrite(ZAMYKANIE, LOW);
Tu znajdziesz informacje jak napisać program: https://forbot.pl/blog/kursy .
(06-12-2018, 21:03)Matfa11 napisał(a): [ -> ]
(06-12-2018, 20:56)es2 napisał(a): [ -> ]Rozwiązań jest wiele. Najrozsądniejsze wydaje się aby czujnik wywołał przerwanie w obsłudze którego silnik zostanie  zatrzymany.

Tak, tylko problem w tym, że nie wiem jak ta komende wpisać 

U mnie jest coś takiego, teraz pytanie co tam dopisać?

void CZUJNIK1(){

digitalWrite(OTWIERANIE, HIGH); 
delay(czas2);
digitalWrite(OTWIERANIE, LOW); 
delay(pauza); 
digitalWrite(ZAMYKANIE, HIGH);
delay(czas1);
digitalWrite(ZAMYKANIE, LOW);

}

void CZUJNIK2(){

digitalWrite(OTWIERANIE, HIGH); 
delay(czas2);
digitalWrite(OTWIERANIE, LOW); 
delay(pauza); 
digitalWrite(ZAMYKANIE, HIGH);
delay(czas1);
digitalWrite(ZAMYKANIE, LOW);
Dałeś strzępki kodu więc nie da sie pomóc.
Jak dasz cały, to pewnie dostanę kołatania serca, bo obawiam się, że czas1, czas2, pauza mają setki ms lub więcej. Poczytaj o millis. Delay-em zawieszasz program nie zobaczy on zmiany stanu czujnika. Przerwania nic nie dadzą, bo co z tego, że przerwanie zatrzyma silnik, jak za chwile, po jakimś tam Delay wykona się digitalWrite(OTWIERANIE, HIGH);
Musisz:
- Zapoznać się z podstawowym kursem Arduino.
- Zapoznać się z z wielowątkowością (choćby z użyciem millis).
- Zapoznać się z przerwaniami zewnętrznymi.
Na szczęście nie musisz zapoznać się z RTOS-em.