LusoRobótica - Robótica em Português
Sistemas específicos => Arduino / AVR => Tópico iniciado por: afar em 27 de Março de 2012, 04:01
-
Estou com duvida aonde meu código pode estár errado, sem os IF para eu testar as condição de "manobra" do quadricoptero ele funciona. Quando eu insiro a linha do printfln para baixo nao funciona mais o código porque?
:-X :-X :-X
Alguem pode me ajudar?
Desculpe por algum erro!!! :D
o Código:
#define MINCOMMAND 1000
#define MAXCOMMAND 1400
#define DIRCOMMAND 1600
int motorPinL = 2; // onde L= Lefth , R= Right , U= Up, D= Down
int motorPinU = 4; // por causa de direita e dianteiro
int motorPinD = 6;
int motorPinR = 8;
void setup()
{
pinMode(motorPinL , OUTPUT);
pinMode(motorPinR , OUTPUT);
pinMode(motorPinU , OUTPUT);
pinMode(motorPinD , OUTPUT);
arm();
}
void arm()
{
analogWrite(motorPinL, MINCOMMAND / 8);
analogWrite(motorPinR, MINCOMMAND / 8);
analogWrite(motorPinU, MINCOMMAND / 8);
analogWrite(motorPinD, MINCOMMAND / 8);
}
void loop() {
int a=0;
int d=0;
for(int motorCommand = MINCOMMAND ; motorCommand <= MAXCOMMAND; motorCommand +=5)
{
analogWrite(motorPinL, motorCommand / 8);
analogWrite(motorPinR, motorCommand / 8);
analogWrite(motorPinU, motorCommand / 8);
analogWrite(motorPinD, motorCommand / 8);
}
Serial.println(" Digite A,S,D,W"); //D para direita, E para esqueradr F para frente e T para traseira ");
a=Serial.read();
d=a+2;
delay(1000);
//Serial.println(d);
if (d==99)
{
for(int motorCommand = MAXCOMMAND ; motorCommand <= motorPinD ; motorCommand +=5)
{
analogWrite(motorPinL, motorCommand / 8);
}
}
if (d==117)
{
for(int motorCommand = MAXCOMMAND ; motorCommand <= motorPinD ; motorCommand +=10)
{
analogWrite(motorPinD, MINCOMMAND / 8);
}
}
if (d==102)
{
for(int motorCommand = MAXCOMMAND ; motorCommand <= motorPinD ; motorCommand +=10)
{
analogWrite(motorPinR, motorCommand / 8);
}
}
if (d==121)
{
for(int motorCommand = MAXCOMMAND ; motorCommand <= motorPinD ; motorCommand +=10)
{
analogWrite(motorPinU, motorCommand / 8);
}
}
}
-
Parece que te estás a esquecer de iniciar o Serial, por exemplo no Setup. ;)
-
modifiquei minha programação mas me parece que está com erro no loop:
Os Esc´s são controlados como se fossem servo motores, alguém tem outra programação que ajuda a controlar a velocidade dos motores?
int motorPin = 8;
int motor2Pin = 6;
int motor3Pin = 4;
int motor4Pin = 2;
#define MINCOMMAND 1000
#define MAXCOMMAND 1600
#define DIRCOMMAND 2000
void setup()
{
Serial.begin(9600);
pinMode(motorPin , OUTPUT);
pinMode(motor2Pin , OUTPUT);
pinMode(motor3Pin , OUTPUT);
pinMode(motor4Pin , OUTPUT);
arm();
}
void arm()
{
analogWrite(motorPin, MINCOMMAND / 8);
analogWrite(motor2Pin, MINCOMMAND / 8);
analogWrite(motor3Pin, MINCOMMAND / 8);
analogWrite(motor4Pin, MINCOMMAND / 8);
}
void loop() {
for(int MC = MINCOMMAND ; MC <= MAXCOMMAND; MC +=10) {
analogWrite(motorPin, MC / 8);
analogWrite(motor2Pin, MC / 8);
analogWrite(motor3Pin, MC / 8);
analogWrite(motor4Pin, MC / 8);
delay(500);
}
int dir,a=10;
Serial.println(" D para direita, E para esquerda F para frente e W para traseira ");
if (Serial.available() >0) { //existem caracteres para ler
dir=Serial.read();
Serial.println(a);
//altera a velocidade consoante o caracter.
}
if (dir == 'a')
{
for(int MC = MAXCOMMAND ; MC <= DIRCOMMAND ; MC +=10)
{
analogWrite(motorPin, MC / 8);
Serial.println(dir);
}
}
if (dir == 's')
{
for(int MC = MAXCOMMAND ; MC <= DIRCOMMAND ; MC +=10)
{
analogWrite(motor2Pin, MC / 8);
Serial.println(dir);
}
}
if (dir == 'w')
{
for(int MC = MAXCOMMAND ; MC <= DIRCOMMAND ; MC +=10)
{
analogWrite(motor3Pin, MC / 8);
Serial.println(dir);
}
}
if (dir == 'd')
{
for(int MC = MAXCOMMAND ; MC <= DIRCOMMAND ; MC +=10)
{
analogWrite(motor4Pin, MC / 8);
Serial.println(dir);
}
}
}