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