• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Sterowanie dwoma silnikami odrębnymi przyciskami.
#1
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
 
Odpowiedź
#2
Witam,
A w czym dokładnie tkwi problem?
Pozdrawiam,
Tomek.
 
Odpowiedź
#3
(19-02-2018, 10:21)Smaczek napisał(a): Witam,
A w czym dokładnie tkwi problem?
Pozdrawiam,
Tomek.

Problem tkwi w napisaniu programu. 
Pozdrawiam
 
Odpowiedź
#4
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.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości