Skocz do zawartości

Serwo sterowane potencjometrem za pomocą hc-12


Pomocna odpowiedź

Napisano

Witam

Mam napisany cały kod sterujący sześcioma serwami potencjometrem za pomocą modułów hc-12 i po podłączeniu serwa pulsują i nie reagują na potencjometry 🙁 dodam że pracuje na arduino mega

nadajnik:

#include <SoftwareSerial.h>
#include <Servo.h>
SoftwareSerial HC12(1, 0); // HC-12 TX Pin, HC-12 RX Pin
int potValue = 0;
int potValue1 = 0;
int potValue2 = 0;
int potValue3 = 0;
int potValue4 = 0;
int potValue5 = 0;

void setup() {

 Serial.begin(1200); 
}
void loop() {

// Czytanie potencjometru
potValue = analogRead(A0);
int potValueMapped = map(potValue, 0, 1023, 0, 255);
Serial.write(potValueMapped); // wysyłanie potValue do serwa
delay(10);

potValue1 = analogRead(A1);
int potValue1Mapped = map(potValue1, 0, 1023, 0, 255);
Serial.write(potValue1Mapped);
delay(10);

potValue2 = analogRead(A2);
int potValue2Mapped = map(potValue2, 0, 1023, 0, 255);
Serial.write(potValue2Mapped); 
delay(15);

potValue3 = analogRead(A3);
int potValue3Mapped = map(potValue3, 0, 1023, 0, 255);
Serial.write(potValue3Mapped);
delay(15);

potValue4 = analogRead(A4);
int potValue4Mapped = map(potValue4, 0, 1023, 0, 255);
Serial.write(potValue4Mapped);
delay(15);

 potValue5 = analogRead(A5);
int potValue5Mapped = map(potValue5, 0, 1023, 0, 255);
Serial.write(potValue5Mapped);
delay(15);


}

odbiornik:

#include <SoftwareSerial.h>
#include <Servo.h>
SoftwareSerial HC12(1, 0); // HC-12 TX Pin, HC-12 RX Pin
#include <Servo.h>
Servo myServo;
Servo myServo1;
Servo myServo2;
Servo myServo3;
Servo myServo4;
Servo myServo5;
int state = 0;
int state1 = 0;
int state2 = 0;
int state3 = 0;
int state4 = 0;
int state5 = 0;
void setup() {

 myServo.attach(12);
 myServo1.attach(11);
 myServo2.attach(10);
 myServo3.attach(9);
 myServo4.attach(8);
 myServo5.attach(7);
 Serial.begin(1200); 

}

void loop() { 
if(Serial.available() > 0){
   state = Serial.read(); 
   state1 = Serial.read(); 
   state2 = Serial.read(); 
   state3 = Serial.read(); 
   state4 = Serial.read(); 
   state5 = Serial.read(); 

}
// kontrolowanie serwa
myServo.write(state);
delay(15);
myServo1.write(state1);
delay(15);
myServo2.write(state2);
delay(15);
myServo3.write(state3);
delay(15);
myServo4.write(state4);
delay(15);
myServo5.write(state5);
delay(15);
}
Ten temat już się na forum pojawiał - SoftwareSerial nie działa z Servo, albo jedna, albo druga biblioteka.

Czyli wywalić SoftwareSerial czy jak?

To Arduino ma tyle portów, a w tym 4 x UART więc po co Ci programowy UART. Wykorzystaj warstwę sprzętową co zminimalizuje ewentualne konflikty bibliotek.

Pozdrawiam,

To Arduino ma tyle portów, a w tym 4 x UART więc po co Ci programowy UART. Wykorzystaj warstwę sprzętową co zminimalizuje ewentualne konflikty bibliotek.

Pozdrawiam,

ale ogolnie reszta programu jeste okej?

Moim zdaniem nie bardzo. Zobacz https://www.arduino.cc/en/Reference/ServoWrite tam jest informacja, że argument używany przez Serwo.write() to nie od 0 do 255 (tak jak ty mapujesz, a odbiornik odbiera)! Jeśli już to od 0 do 180. Z praktyki wiem, że serwomechanizmy niekoniecznie dobrze się zachowują w pozycjach krańcowych i np. lepiej nimi sterować od np. 10 do 170 stopni.

Powinieneś pomyśleć nad algorytmem transmisji przez port szeregowy. Skąd odbiornik ma wiedzieć, że otrzymał dane do ustawienia servo2? Oststnio dużo było na forum o funkcji delay(), millis()... - poczytaj i tak napisz program by nie używać delay().

Swoje serwomechanizmy powinieneś zasilić z zewnętrznego zasilacza - nie z pinu Arduino. Nic nie piszesz jak ten problem rozwiązałeś.

Pozdrawiam,

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...