Autor Tema: Problema con los microswitches  (Leído 1737 veces)

Luisen123

  • Newbie
  • *
  • Mensajes: 1
    • Ver Perfil
Problema con los microswitches
« : mayo 22, 2014, 02:56:51 am »
Estoy tratando de resolver el siguiente problema:

Muestra en el LCD la temperatura leida del sensor DS18B20 segun la siguiente asignacion:
- Si SW1=ON, muestra la temperatura en grados centigrados.
- Si SW1=OFF, muestra la temperatura en grados Farenheit F = ( 1.8*C + 32 )
- Si  el  usuario  modifica  la  posicion  de  SW1,  se  modifica  automaticamente  la  temperatura
mostrada.
- Ejemplo de formato en las 16 celdas del LCD: C=Centigrados, F=Farenheit.
T  E  M  P  =        2  6  .  8    C

Mi código realiza la conversión de manera adecuada, sin embargo, al cambiar a Farenheit y querer regresar a grados Centigrados, no lo hace. Alguien tiene una idea de lo que pueda estar pasando?

Dejo mi código.

Código: [Seleccionar]
void main()
{
init_bolt();
InitLCD();
ClearScreen();

while(1){
i = microsw();
ClearScreen();
GotoXY(0,0);
PrintString(temp);

temperatura=ds1820_read();
entero=temperatura;
decimal=(temperatura-entero)*10;

if(i == 1){
sprintf(array,"%d.%d",entero, decimal);
}else if(i == 0){
enterof = ( 1.8*entero + 32 );
decimalf = ( 1.8*decimal + 32 );
sprintf(array,"%d.%d",enterof, decimalf);
}

GotoXY(1,0);
PrintString(array);
if(i == 0){
PutLCD('F');
}else if(i == 1){
PutLCD('C');
}
delay_ms(1000);
}
}

AbrahamOD

  • Newbie
  • *
  • Mensajes: 1
    • Ver Perfil
Re:Problema con los microswitches
« Respuesta #1 : mayo 22, 2014, 03:01:03 am »
Puedes probar con este código, espero te sirva
#pragma code

float temperatura;
int entero, decimal,z;
char temp[]="Temper=";
char array[5];
void main()
{
   init_bolt();
   InitLCD();
   while(1)
   {
      ClearScreen();
      PrintString(temp);
      temperatura=ds1820_read();
      z = SW4;
      if (z)
      {
         ClearScreen();
         entero=temperatura;
         decimal=(temperatura-entero)*10;
         sprintf(array,"%d.%d",entero, decimal);
         GotoXY(0,0);
         PrintString(array);
         GotoXY(1,0);
         PutLCD('o');
         PutLCD('C');
            
      }
      else
      {
         ClearScreen();
         temperatura = ((temperatura * (9/5)) + 32);
         entero=temperatura;
         decimal=(temperatura-entero)*10;
         sprintf(array,"%d.%d",entero, decimal);
         GotoXY(0,0);
         PrintString(array);   
         GotoXY(1,0);
         PutLCD('F');
      }
      delay_ms(1000);   
   }
}