Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: If Anweisung reagiert falsch Kategorie: Programmierung Basic (von Daneie - 17.04.2016 13:12)
Als Antwort auf Re: If Anweisung reagiert falsch von Daneie - 17.04.2016 13:03

> > Hallo zusammen,
> > eigentlich wollte ich nur eine Menü Steuerung schreiben die,
> > wenn sie am oberen Ende(OGR) angekommen ist von neuen am unteren Ende(UGR) neu startet.
> > Ebenso anders herum.
> >
> > Mit positiven Zahlen ist das kein Problem.
> > Mit negativen schon. Wieso? Ich hab da keine Erklärung.
> > Jetzt kommt ihr ins Spiel.
> > Kann mich bitte jemand aufklären was ich falsch mache.
> >
> > In der Funktion Sub MINUS() habe ich die UGR(Untergrenze) nochmals an die
> > lokale Variable u (Integer) übergeben.
> > Wenn ich nun in der folgenden IF Anweisung u anstatt UGR benütze, funktioniert es.
> > Wird an dieser Stelle aber UGR anstatt u programmiert, reagiert die If Anweisung falsch
> >
> > Kurios ist, wenn ich in der Funktion Sub Plus() durchzähle und über 2 komme,
> > wird die OGR aktiv, setzt y auf UGR (-2) und inkrementier munter weiter.
> > Hier scheint es zu funktionieren, und es ist kein nochmaliges umladen der
> > �bergabe Variable OGR nach z.B. o nötig. hmmmmm
> >
> > WIIIEEESOOO?????
> >
> > Hier mein Code: (keine Leerzeilen etc. ist nur ein Test)
> > Board: C-Control Pro AVR32
> >
> > Dim ERG As Integer
> > Sub main()
> >     Port_Attribute(PORT_T5, PORT_ATTR_INPUT)
> >     Port_Attribute(PORT_T4, PORT_ATTR_INPUT)
> >     Port_Attribute(PORT_LED1, PORT_ATTR_OUTPUT Or PORT_ATTR_INIT_LOW)
> >     Port_Attribute(PORT_LED2, PORT_ATTR_OUTPUT Or PORT_ATTR_INIT_LOW)
> >     Do While True
> >         If Port_ReadBit(PORT_T5) = False Then
> >             ERG = Plus(2,-2,ERG)
> >         End If
> >         Port_WriteBit(PORT_LED1, PORT_OFF)
> >         If Port_ReadBit(PORT_T4) = False Then
> >             ERG = Minus(2,-2,ERG)
> >         End If
> >         Port_WriteBit(PORT_LED2, PORT_OFF)
> >         Msg_WriteInt(ERG)
> >         Msg_WriteChar(13)
> >         AbsDelay(100)
> >     End While
> > End Sub
> > Sub Plus(OGR As Integer, UGR As Integer, x As Integer) As Integer
> >     Dim y As Integer
> >     y = x + 1
> >     If y > OGR Then
> >         y = UGR
> >     Else ' nicht unbedingt nötig
> >         y = y ' dto.
> >     End If
> >     Port_WriteBit(PORT_LED1, PORT_ON) ' nur zum prüfen ob ich in die richtige Funktion springe
> >     AbsDelay(100)
> >     Return y
> > End Sub
> > Sub Minus(OGR As Integer, UGR As Integer, x As Integer) As Integer
> >     Dim y As Integer
> >     Dim u As Integer
> >     u = UGR ' hier wird UGR "NOCHMALS" an u übergeben
> >     y = x - 1
> >     If y < u Then ' Mit UGR reagiert die If Anweisung falsch. Mit u funktioniert es. Wieso???
> >         y = OGR
> >     Else ' nicht unbedingt nötig
> >         y = y ' dto.
> >     End If
> >     Port_WriteBit(PORT_LED2, PORT_ON) ' nur zum prüfen ob ich in die richtige Funktion springe
> >     AbsDelay(100)
> >     Return y
> > End Sub
> >
> > Vielen Dank schon mal im Voraus, ein verzweifelter HPausL ;-))
>
> Hallo HPausL,
>
> das mit dem Minus ist so. Hat mich auch schon geärgert.
> Ich verstehe auch nicht warum du bei einer Menüsteuerung durch Null durch musst.
>
> Aber du solltest lieber Romane schreiben, bei so einen Talent was in die Länge zu ziehen.
>
> Das macht das gleiche wie Deines!
>
> Dim ERG As Integer
> Sub main()
>     Dim X As Integer
>     Port_Attribute(PORT_T5, PORT_ATTR_INPUT)
>     Port_Attribute(PORT_T4, PORT_ATTR_INPUT)
>     Do While True
>         If Port_ReadBit(PORT_T5) = False Then
>             ERG++
>             If ERG > 2 Then
>                ERG = -2
>             End If
>         End If
>         If Port_ReadBit(PORT_T4) = False Then
>             ERG--
>             X = -2
>             If ERG < X Then
>                ERG = 2
>             End If
>         End If
>         Msg_WriteInt(ERG)
>         Msg_WriteChar(13)
>         AbsDelay(100)
>     End While
> End Sub

>
>
> Und dann hier noch eine Variante bei der die Taste auch richtig funktionieren (entprellt und man kann auch lange drücken)
>
> Dim ERG, vTZ4, vTZ5 As Integer
> Sub main()
>     Dim X As Integer
>     Port_Attribute(PORT_T5, PORT_ATTR_INPUT)
>     Port_Attribute(PORT_T4, PORT_ATTR_INPUT)
>     Do While True
>       If Port_ReadBit(PORT_T5)= 0 Then 'beim Tastendruck wird der Port 0
>          vTZ5 ++                       'der zähler wird um 1 erhöht
>       End If
>       If vTZ5 = 5 Then                 'wenn die Taste 5 Durchläufe gedrückt war
>          ERG++                         'Tastenbefehle
>          If ERG > 2 Then
>             ERG = -2
>          End If
>         vTZ5 = 6
>       End If
>       If Port_ReadBit(PORT_T5)= 1 And vTZ5 > 5 Then 'wurde die Taste wieder losgelassen
>           vTZ5 = 0   'wird die Variable für den nächten Tastendruck auf null gesetzt
>       End If
>       If Port_ReadBit(PORT_T4)= 0 Then
>          vTZ4 ++
>       End If
>       If vTZ4 = 5 Then
>          ERG--
>          X = -2
>          If ERG < X Then
>             ERG = 2
>          End If
>          vTZ4 = 6
>       End If
>       If Port_ReadBit(PORT_T4)= 1 And vTZ4 > 5 Then
>           vTZ4 = 0
>       End If
>       Msg_WriteInt(ERG)
>       Msg_WriteChar(13)
>       AbsDelay(10)
>     End While
> End Sub

>
> Tastenabfrage sollte aber in grö�eren Programmen im 100Hz Interrupt laufen.
>
> Grü�e Daneie
>
>


    Antwort schreiben


Antworten:

Re: If Anweisung reagiert falsch (von HPausL - 17.04.2016 13:28)
    Re: If Anweisung reagiert falsch (von Torsten - 17.04.2016 16:01)
        Re: If Anweisung reagiert falsch (von PeterS - 20.04.2016 19:26)
            Re: If Anweisung reagiert falsch (von Danei - 20.04.2016 21:04)
                Re: If Anweisung reagiert falsch (von UlliS - 2.05.2016 11:53)
        Re: If Anweisung reagiert falsch (von HPausL - 18.04.2016 15:26)