• Welcome to LusoRobótica - Robótica em Português.
 

programação de motor brushless

Started by afar, 27 de March de 2012, 04:01

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

afar

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);
    }
  }
}

tr3s

Parece que te estás a esquecer de iniciar o Serial, por exemplo no Setup.  ;)
Tr3s
Daniel Gonçalves

afar

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);
    }
  }
}