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

Título: programação de motor brushless
Enviado 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:

Código: [Seleccione]
#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);
    }
  }
}
Título: Re: programação de motor brushless
Enviado por: tr3s em 27 de Março de 2012, 10:12
Parece que te estás a esquecer de iniciar o Serial, por exemplo no Setup.  ;)
Título: Re: programação de motor brushless
Enviado por: afar em 18 de Abril de 2012, 15:00
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?

Código: [Seleccione]
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);
    }
  }
}