Witam
Jestem początkujący w temacie arduino.
Chciałbym sterować serwomechanizmem oraz silnikiem poprzez aplikacje bluetooth na androida typu Arduino Bluetooth Joystisk. Wiadomo o co chodzi - samochód. Problem ma z przypisaniem osi x do sterowania serwem oraz osi y do sterowania silnikiem. Chodzi mi o płynną regulacje skrętu oraz prędkości. Chcę użyć do tego Arduino Nano.
Proszę o pomoc w temacie lub skierowanie do jakiegoś źródła na ten temat.
W kursie znajdziesz opis obsługi silników i serw:
https://forbot.pl/blog/kursy , program może działać sensownie dopiero co najmniej po poznaniu millis(), ale nie zaczynaj od końca kursu bo nic nie zrozumiesz. Do komunikacji z BT przyda się jeszcze poznanie parsowania zmiennych i przykład z event dla UART (jest wbudowany w Arduino IDE), przykłady użycia znajdziesz też na tym forum.
Do komunikacji bluetooth używam modułu hc-05, komunikacja działa. Jak pisałem mam problem z przypisaniem wartości sygnału na konkretną oś. Kursy na tym forum przeglądam a bieżąco.
No to super, pokaż kod, opisz z czym masz w nim problem, jak się zachowuje samochód vs czego oczekujesz.
Więc musisz po prostu przypisać wartość sygnału na konkretną os, i tyle
Mam nadzieję że zalapiesz sarkazm
Sarkazm załapny
Poniżej kod
Kod:
#define enA 9
#define in1 4
#define in2 5
#define enB 10
#define in3 6
#define in4 7
int xAxis, yAxis;
unsigned int X = 0;
unsigned int Y = 0;
int motorSpeedA = 0;
int motorSpeedB = 0;
void setup() {
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
Serial.begin(38400); // komunikacja
}
void loop() {
// stop
X = 512; // 4;
Y = 512; // 4;
//
while (Serial.available() >= 2) {
X = Serial.read();
delay(10);
Y = Serial.read();
}
delay(10);
yAxis = Y;//*4;
// y tyl
if (yAxis < 470) {
// motor B tyl
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
// y map tyl
motorSpeedA = map(yAxis, 470, 0, 0, 255);
}
else if (yAxis > 550) {
// potor B przod
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// y map przod
motorSpeedB = map(yAxis, 550, 1023, 0, 255);
}
// stop
else {
motorSpeedB = 0;
}
analogWrite(enA, motorSpeedA); // PWM serwo A
analogWrite(enB, motorSpeedB); // PWM motor B
}
Narazie nic się nie dzieje. Problem w tym że nie wiem jak przypisać wartości suwaka x do serwa (jeszcze nie ma w kodzie) i y do silnika. Aplikacja jak w załączniku.
[
attachment=760]
Więc zrobiłem tak jak poniżej:
[
attachment=761]
Z tego co wychodzi to że nie zależnie którą oś przesunę to wyrzuca D jako ruch i S jako stop. Czyli wychodzi na to że aplikacja nie rozróżnia osi. Dla trzech przycisków jest ok bo kolejno B, B2, B3.
Wystarczyło przeczytać opis aplikacji, jest link do przykładowego szkicu na github. D to direction, a S to speed i to raczej chodzi o Twoje XY
link. Niezależnie co robisz aplikacja wysyła w ustawionym interwale dane, tak by program w Arduino wiedział, że joy jest w zasięgu, inaczej zatrzymuje pojazd.
Witam
Trochę to zajęło ale temat zakończony powodzeniem. Dziękuje za pomoc.