Arduino Polska Forum
Sterowanie dwoma silnikami odrębnymi przyciskami. - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: Sterowanie dwoma silnikami odrębnymi przyciskami. (/watek-sterowanie-dwoma-silnikami-odr%C4%99bnymi-przyciskami)



Sterowanie dwoma silnikami odrębnymi przyciskami. - pterus - 18-02-2018

Witam. Jestem początkującym posiadaczem Arduino UNO oraz Leonardo i mam problem z wykonaniem pewnego projektu. A mianowicie potrzebuję sterować z osobna dwoma silnikami za pomocą osobnych przycisków tj po załączeniu arduino oba silniki mają obracać się w jednym kierunku, po przyciśnięciu przycisku nr 1. silnik 1 zatrzymuje się i po upływie 3s zmienia kierunek na przeciwny ponowne przyciskam przycisk nr 1 i silnik 1 zatrzymuje się i po upływie 3 s zmienia kierunek. 
Analogicznie po przyciśnięciu przycisku nr 2. silnik 2 zatrzymuje się i po upływie 3s zmienia kierunek na przeciwny ponowne przyciskam przycisk nr 2 i silnik 2 zatrzymuje się i po upływie 3 s zmienia kierunek. 
Obecnie działa to tylko z jednym silnikiem.
Kod:
#define in1 6
#define in2 7
#define button 4
int rotDirection = 0;
int pressed = false;

void setup() {
 pinMode(in1, OUTPUT);
 pinMode(in2, OUTPUT);
 pinMode(button, INPUT_PULLUP);
 // Set initial rotation direction
 digitalWrite(in1, LOW);
 digitalWrite(in2, HIGH);
}
void loop() {
// Read button - Debounce
 if (digitalRead(button) == true) {
   pressed = !pressed;
 }
 while (digitalRead(button) == true);
 delay(20);
 // If button is pressed - change rotation direction
 if (pressed == true  & rotDirection == 0) {
   digitalWrite(in1, HIGH);
    delay(3000);
   digitalWrite(in2, LOW);
   rotDirection = 1;
   delay(20);
 }
 // If button is pressed - change rotation direction
 if (pressed == false & rotDirection == 1) {
   digitalWrite(in1, LOW);
     delay(3000);
   digitalWrite(in2, HIGH);
   rotDirection = 0;
   delay(20);
 }
}
Dodatkowo czy jest jeszcze możliwość aby podczas trwania tych 3 s postoju silnika włączał się jakiś sygnał dźwiękowy np z buzera.
Oczywiście silniki podłączone do sterownika z układem L298N
Proszę o pomoc układ ma być wykorzystany do makiety wieży szybowej


RE: Sterowanie dwoma silnikami odrębnymi przyciskami. - Smaczek - 19-02-2018

Witam,
A w czym dokładnie tkwi problem?
Pozdrawiam,
Tomek.


RE: Sterowanie dwoma silnikami odrębnymi przyciskami. - pterus - 19-02-2018

(19-02-2018, 10:21)Smaczek napisał(a): Witam,
A w czym dokładnie tkwi problem?
Pozdrawiam,
Tomek.

Problem tkwi w napisaniu programu. 
Pozdrawiam


RE: Sterowanie dwoma silnikami odrębnymi przyciskami. - Smaczek - 20-02-2018

Witam,
Masz kod programu obsługujący jeden silnik. Zdefiniuj sobie zmienne dla drugiego silnika:
np:
#define in3 8
#define in4 9
#define button1 5
int rotDirection1 = 0;
int pressed1 = false;
Skopiuj kod z funkcji setup() i loop() dokonując zmian uwzględniających nazwy nowych zmiennych.
To na początek.
Żeby Twój program działał jak należy musisz wyeliminować wszystkie delay(). Zamiast tego zastosuj rozwiązanie z przykładowego programu BlinkWithoutDelay.
Pozdrawiam,
Tomek.