logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmaga8 [bacsom] Problem z instrukcja if..then

pawel8704 25 Lis 2009 18:35 1555 17
  • #1 7307914
    pawel8704
    Poziom 10  
    Witam mam następujący problem.
    Napisałem program w bascom pod Atmegę8 termometru 4-punktowego z mozliwościa włączenie alarmu, dla zadanych wartości z klawiszy.
    3 zadane temperatury zmieniają sie co 1 więc tu nie ma problemu.
    Natomiast mam problem z porównaniem w instrukcji If temperatury z jednego czujnika zainicjalizowanej jako Integer z temperatura zadaną jak Single.

    Bardzo prosze o pomoc w rozwiazaniu.
    .
    .
    .
    Dim I2 As Integer
    Dim Liczba0 As Single
    .
    .
    Locate 1 , 1
    Lcd "Tem. alarmu " ; Chr(2)
    Locate 2 , 1
    Lcd "Tem. " ; Chr(2) ; "=" ; Liczba0 ; Chr(0)
    Do
    If S3 = 0 Then
    Waitms 25
    If S3 = 0 Then
    Liczba0 = Liczba0 + 0.1
    If Liczba0 => 85 Then
    Liczba0 = 75
    End If
    End If
    End If
    If S4 = 0 Then
    Waitms 25
    If S4 = 0 Then
    Liczba0 = Liczba0 - 0.1
    If Liczba0 <= 75 Then
    Liczba0 = 85
    End If
    End If
    End If
    Ss = Fusing(liczba0 , "#.#")
    
    Cls
    Locate 1 , 1
    Lcd "Tem. alarmu " ; Chr(2)
    Locate 2 , 1
    Lcd "Tem. " ; Chr(2) ; "=" ; Ss ; Chr(0)
    Locate 2 , 15
    Lcd "OK"
    Debounce S1 , 0 , Ustawianie2
    Loop
    
    If Liczba0 <= I2 And Liczba0 <> 0 Then
    Set Portd.4
    End If
  • #2 7308107
    Konto nie istnieje
    Poziom 1  
  • #3 7308132
    pawel8704
    Poziom 10  
    to ten w drugiej lini od dołu. to jest tylko fragment kodu
  • #4 7308141
    Konto nie istnieje
    Poziom 1  
  • #5 7308155
    pawel8704
    Poziom 10  
    Nie kompiluje:
    wyrzuca taki błąd:
    Error 256 single expected
  • #6 7308225
    Konto nie istnieje
    Poziom 1  
  • #7 7308494
    pawel8704
    Poziom 10  
    teraz działa, ale jest inny problem
    Zmienna I2 jest zaokraglana do jedności i nic mi nie daja dzięsiate części stopnia chodź jest wyświetlana jedno miejsce po przecinku, tak wyglada wyświetlanie:
    I2 = I2 * 10
       I2 = I2 / 16
       If I2 > 0 Then
       Ss = Str(i2)
       Ss = Format(ss , "  0.0")
       Locate 1 , 9
       Lcd Chr(2) ; Ss ; Chr(0) ;
       Else
       Ss = Str(i2)
       Ss = Format(ss , " 0.0")
       Locate 1 , 9
       Lcd Chr(2) ; Ss ; Chr(0)
       End If
  • #8 7308674
    Konto nie istnieje
    Poziom 1  
  • #9 7308686
    pawel8704
    Poziom 10  
    Dlaczego tak sie dzieje ze I2 jest zaokraglane do jedności czy jest na to jakis sposob aby pobrać taka daną I2 ktora jest na wyświetlaczy czyli z jednym miejscem po przecinku?
  • #10 7308732
    Konto nie istnieje
    Poziom 1  
  • #11 7308789
    pawel8704
    Poziom 10  
    tak zawsze ma wartość 0, nawet gdy np przypiszę I2=78.8 to po wyświetleniu I2_single=I2
    Lcd i2_single
    otrzymuje wartość 79.0
  • Pomocny post
    #12 7308887
    Konto nie istnieje
    Poziom 1  
  • #13 7309068
    pawel8704
    Poziom 10  
    No właśnie wiem, a jest jakis sposób na "wydobycie" wartości ktora jest wyswietlana na wyswietlaczu? tzn tej z wartościa po przecinku.
  • #14 7309356
    Konto nie istnieje
    Poziom 1  
  • #15 7309496
    pawel8704
    Poziom 10  
    Tak wyświetla wartośc temperatury I2 z dokładnościa do jednego miejsca po przecinku.
  • #16 7310053
    przemo.t
    Poziom 27  
    pawel8704 napisał:
    Tak wyświetla wartośc temperatury I2 z dokładnościa do jednego miejsca po przecinku.


    Rozumiem że po przecinku jest zawsze 0?
    Sprawdź czy przed wyświetleniem nie masz nigdzie uzytej funkcji format lub fussing dla zmiennej I2.
  • #17 7310141
    pawel8704
    Poziom 10  
    Tak mam użytą funkcję format przed wyświetlaniem. Jak to moge zmienić aby wydobyc to co jest wyświetlane?
  • #18 7310305
    Konto nie istnieje
    Poziom 1  
REKLAMA