Ola, pessoal., eu quero controlar o servo com um só botao, ok, mas esse codigo sem alteração quando aperto o botao ele vai lento ate o definido e depois volta rapido, nao quero q isso aconteca, ali nos comentarios do code diz que ele ficará para do no 180, mas ele volta a zero, quero apertar o botao e ele vai lento e pare, depois apertar de novo e ele voltar lento ao zero.
#include <Servo.h>
Servo myservo; //
Servo myservo2;
bool pressionado; //estado do botao
int botao=40; //Pino a ser ligado o botao
bool estado=0; //estado atual do botao
int tempoPercurso=10; //tempo escrito em segundos (10 segundos)
int tempo;
void setup()
{
myservo.attach(12); //pino de dados do servo conectado ao pino 9
myservo.write(0); //inicia motor posição 0 graus
myservo2.attach(13); //pino de dados do servo conectado ao pino 9
myservo2.write(0); //inicia motor posição 0 graus
pinMode(botao, INPUT_PULLUP);
tempo=(tempoPercurso*300)/180;
}
void loop()
{
pressionado=digitalRead(botao); //verifica se o botao foi pressionado
delay(200);
//se ele não foi pressionado o valor do pressionado será 1
if((estado==0)&&(pressionado==0))
//Se o esatdo é 1 e o botão não esta pressionado, ou seja é 1 tambem
{
for(int pos=0; pos<=120; pos++){//Avanço de 0 a 180
myservo.write(pos);//o Servo fica na posição 180 graus
myservo2.write(pos);//o Servo fica na posição 180 grau
delay(tempo);
}
estado==1;
}
if((estado==1)&&(pressionado==1))
{
for(int pos=120; pos>=0; pos--){//retorno de 180 a zero
myservo.write(pos);//o Servo fica na posição 0 graus
myservo2.write(pos);//o Servo fica na posição 180 graus
delay(tempo);
}
estado==0;
}
}
nao deu certo, deixei só 1 if, mas ele sempre retorna rápido a posição 0. quero apertar o botão 1 vez e ele ir lento do 0 até o 120 e parar, se eu apertar o botao novamente ele ir do 120 ao 0 lentamente como foi do 0 ao 120. o botao pode ser ate chave, se ligada vai do o ao 120 e se for alta vai do 120 ao zero, ja tentei algumas vezes mas nao sei pq ele volta rapido,obrigado
Agradecido, funcionou perfeitamente, só coloquei a variavel tempo dentro do void pra deslocar devagar, obrigado mesmo, tu é o cara. precisar de algo na questão eletrônica física da um tok, abraço!
Oi, o codigo ta ok, mas ele aciona o servo na hora que liga o arduino e quando ele nao liga, a primeira apertada do botao, ele ele volta rapido pro inicio e ai sim, cada vez q aciono o botao ele vai para um dos lados lentamente como esperado. o problema que quando liga ele faz tipo um teste e aciona,
#include <Arduino.h>
#include <Bounce2.h> // https://github.com/thomasfredericks/Bounce2/archive/refs/heads/master.zip
#include <Servo.h>
Bounce2::Button button = Bounce2::Button();
const int buttonPin = 40;
const int servo1Pin = 12;
const int servo2Pin = 13;
//const int ledPin = LED_BUILTIN;
byte step = 1;
const int courseTime = 10;
const int time = (courseTime * 400) / 120;
Servo myservo1;
Servo myservo2;
void setup()
{
Serial.begin(9600);
button.attach(buttonPin, INPUT_PULLUP);
button.interval(5); // interval im ms
button.setPressedState(LOW);
myservo1.write(0); //inicia motor position 0 degress
myservo2.write(0);
myservo1.attach(servo1Pin);
myservo2.attach(servo2Pin);
}
void loop()
{
button.update();
if (button.pressed())
{
if (step == 0)
{
step = 1;
moveServo();
}
else
{
step = 0;
moveServo();
}
}
}
void moveServo()
{
Serial.print("step = ");
Serial.println(step);
switch (step)
{
case 0:
for (int pos = 0; pos < 120; pos++)
{
myservo1.write(pos);
myservo2.write(pos);
delay(time);
}
break;
case 1:
for (int pos = 120; pos > 0; pos--)
{
myservo1.write(pos);
myservo2.write(pos);
delay(time);
}
break;
default:
break;
}
}
imaginei, mas imagina que é um mini robocop, o acionamneto é o disparo da arma, la se foi um inocente kkkk,. mas tranquilo, vou testar, se nao der vou achar outra forma de ele nao acionar ou acionar lentamente, com o delay, valeu
resolvido, é só ele sempre ficar no lado certo, que dae quando aperta o botao ele nao gira rapidamente na primeira apertada, que vai pro zero pra dai começar, enfim, dessa forma pra mim resolve o problema, obrigado, abraço