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 > > > 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</basic> > > > > > > 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 >