25-05-2017, 15:43
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 :
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;
}
}