Pages: [1]   Go Down
Author Topic: Comportamiento Raro, Programa? o Hardware?  (Read 1224 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 7
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
/*
  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
« Last Edit: January 18, 2011, 03:41:29 pm by X-ELE » Logged

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

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

0
Offline Offline
Newbie
*
Karma: 0
Posts: 7
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

el paso q no funciona correctamente es
Code:
     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...
Logged

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

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

Pages: [1]   Go Up
Jump to: