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 | ||
| ||
> > > 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) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum