Problem z projektem bluetooth - 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: Problem z projektem bluetooth (/watek-problem-z-projektem-bluetooth) |
Problem z projektem bluetooth - MajsteRF_120rc - 15-01-2024 Witam. Buduję układ mający być sterowaniem w zdalnie sterowanym samochodzie. W skrócie: Sygnał z telefonu idzie do modułu bluetooth hc-06, arduino go odczytuje i daje napięcie i informację o prędkości do modułu l298n który napędza silnik. na podobnej zasadzie działa serwo. Całość zasilana jest z baterii 7,4v. Serwo jest podłączone do baterii przez regulator napięcia, który napięcie zmniejsza do 5v. Problem jest następujący: napisałem dwa osobne programy. Jeden do kontroli serwa, a drugi do silnika. Osobno oba działają jak należy, problem pojawił się gdy połączyłem je w jeden, wtedy działa tylko serwo. W załączonych plikach przesyłam zdjęcia układu jak i program. Z góry dziękuję za pomoc. [attachment=1411] [attachment=1412][attachment=1413] const int ENA = 8; // Pin PWM dla kanału A const int IN1 = 7; // Pin IN1 dla kanału A const int IN2 = 6; // Pin IN2 dla kanału A #include <Servo.h> Servo myservo; int pos = 0; // variable to store the servo position int motor = 0; void setup() { pinMode(ENA, OUTPUT); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); Serial.begin(9600); myservo.attach(9); // attaches the servo on pin 9 to the servo object Serial.print("Arduino control Servo Motor Connected OK"); Serial.print('\n'); } char znak; void loop() { if (Serial.available() > 0) { znak = Serial.read(); } if (znak == 'W') { analogWrite(ENA, 128); // 50% z 255 (128 -9V()) digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); } if(znak == 'w'){ digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); } { motor = Serial.parseInt(); // do it again: pos = Serial.parseInt(); // look for the newline. That's the end of your sentence: if (Serial.read() == '\n') { myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position // print the three numbers in one string as hexadecimal: Serial.print("Data Response : "); Serial.print(motor, DEC); Serial.print(pos, DEC); } } } RE: Problem z projektem bluetooth - Jarewa0606 - 15-01-2024 Źle podłączone dwa programy i pierwszy if (Serial.available() > 0) { znak = Serial.read(); } odczytuje więc drugi na serwo nic nie odczytuje. Więc byś musiał wymyślę coś własnego jak odczytać by było do dwuch zdań RE: Problem z projektem bluetooth - oscarX - 15-01-2024 W poprzednim poście otrzymałeś drobne wyjaśnienie. Dodam eszcze być najpierw określił jak chcesz sterować (protokół komunikacyjny)> Według przedstawionego programu wysyłasz 'W' lub 'w' do sterowania silnikiem a potem oczekujesz liczby określającej pozycje serwa. Czy program sterujący faktycznie wysyła dane w taki sposób? Skoro miałeś dwa oddzielne programy na arduino to i programy sterujące były chyba dwa. W jaki sposób dwa programy mają wysyłać dane pzez jeden RS/BT? RE: Problem z projektem bluetooth - MajsteRF_120rc - 15-01-2024 Dziękuję za odpowiedzi. czyli krótko mówiąc nie da się tego zrobić tak jak zakładałem. chciałem by serwo było sterowane w miarę precyzyjnie (przez suwak na smartfonie) a silnik poprzez przycisk. Suwak wysyła informację o położeniu serwa jako liczby. Więc przycisk ustawiłem tak, by wysyłał litery. Napiszę nowy program gdzie serwo nie będzie sterowane precyzyjnie, tylko na przyciski- lewo prawo. Bo innego wyjścia nie widzę. Dziękuję za pomoc. RE: Problem z projektem bluetooth - oscarX - 15-01-2024 (15-01-2024, 17:05)MajsteRF_120rc napisał(a): Dziękuję za odpowiedzi. czyli krótko mówiąc nie da się tego zrobić tak jak zakładałem. chciałem by serwo było sterowane w miarę precyzyjnie (przez suwak na smartfonie) a silnik poprzez przycisk. Suwak wysyła informację o położeniu serwa jako liczby. Więc przycisk ustawiłem tak, by wysyłał litery. Napiszę nowy program gdzie serwo nie będzie sterowane precyzyjnie, tylko na przyciski- lewo prawo. Bo innego wyjścia nie widzę. Dziękuję za pomoc. Czyli, jak rozumiem, miałeś program który na ruch suwaka wysyłał liczbę, w na jakieś przyciski literki w/W. To najprościej niech suwak wysyła swoją liczbę poprzedzoną jakimś innym znakiem. Wtedy w odbiorniku czytasz znak i na jego podstawie wiesz czy czytać dalej, czy ustawić to PWM. W takich programach komunikacyjnych bardzo ważne jest zaprojektowanie takiego protokołu komunikacyjnego, który jest jednoznaczny (co w ogólności nie jest łatwe) - trzeba pamiętać, że moment włączenia odbiornika może być przypadkowy (w ogólności) i może on zacząć odbierać od połowy komunikatu. Jeśli będziesz miał protokół w którym komunikat zaczyna się literką i trwa np. do kodu enter - to już wygląda na sensowny protokól. Może wręcz wybrać jakiś znak na początek komunikatu - potem treść nie zawierająca tego znaku i jakiś znak na koniec (też unikalny) (ale to nie jest konieczne). Wysyłanie samych liczb ma tę wadę, że mógłbyś ją odczytać od środka - np. nadajesz 128 a odbiornik odczyta 28 i masz zupełnie odjechany od rzeczywistości odczyt. RE: Problem z projektem bluetooth - MajsteRF_120rc - 15-01-2024 (15-01-2024, 17:23)oscarX napisał(a):Dziękuję za radę, spróbuję, ale wydaje mi się że to nie na mój stopień zaawansowania.(15-01-2024, 17:05)MajsteRF_120rc napisał(a): Dziękuję za odpowiedzi. czyli krótko mówiąc nie da się tego zrobić tak jak zakładałem. chciałem by serwo było sterowane w miarę precyzyjnie (przez suwak na smartfonie) a silnik poprzez przycisk. Suwak wysyła informację o położeniu serwa jako liczby. Więc przycisk ustawiłem tak, by wysyłał litery. Napiszę nowy program gdzie serwo nie będzie sterowane precyzyjnie, tylko na przyciski- lewo prawo. Bo innego wyjścia nie widzę. Dziękuję za pomoc. RE: Problem z projektem bluetooth - Irvin - 15-01-2024 W Arduino niewiele jeszcze można wymyślić nowego, to czego szukasz to parsowanie danych, z programu wysyłasz ciąg danych zaczynających się od charakterystycznego znaku np. &^%$#, potem wartości oddzielone np. ",", i linia tekstu zakończona znakiem nowej linii, parsujesz te dane do zmiennych i masz bardzo prosto przekazane w parę us cały zestaw: %predkosc,kierunek,swiatlaMijania,klakson,CoTamJeszczeCiPrzyjdzieDoGlowyNL. Dane powinny być przekazywane w racjonalnych interwałach czasowych, np. co 50ms. W programie mierz upływ czasu, masz do tego millis, jeśli przez jakiś czas (np. powyżej 100ms) nie przyleci nowy zestaw danych zatrzymaj pojazd. https://forum.arduinopolska.pl/watek-port-szeregowy-przypisanie-odczytanych-warto%C5%9Bci-do-zmiennych https://forum.arduinopolska.pl/watek-sterowanie-przeka%C5%BAnikiem-za-pomoc%C4%85-sms-arduino-uno-modu%C5%82-gsm i tysiące innych przykładów z GOOGLE. RE: Problem z projektem bluetooth - MajsteRF_120rc - 16-01-2024 Dziękuję za pomoc |