• 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
Drganie serv / HC-12
#1
Witam,
Połączyłem dwa arduino uno/nano przez moduł HC-12. Na nano znajdują się 2 serva a na uno joystick do sterowania nimi. Niestety w momencie jak tylko arduino złapią połaczenie to serva zaczynają rytmicznie drgać. Serva zasilane są z 5V Arduino.
Poniżej kody.

Nadajnik
Kod:
#include <SoftwareSerial.h>

int ROT ;
int ROT1 ;
SoftwareSerial HC12(2, 3);
void setup() {
  Serial.begin(9600);             
  HC12.begin(9600);               

}
void loop() {

int ROT = analogRead(A0);
ROT = map(ROT , 0,1050,600,2000) ;
Serial.println(ROT);
HC12.println(ROT);

int ROT1 = analogRead(A1);
ROT1 = map(ROT1 , 0,1050,600,2000) ;
Serial.println(ROT1);
HC12.println(ROT1);


delay(150);



  }

Odbiornik
Kod:
#include <Servo.h>
#include <SoftwareSerial.h>

int x ;
int y ;

Servo myServo;
Servo myServo1;
SoftwareSerial HC12(2,3);
void setup() {
  myServo.attach(9);
  myServo1.attach(11);
  HC12.begin(9600);
  Serial.begin(9600);


}
void loop() {
         
   while ( HC12.available()>0) {       
   
   x = HC12.parseInt();
   Serial.println(x);
   

    myServo.write(x);
    y = HC12.parseInt();
   Serial.println(y);
   

    myServo1.write(y);
  delay(150);
 


   }
   }

 
 
Odpowiedź
#2
Po co Ci delay w odbiorniku i po co wpisujesz wartości do serwa jeśli są takie same jak poprzednie?
 
Odpowiedź
#3
(03-03-2020, 16:02)kaczakat napisał(a): Po co Ci delay w odbiorniku i po co wpisujesz wartości do serwa jeśli są takie same jak poprzednie?


Delay faktycznie nie potrzebny. Wartości wpisałem bo 1 joystick ma sterować 2 serwami i chciałem żeby nie działał tylko góra/dół, lewo/prawo tylko w momencie gdy dam skos to zadziałają dwa serwa. Arduino jest dla mnie nowe. Nie za dużo jest materiałów jeżeli chodzi o HC-12 a same przykłady z biblioteki nie naprowadzają mnie na to co chce zrobić. Docelowo chce zrobić aparaturę RC. Jeden joystick operuje servami a drugi obrotami silnika.
 
Odpowiedź
#4
Zasil serwa z niezależnego źródła, do komunikacji konieczna jest wspólna masa, polecenia przesyłaj w racjonalnych odstępach czasu, np. co 50ms, mierz czas od ostatniego komunikatu, tak by zatrzymać model/wylądować gdy straci komunikację z pilotem.
 
Odpowiedź
#5
Mam jeszcze pytanie odnośnie jak odróżnić sygnały w odbiorniku. Do tego zestawu chce jeszcze dodać silnik sterowany drugim joystickiem. W momencie jak dodaje drugi joystick w nadajniku to serva reagują na obydwa joysticki. Jak przypisać sygnał z A0 do Servo, A1 do Servo1, A2 do ETC?
 
Odpowiedź
#6
Zakładając, że na pinie A0 odczytałeś wartość 256, to wysyłając ją metodą println() nie wysyłasz 256 tylko String "256\n".
Twój odbiornik używa metody parseInt(), czyli w skrócie, usuwa znaki inne niż cyfry, a resztę zamienia na integer.
Gdybyś do zmiennych w nadajniku dopisał jakiś znacznik, np. A, B, C itd, czyli z wejścia A0 wyślesz String "A256\n", a w odbiorniku użył metody readStringUntil('\n'), to odbiornik odczyta String "A256". Następnie sprawdzasz jaka litera jest na początku odczytanego stringa, odcinasz pierwszy znak, a resztę zamieniasz na integer i w zależności od wcześniej odczytanej litery, zapisujesz do konkretnego serwa.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości