Avatar billede mortensvendsen Nybegynder
09. december 2006 - 09:51 Der er 8 kommentarer

sammenligne 2 tal

Jeg er ved at lave en opgave, men har et lille problem

Jeg skal sammenligne 2 tal, det går også fint, men hvis det ene tal er 3 cifre og det andet er 2 cifre, så sammenlignes kun de 2 sidste cifre. Her er min kode

char min_hum=40;
char max_hum=80;
char string2[4];

    itoa(humidity, string2);
    strcatf(string2,"%");
         
    if(humidity<min_hum)    alarm |= 0b00000100;     
    else                    alarm &= 0b11111011;
   
    if(humidity>max_hum)    alarm |= 0b00001000;
    else                    alarm &= 0b11110111;

hvis humidity er over 100, så går den ind i den øverste if løkke.

Hvordan løser jeg dette problem???

Det haste lidt, da det er en opgave jeg skal aflevere.
Avatar billede cpufan Juniormester
09. december 2006 - 10:37 #1
du skal vel arbejde med integer i stedet for char,
så den sammenligner tal...
Avatar billede mortensvendsen Nybegynder
09. december 2006 - 10:46 #2
Det skal siges at det er et µ-controller projekt. kodet i C.
Det gør igen forskel at lave min_hum, max_hum og humidity om til integer.

Problemet fortsætter som uændret
Avatar billede arne_v Ekspert
09. december 2006 - 15:07 #3
jeg er ikke sikker på at jeg forstår

hvis det er når humidity er over 127 at det går galt så måske

unsigned char min_hum=40;
unsigned char max_hum=80;

(omend int også burde løse det)
Avatar billede mortensvendsen Nybegynder
09. december 2006 - 15:21 #4
Det er ikke når den kommer til 127, det er lige så snart den skifter fra 99 til 100.
DVS.
i intervallet 0-39 og igen 99-127 (humidity bliver shiftet en, så dette er maks) kommer jeg i denne løkke:
    if(humidity<min_hum)    alarm |= 0b00000100;     
    else                    alarm &= 0b11111011;
   
i intervallet 80-99 kommer jeg i intervallet:   
    if(humidity>max_hum)    alarm |= 0b00001000;
    else                    alarm &= 0b11110111;

Det kunne jeg også godt tænke mig at komme i intervallet 100-127

jeg har prøvet at ændre alle variablerne til int, det løser ikke problemet
Avatar billede arne_v Ekspert
10. december 2006 - 00:55 #5
pas - jeg forstår det ikke
Avatar billede karas Nybegynder
10. december 2006 - 09:52 #6
Med mindre enten compileren eller CPUen laver en fejl, så har du en fejl et andet sted i din kode. Jeg ved godt hvilken at de to forklaringer jeg satser på;)

Prøv at gøre min_hum og max_hum const. Hvis koden bagefter stadig kan kompilere, så er humidity ikke 100 når du tror den er 100. Har du en mulighed for at udskrive dens værdi?

Du skriver at humidity bliver shiften en plads. Prøv at inkludere noget af den kode, som skriver og modificerer humidity, i din næste kommentar.
Avatar billede mortensvendsen Nybegynder
10. december 2006 - 15:16 #7
Jeg er ret sikker på at du har ret i at det ikke er CPU eller compiler der laver fejl;-)
Jeg koder i CodeVisionAVR, jeg kan ikke lave dem const. Jeg har lavet dem static, så kan de kun ses i denne funktion, men det hjælper ikke.
Jeg udskriver værdierne på et display. så jeg er ret sikker på at den er over 100.


jeg har indsat de to funktioner, hvor jeg genere humidity. hum_get_hum henter en en værdi på en analog indgang. con_unpack_hum sammenligner med min max og min værdier.

void hum_get_hum()
{
char humidity;
char humi[2];   
    ADCSRA.6=1;        //start conversion
   
    while(ADCSRA.6==1)  //wait to conversin ended
    {
    };
   
    humidity=ADCH;
    humidity=(humidity>>1);
   
    humi[0]=humidity;
    if(write_eeprom)
    { 
        humi[1]='\0';
        savedata(humi);
    }
    con_unpack_hum(humidity);   
}

void con_unpack_hum(char humidity)
{
static char min_hum=40;
static char max_hum=80;
char string2[4];

    itoa(humidity, string2);
    strcatf(string2,"%");
         
    if(humidity<min_hum)    alarm |= 0b00000100;     
    else                    alarm &= 0b11111011;
   
    if(humidity>max_hum)    alarm |= 0b00001000;
    else                    alarm &= 0b11110111;
   
 
    if(write_uart)
    {
        strcatf(string2,";");
        SendStringSRAM(string2);
    }
    else
    {
        LCDGotoXY(12,2);
        LCDDispStrRAM(string2);
         
    };
}
Avatar billede karas Nybegynder
10. december 2006 - 16:38 #8
Det blev jeg desværre ikke meget klogere af. Jeg tror ikke jeg kan hjælpe dig. Held og lykke
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester