Escolar Documentos
Profissional Documentos
Cultura Documentos
*/
// BIBLIOTECAS
#include <Servo.h> //Servo Driver
#define BRAKE 0
#define CW 1
#define CCW 2
#define ESQUERDA 3
#define DIREITA 4
#define FRENTE 5
#define TRAS 6
#define PARADO 7
//MOTOR 1
#define MOTOR_A1_PIN 7
#define MOTOR_B1_PIN 8
//MOTOR 2
#define MOTOR_A2_PIN 4
#define MOTOR_B2_PIN 9
//HABILITAR OS MOTORES
#define EN_PIN_1 A0
#define EN_PIN_2 A1
// NUMERANDO OS MOTORES
#define MOTOR_1 0
#define MOTOR_2 1
//BLUETOOTH
char buffer[67];
int frequencia = 0;
// INICIALIZANDO O PROGRAMA
void setup()
{
//CONFIGURACAO DA PORTA SERIAL
Serial.begin(9600);
Serial.flush();
pinMode(MOTOR_A2_PIN, OUTPUT);
pinMode(MOTOR_B2_PIN, OUTPUT);
pinMode(PWM_MOTOR_1, OUTPUT);
pinMode(PWM_MOTOR_2, OUTPUT);
pinMode(CURRENT_SEN_1, OUTPUT);
pinMode(CURRENT_SEN_2, OUTPUT);
pinMode(EN_PIN_1, OUTPUT);
pinMode(EN_PIN_2, OUTPUT);
pinMode(FAROL_DIANTEIRO, OUTPUT);
pinMode(FAROL_TRASEIRO, OUTPUT);
pinMode(FREIO, OUTPUT);
pinMode(BUZZER, OUTPUT);
sentido = PARADO;
// CHECANDO O SISTEMA
test_farol_dianteiro();
test_farol_traseiro();
test_freio();
delay(50);
void loop()
{
if (Serial.available()>0)
{
int index=0;
// AGUARDA 80ms PARA ENCHER O BUFFER
delay(80);
// ROBO ESQUERDA
if ((data[0] =='g') || (data[0] == 'G'))
{
if (sentido == FRENTE)
{
usMotor_Status_M1 = BRAKE;
usMotor_Status_M2 = CCW;
motorGo(MOTOR_1,usMotor_Status_M1, usSpeed);
motorGo(MOTOR_2,usMotor_Status_M2, usSpeed);
}
else if (sentido == TRAS)
{
usMotor_Status_M1 = BRAKE;
usMotor_Status_M2 = CW;
motorGo(MOTOR_1,usMotor_Status_M1, usSpeed);
motorGo(MOTOR_2,usMotor_Status_M2, usSpeed);
}
}
// ROBO DIREITA
if ((data[0] =='h') || (data[0] == 'H'))
{
if (sentido == FRENTE)
{
usMotor_Status_M1 = CW;
usMotor_Status_M2 = BRAKE;
motorGo(MOTOR_1,usMotor_Status_M1, usSpeed);
motorGo(MOTOR_2,usMotor_Status_M2, usSpeed);
}
else if (sentido == TRAS)
{
usMotor_Status_M1 = CCW;
usMotor_Status_M2 = BRAKE;
motorGo(MOTOR_1,usMotor_Status_M1, usSpeed);
motorGo(MOTOR_2,usMotor_Status_M2, usSpeed);
}
}
// INCREMENTAR VELOCIDADE
if ((data[0] =='v') || (data[0] == 'V'))
{
usSpeed = usSpeed + 10;
// DECREMENTAR VELOCIDADE
if ((data[0] =='x') || (data[0] == 'X'))
{
usSpeed = usSpeed - 10;
// BUZZER
if ((data[0] =='d') || (data[0] == 'D'))
{
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,1);
if (Ans == 1)
{
tone(BUZZER,1500);
}
else
{
noTone(BUZZER);
}
}
//FUNCAO QUE CONTROLA AS VARIAVEIS: motor(0 ou 1), direcao (cw ou ccw) e pwm (entre
0 e 255);
void motorGo(uint8_t motor, uint8_t direct, uint8_t pwm)
{
if(motor == MOTOR_1)
{
if(direct == CW)
{
digitalWrite(MOTOR_A1_PIN, HIGH);
digitalWrite(MOTOR_B1_PIN, LOW);
}
else if(direct == CCW)
{
digitalWrite(MOTOR_A1_PIN, LOW);
digitalWrite(MOTOR_B1_PIN, HIGH);
}
else
{
digitalWrite(MOTOR_A1_PIN, LOW);
digitalWrite(MOTOR_B1_PIN, LOW);
}
analogWrite(PWM_MOTOR_1, pwm);
}
else if(motor == MOTOR_2)
{
if(direct == CW)
{
digitalWrite(MOTOR_A2_PIN, HIGH);
digitalWrite(MOTOR_B2_PIN, LOW);
}
else if(direct == CCW)
{
digitalWrite(MOTOR_A2_PIN, LOW);
digitalWrite(MOTOR_B2_PIN, HIGH);
}
else
{
digitalWrite(MOTOR_A2_PIN, LOW);
digitalWrite(MOTOR_B2_PIN, LOW);
}
analogWrite(PWM_MOTOR_2, pwm);
}
}