Controllare motori brushless con arduino 2009

Ciao a tutti,
ho creato questo programma per controllare con arduino gli esc di 3 motori brushless

#include <Servo.h>

#define m_a_pin 9
#define m_b_pin 10
#define m_c_pin 11

Servo myservo_a, myservo_b, myservo_c;

//Questa funziona invia la potenza del motore all’ ESC
//Velocità = 0, ESC = spento
//Velocità = 1, ESC = MIN
//Vellocità = 100, ESC = MAX
void Motor_Set(int v, char m[4])
{
int i, m_angle, m_error = 0;

if(v==0)
{v = 0;}
else if(v>100)
{v = 180;}
else
{v = map(v, 1, 100, 61, 180);}

for(i=0; i<strlen(m); i++)
{
if(m*==‘A’)*

  • {myservo_a.write(v);}*
    _ else if(m*==‘B’)_
    {myservo_b.write(v);}
    _ else if(m==‘C’)_
    {myservo_c.write(v);}
    _ }
    }
    //Questa funzione setta l’ESC*
    void Esc_Set()
    {
    * delay(3000);_
    Motor_Set(0, “A”);
    Motor_Set(0, “B”);
    Motor_Set(0, “C”);
    _ delay(4000);
    }
    void setup()
    {_
    myservo_a.attach(m_a_pin);
    myservo_b.attach(m_b_pin);
    myservo_c.attach(m_c_pin);*

_ Serial.begin(9600);
* Esc_Set(); *
}
void loop()
{
* int v;_
Motor_Set(v, “A”); //Muovo il motore A*

* Motor_Set(v, “B”); //Muovo il motore B*
* Motor_Set(v, “C”); //Muovo il motore C*
}
[/quote]
ho notato che comandando un motore alla volta o tutti e 3 dalla stessa funzione, il programma funziona.
Ma se provo a controllare i 3 motori in modo indipendente, questi non funzionano contemporaneamente. Dove sbaglio?
Grazie per la vostra collaborazione

cos intendi con "Ma se provo a controllare i 3 motori in modo indipendente,"? Dacci un esempio di sketch. Ciao Uwe

se nel loop() inserisco la funzione MotorSet(v, "A"), parte il motore A a velocità v. se nel loop() inserisco la funzione MotorSet(v, "ABC"), parte il motore A, il motore B e il motore C tutti a velocità v.

se voglio controllare la velocità di ogni singolo motore mettendo nel loop():

  Motor_Set(90, "A");   //Muovo il motore A
  Motor_Set(70, "B");   //Muovo il motore B
  Motor_Set(30, "C");   //Muovo il motore C

per poter fa girare contemporaneamente i motori a velocità diverse, in realtà si accende prima il motore A e si spegne, poi e si accende il B e si spegne, infine il motore C...

Stai facendo un bel po di casino con i char e gli array.

void Motor_Set(int v, char m[4])
{
... 
 for(i=0; i<strlen(m); i++)
  {
   if(m=='A')
    {myservo_a.write(v);}
   else if(m=='B')
    {myservo_b.write(v);}
   else if(m=='C')
    {myservo_c.write(v);}
  }
}

Per primo non so se puoi dare alla funziona come parametro un array e non devi dare il puntatore al array.
Per secondo hai dimenticato l’ indice sulla variabile m.
Ti consiglio di non lavorare coi char ma con numeri per identificare il motore e fatti 2 funzioni: una che setta singolarmente un motore dando come parametro sia numero motore che velocitá e una che setta tutti i motore in contemporanea alla stessa velocitá

Ciao Uwe.