O que acontece é que os servos ficam dando espasmos durante a transmissão de dados fica pior quando tento colocar eles em grau menor que 180, estando os 2 e 180 graus não tem espasmos ou seja eles ficam imóveis se desligo o transmissor também cessam os espasmos, parece que a cada ciclo depois do delay o servos tendem a ir a 180 graus por isso quando eu diminuo para um numero menor que 18;0 eles ficam tentando voltar a 180 e quando recebem os dados vão para a posição indicada. não sei o que pode estar errado. Estou usando dois arduinos nano no transmissor um hc05 e no receptor um hc06 estão configurados na mesma velocidade e estão se conectando e recebo os dados corretos mas mesmo assim os servos se movimentam quando em grau menor que 180 quanto menor o grau maior é o movimento. Espero que possam me ajudar. Este é o meu primeiro post no fórum então se cometi algum erro me desculpem.
Código do transmissor:
#include <SoftwareSerial.h>
SoftwareSerial btSerial(3, 2); // RX, TX
const int potPin = A0; // Pino do potenciômetro
const int buttonPin1 = 4; // Pino do botão 1
const int buttonPin2 = 5; // Pino do botão 2
const int buttonPin3 = 6; // Pino do botão 3
const int buttonPin4 = 7; // Pino do botão 4
void setup() {
pinMode(buttonPin1, INPUT_PULLUP); // Configura o botão 1 como entrada com pull-up
pinMode(buttonPin2, INPUT_PULLUP); // Configura o botão 2 como entrada com pull-up
pinMode(buttonPin3, INPUT_PULLUP); // Configura o botão 3 como entrada com pull-up
pinMode(buttonPin4, INPUT_PULLUP); // Configura o botão 4 como entrada com pull-up
Serial.begin(9600); // Inicia a comunicação serial para depuração
btSerial.begin(9600); // Inicia a comunicação com o módulo Bluetooth
}
void loop() {
// Lê o valor do potenciômetro
int potValue = analogRead(potPin);
int servo1Pos = map(potValue, 0, 1023, 0, 180);
// Lê o estado dos botões
bool buttonState1 = digitalRead(buttonPin1);
bool buttonState2 = digitalRead(buttonPin2);
bool buttonState3 = digitalRead(buttonPin3);
bool buttonState4 = digitalRead(buttonPin4);
// Envia os dados para o Receptor via Bluetooth
btSerial.print(servo1Pos);
btSerial.print(",");
btSerial.print(buttonState1);
btSerial.print(",");
btSerial.print(buttonState2);
btSerial.print(",");
btSerial.print(buttonState3);
btSerial.print(",");
btSerial.println(buttonState4);
// Envia dados para serial monitor
Serial.print(servo1Pos);
Serial.print(",");
Serial.print(buttonState1);
Serial.print(",");
Serial.print(buttonState2);
Serial.print(",");
Serial.print(buttonState3);
Serial.print(",");
Serial.println(buttonState4);
delay(100); // Pequeno atraso para estabilidade
}
Codigo do receptor
#include <Servo.h>
#include <SoftwareSerial.h>
Servo servo1; // Declaração do servo 1
Servo servo2; // Declaração do servo 2
const int relay1Pin = 8; // Pino do relé 1
const int relay2Pin = 9; // Pino do relé 2
int servo1Pos; // Variável para armazenar a posição do servo 1
int servo2Pos = 90; // Posição inicial do servo 2
const int servo2Step = 1; // Incremento/decremento do servo 2
SoftwareSerial btSerial(3, 2); // RX, TX para o módulo Bluetooth
void setup() {
Serial.begin(9600); // Inicia a comunicação serial para depuração
btSerial.begin(9600); // Inicia a comunicação com o módulo Bluetooth
servo1.attach(10); // Anexa o servo 1 ao pino 9
servo2.attach(11); // Anexa o servo 2 ao pino 10
pinMode(relay1Pin, OUTPUT); // Configura o pino do relé 1 como saída
pinMode(relay2Pin, OUTPUT); // Configura o pino do relé 2 como saída
}
void loop() {
if (btSerial.available()) {
// Se houver dados disponíveis no módulo Bluetooth
String data = btSerial.readStringUntil('\n');
// Processa os dados recebidos
int separatorIndex1 = data.indexOf(',');
int separatorIndex2 = data.indexOf(',', separatorIndex1 + 1);
int separatorIndex3 = data.indexOf(',', separatorIndex2 + 1);
int separatorIndex4 = data.indexOf(',', separatorIndex3 + 1);
// Extrai os valores do potenciômetro e dos botões
int potValue = data.substring(0, separatorIndex1).toInt();
int buttonState1 = data.substring(separatorIndex1 + 1, separatorIndex2).toInt();
int buttonState2 = data.substring(separatorIndex2 + 1, separatorIndex3).toInt();
int buttonState3 = data.substring(separatorIndex3 + 1, separatorIndex4).toInt();
int buttonState4 = data.substring(separatorIndex4 + 1).toInt();
// Atualiza a posição do servo 1 sem mapear novamente
servo1Pos = potValue;
servo1.write(servo1Pos);
// Controla o servo 2 com base nos estados dos botões
if (buttonState1 == 0) {
servo2Pos = max(servo2Pos - servo2Step, 0); // Move para a posição 0
} else if (buttonState2 == 0) {
servo2Pos = min(servo2Pos + servo2Step, 180); // Move para a posição 180
}
servo2.write(servo2Pos); // Atualiza a posição do servo 2
// Controla o relé 1 com base no estado do botão 3
if (buttonState3 == 0) {
digitalWrite(relay1Pin, HIGH); // Liga o relé 1
} else {
if (buttonState4 == 0) { // Verifica se o botão 4 está pressionado
digitalWrite(relay1Pin, HIGH); // Mantém o relé 1 ligado
} else {
digitalWrite(relay1Pin, LOW); // Desliga o relé 1
}
}
// Controla o relé 2 com base no estado do botão 4
if (buttonState4 == 0) {
digitalWrite(relay2Pin, HIGH); // Liga o relé 2
} else {
digitalWrite(relay2Pin, LOW); // Desliga o relé 2
}
}
}