Go Down

Topic: Comportamiento Raro, Programa? o Hardware? (Read 1 time) previous topic - next topic

X-ELE

Jan 18, 2011, 09:37 pm Last Edit: Jan 18, 2011, 09:41 pm by X-ELE Reason: 1
buenas les comento mi problemilla...

tengo armado al Arduino deminueve un controlado de un jostick de una Xbox360, que necesito que ejecute unos comando, haga una temporizacion y vuelva a ejecutar unos comandos...

Si divido el programas en partes seria basicamente
Inicia, temporiza, termina,

Code: [Select]

/*
 Contol de xbox360
 Por xeleneo.com.ar
*/
// set pin numbers:
const int Coin = 2;    
const int Time1 = 10;
const int Time2 = 11;
const int ledPin =  13;      
const int BotonA =  6;      
const int Xbox =  5;    
const int BotonUp =  3;    
const int Trafo =  4;    


// variables will change:
int CoinState = 0;         // variable for reading the pushbutton status
int Contador = 0;          //
boolean run = false;
int Time1State = 0;
int Time2State = 0;

void setup() {
 Serial.begin(9600);  
 pinMode(ledPin, OUTPUT);    
 pinMode(BotonA, OUTPUT);
 pinMode(Xbox, OUTPUT);
 pinMode(BotonUp, OUTPUT);  
 pinMode(Trafo, OUTPUT);
 pinMode(Coin, INPUT);    
 pinMode(Time1, INPUT);
 pinMode(Time2, INPUT);    
}


void loop(){
 CoinState = digitalRead(Coin); // Leer estado del Coin
 Time1State = digitalRead(Time1);
 Time2State = digitalRead(Time2);
 
 if (CoinState == HIGH) {    
     if (Time1State == HIGH){
       Contador = Contador + 300;    
       Serial.print("Time1 \n");
     } else{
       if (Time2State == HIGH){
         Contador = Contador + 400;
         Serial.print("Time2 \n");
       } else{
         Contador = Contador + 500;
         Serial.print("Time3 \n");  
       }// end Time3
   }

   //Arriba();
   
   digitalWrite(ledPin, HIGH);    
   digitalWrite(BotonA, HIGH);
   delay(50);
   digitalWrite(BotonA, LOW);
   digitalWrite(Trafo, HIGH);
   Serial.print("Coin \n");
   run = true;
 }

 if (run == true) {  
 

   if (Contador > 1 ){
      Contador = Contador -- ;
     Serial.print("\n Contador: ");
     Serial.print(Contador);
     delay (100);
   
   }  else {
     Serial.print("\nSecuancia apagado \n");
     run = false;
     
     SecuenciaApagado();
           
     delay(100);
     Serial.print("\nApaga Trafo \n");
     digitalWrite(Trafo, LOW);
     digitalWrite(ledPin, LOW);              
         
           
   } // Fin contador
 
 } //Fin del run
 
}//Fin del LOOP

int  SecuenciaApagado(){
 
 
     digitalWrite(ledPin, LOW);
     digitalWrite(Xbox, HIGH);
     delay(50);
     digitalWrite(Xbox, LOW);      
     delay(1000);
     digitalWrite(BotonA, HIGH);
     delay(50);
     digitalWrite(BotonA, LOW);
     delay(1000);
     
     Arriba();
     
     delay(1000);
     digitalWrite(BotonA, HIGH);
     delay(500);
     digitalWrite(BotonA, LOW);
     
}

int Arriba(){
     digitalWrite(BotonUp, HIGH);
     delay(50);
     digitalWrite(BotonUp, LOW);


}



Pasa que cuando corre el prog en el arduino, la funcion de Ariba() no da respuesta, originalmente estaba en la misma funcion de SecuenciaApagado() y tampoco respondia en ese punto,

Los circuitos por separado funcionan bien, de hecho si saco la funcion y la pongo al principio del prog funciona correctamente, pero no donde la necesito.

Alguna idea? :o

chiva

Le acabo de hacer una lectura rápida y no sé si tendrá mucho que ver pero SecuenciaApagado y Arriba no devuelven nada, cuando los has declarado como int.
Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

X-ELE

si, en realidad la funcion... funciona...

el paso q no funciona correctamente es
Code: [Select]

     digitalWrite(BotonUp, HIGH);
     delay(50);
     digitalWrite(BotonUp, LOW);


el comando anterior funciona, "Xbox"

si lo pongo al inicio, a este bloque.. tembien funciona...

es muy raro...

chiva

Mírate como se usan las funciones if y else, ya que las dos que tienes puestas están mal (o eso creo interpretar)
http://www.arduino.cc/en/Reference/Else

Un saludo
Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy