Olá pessoal!
Sou novo no fórum, programo já há alguns anos e desde pequeno tive algum contato com robôs programando um daqueles robôs MONTY que vendiam em revistas.
De um mês para cá conheci o Arduino e comprei um com o atmega328, depois de alguns testes com displays de LCD, pushbuttons e sensores tipo o controle nunchuck do wii resolvi dar um passo maior e montar um "quadcopter" (tipo helicóptero mais com 4 motores).
Para resumir, comprei todos os ítens:
- 2 arduinos com atmega328
- inicialmente para testes um transmissor e um receptor de RF 433mhz (no futuro pretendo fazer a transmissão com os XBEE)
- 1 sensorshield
- 4 speed controls (ESC) 18A
- 4 motores brushless EMAX 2812 (e os conectores banana)
- Comprei também um controle de PS2 para controlar o aeromodelo e um wii nunchuck que já tinha para utilizar como o gyro (estabilizador) que fica no próprio aeromodelo.
Já consegui ler os controles de PS2 e WII mas no caso dos ESCs que controlam os motores eu não estou conseguindo fazer que todos funcionem juntos.
O único código que funcionou foi o de um post no fórum do arduino do exterior, que não consegui postar o link por que o fórum não permitiu (pois é meu primeiro post).
Eu até consigo ligar vários motores, mas eles não iniciam ao mesmo tempo e apenas um deles (geralmente o que eu seto a velocidade por último) continua funcionando "eternamente" de acordo com o while.
Segue o código testando 2 motores:
#include <Servo.h>
Servo myservo1;
Servo myservo2;
Servo myservo3;
Servo myservo4;
int angle=0;
int speed;
int pos;
void setSpeed1(int speed) {
angle = map(speed, 0, 100, 0, 120);
myservo1.write(angle);
}
void setSpeed2(int speed) {
angle = map(speed, 0, 100, 0, 120);
myservo2.write(angle);
}
void setSpeed3(int speed) {
angle = map(speed, 0, 100, 0, 120);
myservo3.write(angle);
}
void setSpeed4(int speed) {
angle = map(speed, 0, 100, 0, 120);
myservo4.write(angle);
}
void setup() {
myservo1.attach(

;
myservo2.attach(9);
myservo3.attach(10);
myservo4.attach(11);
setSpeed1(0);
setSpeed2(0);
setSpeed3(0);
setSpeed4(0);
delay(1000); //obrigatorio para iniciar os ESCs
}
void loop() {
for (speed=0; speed<=100; speed+=5) {
setSpeed2(speed);
setSpeed4(speed);
delay(1000);
while(speed==100) {
setSpeed2(speed);
setSpeed4(speed);
delay(1000);
}
}
}
Com esse código atualmente todos os ESCs iniciam normalmente, em seguida o motor 4 começa a funcionar, alguns poucos segundos depois o motor 2 também inicia mas para logo após a aceleração. Com esse código eu imaginei que ambos iriam operar na velocidade máxima juntos, mas não ocorre. Apenas o motor 4 fica em velocidade máxima.
Será que alguém consegue me ajudar nesse problemão? Obrigado!

Obs.: Como sou novo no fórum vou ver se consigo postar uma foto depois pra vocês olharem.