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 HPausL - 17.04.2016 13:28)
Als Antwort auf Re: If Anweisung reagiert falsch von Daneie - 17.04.2016 13:12
Ich nutze:
C-Control Pro AVR32
> > > 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
> >
> >
Hallo Daneie,
erst mal vielen Dank für deine Antwort.

Zweitens: In der Menüsteuerung müssen Sollwerte
ink/dekrementiert werden, deshalb negative Zahlen.

Drittens: "Das mit dem Minus is halt so" Du hast also auch keine genaue Erklärung?

Und Viertens: Für Romane habe ich keine Fantasie. Für MC-Programme schon ;-)

Grü�e, HPausL



    Antwort schreiben


Antworten:

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)