Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > 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! > > <basic>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</basic> > > > Und dann hier noch eine Variante bei der die Taste auch richtig funktionieren (entprellt und man kann auch lange drücken) > > <basic>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</basic> > > Tastenabfrage sollte aber in größeren Programmen im 100Hz Interrupt laufen. > > Grüße Daneie > >