Ola pessoal estou a fazer um robô utilizando a comunicação xbee entre o arduino e o pc.
O programa que tenho no arduino é o seguinte
#define LED 1
int PWMA = 6;
int AIN1 = 12;
int AIN2 = 13;
int BIN1 = 10;
int BIN2 = 8;
int PWMB = 9;
int STBY = 11;
int speed_val=255;
#include <Servo.h>
Servo servo1;
int GRAUS = 0;
//--- so se realiza ao iniciar o programa-----
void setup()
{
pinMode(PWMA,OUTPUT);
pinMode(AIN1,OUTPUT);
pinMode(AIN2,OUTPUT);
pinMode(PWMB,OUTPUT);
pinMode(BIN1,OUTPUT);
pinMode(BIN2,OUTPUT);
pinMode(STBY,OUTPUT);
pinMode(LED,OUTPUT);
Serial.begin(9600);
Serial.println('x', BYTE);
speed_val = 50;
M1_stop() ;
M2_stop() ;
GRAUS=0;
}
//----------------------------------------
void loop()
{
if(Serial.available()>0)
{
char A=Serial.read();
digitalWrite(LED,HIGH);
if (A== 'n') // se cicar na tecla 'n' incrementa 10 uindades a velocidade
{
speed_val = speed_val + 10;
test_speed();
}
else if (A=='m') // se cicar na tecla 'm'retira 10 uindades a velocidade
{
speed_val = speed_val - 10;
test_speed();
}
else if (A=='8') // se cicar na tecla '8' o robo anda em frente
{
M1_forward(speed_val);
M2_forward(speed_val);
delay(25);
}
else if (A=='2') // se cicar na tecla '2' o robo anda para traz
{
M1_reverse(speed_val);
M2_reverse(speed_val);
delay(25);
}
else if (A=='4')// se cicar na tecla '4' o robo vira para a direita
{
M1_reverse(speed_val);
M2_forward(speed_val);
delay(25);
}
else if (A=='6')// se cicar na tecla '6' o robo vira para a esquerda
{
M1_forward(speed_val);
M2_reverse(speed_val);
delay(25);
}
else if (A=='i')// se cicar na tecla 'i' sobes a camara 10 unidades
{
GRAUS= GRAUS + 10;
test_GRAUS();
servo1.write(GRAUS);
delay(25);
}
else if (A=='k') // se cicar na tecla 'k' desces a camara 10 unidades
{
GRAUS= GRAUS - 10;
test_GRAUS();
servo1.write(GRAUS);
delay(25);
}
else
{
M1_stop();
M2_stop();
digitalWrite(LED, LOW);
}
}
}
//------ teste da velocidade------------------
void test_speed()
{
if (speed_val > 250)
{
speed_val = 255;
}
if (speed_val < 0)
{
speed_val = 0;
}
}
//-----teste da posição da camara-----------
void test_GRAUS()
{
if (GRAUS > 180)
{
GRAUS = 180;
}
if (GRAUS < 0)
{
GRAUS = 0;
}
}
//-----Funções de Movimento---------------------------------
void M1_reverse(int x)
{
digitalWrite(STBY,HIGH);
digitalWrite(BIN1, LOW);
digitalWrite(BIN2, HIGH);
analogWrite(PWMB, x);
}
void M1_forward(int x)
{
digitalWrite(STBY,HIGH);
digitalWrite(BIN2, LOW);
digitalWrite(BIN1, HIGH);
analogWrite(PWMB, x);
}
void M1_stop()
{
digitalWrite(BIN1, LOW);
digitalWrite(BIN2, LOW);
digitalWrite(PWMB, LOW);
}
void M2_forward(int y)
{
digitalWrite(STBY,HIGH);
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, HIGH);
analogWrite(PWMA, y);
}
void M2_reverse(int y)
{
digitalWrite(STBY,HIGH);
digitalWrite(AIN2, LOW);
digitalWrite(AIN1, HIGH);
analogWrite(PWMA, y);
}
void M2_stop()
{
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, LOW);
digitalWrite(PWMA, LOW);
}
//--- Fim ---------------------------------
O que queria é que se carrega-se na tecla 8, andar para a frente e assim sucessivamente nas outras teclas.
sendo o n para incrementar o valor de velocidade e o m para diminuir a velocidade.
Não estou a conseguir meter o robo a andar com este código alguem pode dar uma ajuda?