Autor Tema: problema con programa  (Leído 1248 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado safiro_pic

  • PIC10
  • *
  • Mensajes: 16
problema con programa
« en: 13 de Mayo de 2006, 20:05:32 »
Vuelvo a recurrir a ustedes amigos espero me ayuden estube revisando los
 programas del foro hay uno que hace la combinacion de
el coche fantastico y el juego de luces, yo queria hacer una variacion
que seria lo siguiente tener dos pulsadores para uno y otro subprograma,
 de inicio que este todo apagado
primero si presiono el pulsador "PA0" que funcione el subprograma coche fantastico
continuadamente, ahora si presiono el otro pulsador "PA1" que funcione el
juego de luces, yole coloque una sentencia if pero no me funciona simulando en proteus
de inicio el programa corre, primero uno luego el otro intercalando cosa que no
queria asi donde esta mi problema????

luego este otro que representa el signo de admiracion "!" en la parte de if ???
porque lo borre y el programa corre pero no  simula bien si no te da otra cosa





#include <16f84a.h> //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT //ordenes para el programador
#use delay (clock=4000000) //Fosc=4Mhz,define funcion delay
#use standard_io(B)
#use standard_io(A) ///FUNCION COCHE FANTASTICO


void kit()
{
int i,cont; //variables definidas

cont=1; //inicializar...
for(i=1;i<8;i++){ //led's on derecha
output_b(cont); //ilumino led correspondiente
delay_ms(100);
cont=cont*2;
}
for(i=1;i<8;i++){
output_b(cont); //ilumino led correspondiente
delay_ms(100);
cont=cont/2;
}
}



///FUNCION JUEGO_LUCES
void juego_luces()
{
signed char i; //variable indice
int leds[4]={0b10000001,0b01000010,0b00100100,0b00011000}; //led's

for(i=0;i<4;i++){ //led's on fuera-dentro
output_b(leds[ i ]); //ilumino led's correspondientes
delay_ms(100);
}
for(i=3;i>-1;i--){ //led's on dentro-fuera
output_b(leds[ i ]); //ilumino led's correspondientes
delay_ms(100);
}
}


 

void main(void)
{
set_tris_a(0xFF); //porta como entrada
set_tris_b(0x00); //portb como salida

while(1){ //bucle...
if(!input(PIN_A0)) //¿switch cerrado?
kit(); // ->ejecuta coche fantastico(kit)
if(!input(PIN_A1))
juego_luces();  //->ejecuta juego luces
}
}

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
Re: problema con programa
« Respuesta #1 en: 13 de Mayo de 2006, 23:29:40 »
Hola safiro_pic!

En primer lugar decirte que:

if(!input(PIN_A0))

es lo mismo que:

if(input(PIN_A0) == 0)




de la misma forma que:

if(input(PIN_A0))

es lo mismo que:

if(input(PIN_A0) == 1)

Joder... parece un trabalenguas jeje. Si me equivoco que alguien me corrija.

Es normal que tu programa haga exactamente lo que dices. Si te fijas si se cumple la 1ª condición te ejecutará una cosa. Cuando acabe con eso el programa mirará la 2ª condición. Como también se cumple entonces ejecutará la otra, y así hasta el infinito y mas allá.

Yo lo haría con un solo pulsador (que están muy caros jeje).

Con suerte esto supongo que te puede funcionar:

Código: [Seleccionar]
int programa=1;

while(1)
{

if(input(PIN_A0) == 1)
{
delay_ms(20);

if(programa == 1)
{
programa=2;
}
else
{
programa=1;
}
}

if(programa==1)
{
kit();
}
else
{
juego_luces();
}
}


Un saludo desde Alicante.