Olá a todos.
Sei que a idéia principal do Arduino é o aprendizado. Estou “trabalhando”, quando há tempo neste projeto, há um bom tempo, pois se trata de diversão e não tentar ganhar com isso, pelo menos no meu caso.
Já havia desenvolvido boa parte do projeto que é um PAN/TILT , a parte de movimentação dos servos através de joystick estava tudo testado e ok, mas infelizmente houve um problema na meu HD e meu backup não estava atualizado.
Pedi tudo, ou quase tudo. Agora estou co problemas justamente nesta parte.
Estou tentando controlar um servo 360º , através do monitor serial “d” direita e “e” esquerda, o problema ocorre no “fim de curso”, que servi para o servo não dá 360º, digitando “d” o servo deve ir para direita ate o ” fim de curso” e não aceitar mais o comando “d”, somente o “e”, voltando para esquerda, seguindo a mesma lógica.
Peço ajuda, o que tem de errado ?
//
// Acionamento de PAN
//
// myservoH = Servo 360º
// Fim_Curso = reed switch acionamento por imâ (conforme imagem)
//
//
//
#include <Servo.h>
Servo myservoH; // Servo Horizontal
int posH = 0; // variavel que guarda posição do servo H
//
// Vel. passos
// 1 = 20 - 1
// 2 = 40 - 2
// 3 = 80 - 4
// 4 = 100 - 5
// 5 = 200 - 10
// 6 = 300 - 15
// 7 = 400 - 20
// 8 = 600 - 30
int passoH = 4;
char Direcao;
int PinoLed = 6; // Led pino 6
int Fim_Curso = 2 ; // Fim de curso pino 7
// Array de char que receberá o comando
// via serial
char buffer[1];
//
/ Variavel que identifica quantos
// caracteres foram recebidos, pois só é
// possível receber um caracter por vez
int received;
void setup()
{
myservoH.attach(8); // attaches the servo on pin 9 to the servo object
myservoH.write(90); // para o servo 90
//
Serial.begin(9600); // inicializar porta serial
pinMode(PinoLed, OUTPUT); // LED
pinMode(Fim_Curso, INPUT); // Fim de Curso
// Atribui o valor 0 para a variavel received
received = 0;
// Na posição 0 do array, atribui o valor '\0'
// que identifica onde começa o array
buffer[received] = '\0';
}
//
void loop()
{
digitalWrite(PinoLed, LOW);
// Verifica se existe alguma entrada de dados
// disponivel na entrada serial
if(Serial.available()){
// Salva os caracteres no array a cada iteração
buffer[received++] = Serial.read();
// Verifica se não há mais entrada pela serial
if(received >= (sizeof(buffer)-1)){
// Zera novamente a variavel
received = 0;
}
Direcao = char(buffer[0]);
// Limpa o buffer da entrada serial
Serial.flush();
//
switch (Direcao){
case 'd': // direita
for (int x = 1; x <= passoH; x++) {
if (digitalRead(Fim_Curso) == LOW){
myservoH.write(180); // Direita 180
delay(20); // passo 20
myservoH.write(90); // para o servo 90
posH++;
Serial.println(posH); // TEMPORARIO
}
else { // encontrado fim move 1 passo esquerda
digitalWrite(PinoLed, HIGH);
myservoH.write(0); // Esquerda 0
delay(50); // passo 20
myservoH.write(90); // para o servo 90
posH--;
break;
}
}
break;
case 'e': // esqueda
for (int x = 1; x <= passoH; x++) {
if (digitalRead(Fim_Curso) == LOW){
myservoH.write(0); // Esquerda 0
delay(20); // passo 20
myservoH.write(90); // para o servo 90
posH--;
Serial.println(posH);
}
else { // encontrado fim move 1 passo direita
digitalWrite(PinoLed, HIGH);
myservoH.write(180); // Direita 180
delay(50); // passo 20
myservoH.write(90); // para o servo 90
posH++;
break;
}
}
break;
}
}
}
Agradeço a atenção.
Vou colocar o código e uma imagem.
FCaldeira
Tags:
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por