maro232 Napisano Maj 22, 2018 Udostępnij Napisano Maj 22, 2018 Witam Prosze was o pomoc, bo już dostaję na głowe. Dopiero zaczynam moją przygodę z arduino, generalnie probuję zrobic niepełnosprawnej mamie rolety na przycisk, by ulatwic jej życie, a w przyszłości dodać modol bluetooth, enkoder, micro switche oraz czujnik swiatla, ale to w przyszlosci, bo nie mam jeszcze tych wszystkich rzeczy (np na bluetooth czekam, az przyplynie z chin). Dysponuje obecnie dwoma przyciskami, chciałbym jej zrobić by w czasie naciskania na przycisk (nazwałem go B2) rolety sie opuszczały, gdy nie jest wcisnięty to by sie poprostu zatrzymały, a gdy nacisne na drugi przycisk (B3) to by rolety szły do góry, a po puszczeniu przycisku rowniez wszystko staneło w miejscu i tutaj sprawa mi sie komplikuje w tym prostym kodzie. Wydaje mi sie ze blad jest w kodzie tzn else/ jak jest przycisk B2 puszczony to jak ma dzialac przycisk B3, skoro blokuje go else z B2 i odwrotnie. Silnik wydaje odgłosy jakby chciał, ale nie moze (słychać jak impuls przechodzi). Jak w kodzie jest tylko jeden przycisk to wszystko śmiga. Jest jakas inna komenda zamiast else, albo jakaś komenda po else, by zatrzymac silnik po puszczeniu przycisku i niekolidował z drugim przyciskiem, chyba ze jakis inny bład robie którego nie widze. probowałem tez while, ale jest ten sam problem. Wszystko działało i przestało, bo dodaniu enkodera(chcialem zobaczyc czy dziala i dziala bez zarzutu). Nawet nie dziala po napisaniu kodu od początku bez enkodera. 10h probuje to naprawić i nic z tego. Posiadam płytke Arduino Leonardo oraz L298N const int ENA = 6; //Enable A const int ENB = 5; //Enable B const int IN1 = 8; const int IN2 = 7; const int IN3 = 4; const int IN4 = 9; const int B3 = 10; const int B2 = 11; const int timeDelay = 500; boolean run; void motorBackward(int speed) { analogWrite(ENA, speed); analogWrite(ENB, speed); digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); } void motorForward(int speed) { analogWrite(ENA, speed); analogWrite(ENB, speed); digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); } void motorFastBrake() { analogWrite(ENA, 255); analogWrite(ENB, 255); digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, HIGH); delay(timeDelay); } void setup() { TCCR1B = TCCR1B & 0b11111000 | 0x04; pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); digitalWrite(ENA, LOW); digitalWrite(ENB, LOW); pinMode(B2, INPUT_PULLUP); //Przycisk pinMode(B3, INPUT_PULLUP); } void loop() { if (digitalRead(B3) == LOW) { //Jeśli przycisk jest wciśnięty motorForward(255); } else { //Jeśli przycisk nie jest wciśnięty motorFastBrake(); } if (digitalRead(B2) == LOW) { //Jeśli przycisk jest wciśnięty motorBackward(255); } else { //Jeśli przycisk nie jest wciśnięty motorFastBrake(); } } Z góry dziekuje o pomoc Pozdrawiam Cytuj Link do komentarza Share on other sites More sharing options...
Zero Maj 22, 2018 Udostępnij Maj 22, 2018 Musisz sprawdzić, czy jeden przycisk jest wcisnięty a drugi nie. W poniższym kodzie jeżeli oba przyciski są wciśnięte jednocześnie lub żaden nie jest wciśnięty to motor zatrzyma się. if (digitalRead(B3) == LOW && digitalRead(B2) == HIGH) { Jeśli przycisk B3 jest wciśnięty motorForward(255); } else if (digitalRead(B3) == HIGH && digitalRead(B2) == LOW) { //Jeśli przycisk B2 jest wciśnięty motorBackward(255); } else { //Jeśli przycisk nie jest wciśnięty, albo oba wciśnięte motorFastBrake(); } } 1 Cytuj Link do komentarza Share on other sites More sharing options...
FlyingDutch Maj 22, 2018 Udostępnij Maj 22, 2018 Witam Wszystko działało i przestało, bo dodaniu enkodera(chcialem zobaczyc czy dziala i dziala bez zarzutu). Nawet nie dziala po napisaniu kodu od początku bez enkodera. 10h probuje to naprawić i nic z tego. Posiadam płytke Arduino Leonardo oraz L298N Z góry dziekuje o pomoc Pozdrawiam Cześć, Sorry, coś nieprzytomny dzisiaj jestem - mostek L298N, sprawa jasna. Drugi problem - przyciski mają drgania, nie widzę tu kodu eliminującego drgania styków. W IDE Arduino: Examples-> Digital-> Debounce masz przykład kodu eliminującego drgania styków. Trzeci problem - podczas załączania silnika występują stany nieustalone (chwilowa wartość prądu płynącego przez silnik może mieć ekstremalnie dużą wartość), powinieneś zrobić "soft start" (powoli rozpędzać silnik) i "soft stop". Czyli wejście PWM mostka zaczynasz obracać z mniejszym wypełnieniem i potem je zwiększasz, przy stopie odwrotnie. Pozdrawiam Cytuj Link do komentarza Share on other sites More sharing options...
maro232 Maj 22, 2018 Autor tematu Udostępnij Maj 22, 2018 Musisz sprawdzić, czy jeden przycisk jest wcisnięty a drugi nie.W poniższym kodzie jeżeli oba przyciski są wciśnięte jednocześnie lub żaden nie jest wciśnięty to motor zatrzyma się. if (digitalRead(B3) == LOW && digitalRead(B2) == HIGH) { Jeśli przycisk B3 jest wciśnięty motorForward(255); } else if (digitalRead(B3) == HIGH && digitalRead(B2) == LOW) { //Jeśli przycisk B2 jest wciśnięty motorBackward(255); } else { //Jeśli przycisk nie jest wciśnięty, albo oba wciśnięte motorFastBrake(); } } Dzieki, działa elegancko 😃😉 FlyingDutch 1. L298N, przerobione serwo 2. Dzieki za uwage 😉 3. Chce dodać, troche o tym czytałem, ale jeszcze nie umialem tego wykorzystac, zn raz wklepałem kod i był jakiś bład i sobie odpuscilem tymczasowo, ale najpierw chciałem, by to wgl znowu działało. Dziś tym sie zajme w nocy, ale nie wiem co z tego wyniknie, mam nadzieje że to ogarne 😉 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
Pomocna odpowiedź
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!