Você está na página 1de 2

//flags

volatile boolean sentidoHorario = 1;


volatile boolean velocidadeAlta = 1;
volatile boolean alterouSentido = 0;
volatile boolean alterouVelocidade = 0;

//velocidade de rotação
int x = 12;

//pinagem
const byte botao_sentido = 2;
const byte botao_velocidade = 3;
const byte moto1 = 4;
const byte moto2 = 5;
const byte pwm = 9;

void setup()
{
//configuração de pinagens
Serial.begin(9600);
pinMode(pwm, OUTPUT);
pinMode(moto1, OUTPUT);
pinMode(moto2, OUTPUT);
pinMode(botao_sentido, INPUT);
pinMode(botao_velocidade, INPUT);

attachInterrupt(digitalPinToInterrupt(botao_sentido), mudaSentido, FALLING);


attachInterrupt(digitalPinToInterrupt(botao_velocidade), mudaVelocidade,
FALLING);
analogWrite(pwm, 255);

//inicia rotação horária


digitalWrite(moto1, LOW);
digitalWrite(moto2, HIGH);
}

void mudaSentido(){
alterouSentido = 1;
}

void mudaVelocidade(){
alterouVelocidade = 1;
}

void aumentaDevagar(){
while(x < 254){
analogWrite(pwm, x);
x++;
delay(5);
}
x = 0;
}

void loop()
{
//se alterar o sentido
if(alterouSentido){
alterouSentido = 0;
sentidoHorario = !sentidoHorario;
analogWrite(pwm, 12);

if(sentidoHorario){
//direita
digitalWrite(moto1, LOW);
digitalWrite(moto2, HIGH);
}
else{
//esquerda
digitalWrite(moto2, LOW);
digitalWrite(moto1, HIGH);
}
if(velocidadeAlta){
aumentaDevagar();
}
}
//se alterar a velocidade
if(alterouVelocidade){
alterouVelocidade = 0;
velocidadeAlta = !velocidadeAlta;
if(velocidadeAlta){
aumentaDevagar();
}
else {
analogWrite(pwm, 12);
}

}
}

Você também pode gostar