collapse

* Posts Recentes

Arame de Estendal por almamater
[Ontem às 16:16]


O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Emulador NES em ESP32 por dropes
[10 de Abril de 2024, 15:30]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]

Autor Tópico: programação de motor brushless  (Lida 2271 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline afar

  • Mini Robot
  • *
  • Mensagens: 12
programação de motor brushless
« 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);
    }
  }
}
« Última modificação: 27 de Março de 2012, 10:25 por TigPT »

Offline tr3s

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 811
  • char x=1, y=5; x^=y^=x^=y;
Re: programação de motor brushless
« Responder #1 em: 27 de Março de 2012, 10:12 »
Parece que te estás a esquecer de iniciar o Serial, por exemplo no Setup.  ;)
Tr3s
Daniel Gonçalves

Offline afar

  • Mini Robot
  • *
  • Mensagens: 12
Re: programação de motor brushless
« Responder #2 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);
    }
  }
}