Skocz do zawartości

2 switch key, kontrola kierunkiem obrotów L298N


maro232

Pomocna odpowiedź

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

Link do komentarza
Share on other sites

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(); 
 }  } 

  • Pomogłeś! 1
Link do komentarza
Share on other sites

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

Link do komentarza
Share on other sites

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 😉

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

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.