• 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
Witam. Program do DC + Joystik
#1
Witam serdecznie. 
Posiadam program z sieci, który zmodyfikowałem delikatnie i wgrałem do arduino. 
Chciałbym poprosić Was  o Pomoc w poprawie tego programu w taki sposób aby za pomocą joystika silnik dc obracał się zgodnie albo w lewo albo w prawo. 
Na tą chwilę silnik działa tylko w lewo jeśli nadam mu kierunek na joystiku lewy. Czy uda się poprawić poniższy program aby również działał w prawo? 
Z góry bardzo dziękuję. 

KOD PROGRAMU : 

Kod:
#define PWM 9
#define IN2 4
#define IN1 5
#define STBY 6
#define JOYSTICK A0


volatile boolean kierunek = true;
volatile boolean lewo_en = true;
int pozycja_joy, odczyt = 0;
volatile int pozycja = 0;

boolean ustawiono = false;
String komenda;
unsigned int predkosc;
int poczatek, koniec, start;

void setup() {
 Serial.begin(9600);
 Serial.println("(POCZATEK) : (KONIEC) : (PREDKOSC) : (CZAS STARTU)");
 Serial.println("[0 - 100] : [0 - 100] : [0 - 100] : [ms]");
 pinMode(13, OUTPUT);
 pinMode(JOYSTICK, INPUT);
 pinMode(PWM, OUTPUT);
 pinMode(IN2, OUTPUT);
 pinMode(IN1, OUTPUT);
 pinMode(STBY, OUTPUT);
 digitalWrite(STBY, HIGH);
 pozycja_joy = analogRead(JOYSTICK);
 analogWrite(PWM, 255);
 digitalWrite(IN1, HIGH);
 digitalWrite(IN2, LOW);

}


void loop() {
 if (ustawiono) {
   digitalWrite(13, HIGH);

   if (poczatek < pozycja)
     while (poczatek < pozycja)
     {
       digitalWrite(IN1, HIGH);
       digitalWrite(IN2, LOW);
       analogWrite(PWM, 255);
     } else
     while (poczatek > pozycja)
     {
       digitalWrite(IN1, LOW);
       digitalWrite(IN2, HIGH);
       analogWrite(PWM, 255);
     }

   analogWrite(PWM, 0);
   delay(start);
   analogWrite(PWM, predkosc);

   if (koniec < pozycja)
     while (koniec < pozycja)
     {
       digitalWrite(IN1, HIGH);
       digitalWrite(IN2, LOW);

     } else
     while (koniec > pozycja)
     {
       digitalWrite(IN1, LOW);
       digitalWrite(IN2, HIGH);
     }
   analogWrite(PWM, 0);
   digitalWrite(13, LOW);
   ustawiono = false;
 }

 if (kierunek) {
   digitalWrite(IN1, HIGH);
   digitalWrite(IN2, LOW);
 } else {
   digitalWrite(IN1, LOW);
   digitalWrite(IN2, HIGH);
 }

 if (analogRead(JOYSTICK) < pozycja_joy)
 {
   kierunek = false;
 }

 if ((analogRead(JOYSTICK) > pozycja_joy) && lewo_en)
 {
   kierunek = true;
   analogWrite(PWM, (analogRead(JOYSTICK) - pozycja_joy) / 4);    
 }
}
void serialEvent() {
 while (Serial.available()) {
   String temp;
   temp = Serial.readStringUntil(':');

   if (poczatek < 0) poczatek = 0;

   temp = Serial.readStringUntil(':');

   if (koniec < 0) koniec = 0;

   temp = Serial.readStringUntil(':');
   predkosc = map(temp.toInt(), 0, 100, 0, 255);
   if (predkosc < 0) predkosc = 0;
   if (predkosc > 255) predkosc = 255;
   temp = Serial.readStringUntil(':');
   start = temp.toInt();
   if (start < 0) start = 0;
   ustawiono = true;
 }
}
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości