Buenas a todos!! , necesito un poquitin de ayuda porque estoy un poco perdido, hace poco que empezé en esto de arduino y estoy todavia aprendiendo pero voy haciendo varias cosillas. Os explico que estoy haciendo y cual es mi problema a ver como me podeis orientar XD.
Tengo una placa Arduino duemilanove conectada por serie a una fonera y tanto recibo datos como los envio remotamente, dentro de la fonera he includo una pequeña pagina web que me ejecuta cgi vamos los comandos que necesito para mover un motor dc y un servo de un coche ( servo para la direccion y motor para el movimiento adelante y atras) , cada uno de los botones me envia un comando a arduino que arduino interpreta como adelante, atras , derecha , izquierda, hasta ahi todo bien, para manejar tanto el servo como el motor utilizo una placa shield que me he diseñado yo con un l298 ( puente H), lo tengo todo funcionando, pero mi problema viene a la hora de ejecutar 2 acciones a la vez, me explico si pulso adelante este se mueve adelante pero si pulso izquierda se para y mueve las ruedas a la izquierda entonces no consigo girar me tiene loco os pego el codigo que estoy usando para si me podeis ayudar.
#include <Servo.h>
int value = 100; // VELOCIDAD MOTOR 0 / 255
Servo direccion; // DEFINO EL SERVO COMO DIRECCION
const int button_c = 16; // boton golpeo
int buttonc_state = 0; // estado variable golpe
const int button_izq = 15;
int buttonizq_state = 0;
const int button_der = 14;
int buttonder_state = 0;
int cmdByte;
int dataByte1, dataByte2, pin, valor,i;
int cmdByted;
int dataByte1d, dataByte2d, direc;
int codigo;
int micro = 9; // MICROPULSACIONES DE DESPLAZAMIENTO
int anterior = 0;
void setup() {
direccion.attach(3); // EL SERVO ESTA EN EL PIN 6
pinMode(4,OUTPUT); // DEFINO EL PIN 4 COMO SALIDA
pinMode(5,OUTPUT); // DEFINO EL PIN 5 COMO SALIDA
pinMode(7,OUTPUT); // DEFINO EL PIN 6 COMO SALIDA
pinMode(button_c, INPUT);
pinMode(button_izq, INPUT);
pinMode(button_der, INPUT);
Serial.begin(9600);
}
void adelante() { analogWrite(5,value); digitalWrite(4,LOW); digitalWrite(7,HIGH); }
void paro() { digitalWrite(5,0); digitalWrite(4,LOW); digitalWrite(7,HIGH); }
void atras() { analogWrite(5,value); digitalWrite(4,HIGH); digitalWrite(7,LOW); }
void izquierda() {direccion.write(60); }
void derecha() {direccion.write(120); }
void centro() {direccion.write(90); }
void adl_izq() { adelante(); izquierda(); }
void adl_der() { adelante(); derecha(); }
void atr_izq() { atras(); izquierda(); }
void atr_der() { atras(); derecha(); }
void adl_microstep() { adelante(); delay(micro); paro(); adelante(); delay(micro); paro(); }
void atr_microstep() { atras(); delay(micro); paro(); atras(); delay(micro); paro(); }
void atr_variando() { for ( int i = 0 ; i <= 127 ; i++ ) {analogWrite(5,i); digitalWrite(4,HIGH); digitalWrite(7,LOW); delay(15);} }
void adl_variando() { for ( int i = 0 ; i <= 127 ; i++ ) { analogWrite(5,i); digitalWrite(4,LOW); digitalWrite(7,HIGH); delay(15);} }
void loop () {
inicio:
direc=0;
if (Serial.available()) {
cmdByte=Serial.read();
if (cmdByte==72) {
while(! Serial.available()){}
dataByte1=Serial.read();
while(! Serial.available()){}
dataByte2=Serial.read();
direc=(dataByte2-48); //*10+dataByte2-48;
valor=(dataByte1-48);
}
}
if (valor==1) {do { centro(); adl_microstep(); delay(100); goto inicio;} while (valor==1);}
if (direc==1) {do { derecha(); delay (1000); centro(); goto inicio;} while (direc==1);}
if (direc==2) {do { izquierda(); delay (1000); centro(); goto inicio;} while (direc==2);}
if (valor==0) {do { paro(); delay (100); digitalWrite(13,HIGH); goto inicio;} while (valor==0);}
if (valor==2) {do { centro(); atr_microstep(); delay(100); goto inicio;} while (valor==2);}
}
GRACIAS POR AGUANTAR EL TOSTON