Re: If Anweisung reagiert falsch Kategorie: Programmierung Basic (von Daneie - 17.04.2016 13:03) | |
Als Antwort auf Re: If Anweisung reagiert falsch von HPausL - 15.04.2016 21:25
| |
> 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 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 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 Daneie - 17.04.2016 13:12) 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) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum