hallo alle zusammen, ich habe folgendes problem: ich habe einen counter, der von 1-16 durchzählt. jetzt möchte ich, wenn man einen taster drückt das der jeweilige wert des counters abgelesen wird und in einer variable gespeichert wird. kann mir einer von euch dabei helfen? hier mein bisheriger code: Config Pinb.1 = Input Eingang Alias Pinb.1 Dim I As Integer Dim A As Byte Dim B As Byte Do A = Rnd(16) For I = 1 To 16 Rotate A , Left Waitms 200 Next I Loop irgendetwas funktioniert nicht danke schon mal im voraus für die hilfe! lg hauke
> jetzt möchte ich, wenn man einen taster drückt > irgendetwas funktioniert nicht Ähm. Ich würde mal vermuten, dass du dazu auch irgendwo abfragen musst, ob die Taste gedrückt wurde. Irgendwie vermisse ich in deinem Programm jegliche Auswertung des Eingangs.
ja das stimmt aber das ist ja grade das problem. ich habe von bascom noch nicht so viel ahnung. ich habe es bisher hiermit probiert: If Eingang = 1 Then wert = A End If aber wie schon gesagt das funktioniert nich wirklich. ich kann ja einfach mal den ganzen code posten: $regfile = "m8def.dat" $crystal = 12000000 $baud = 9600 Config Pinb.1 = Input Eingang Alias Pinb.1 Dim Wert As Byte Dim I As Integer Dim A As Byte Dim B As Byte Do A = Rnd(17) For I = 1 To 16 Rotate A , Left Waitms 200 Next I If Eingang = 1 Then Modus = A End If Loop kannst du mir sagen was ich falsch gemacht habe?? lg hauke
> aber wie schon gesagt das funktioniert nich wirklich. Definiere: "funktioniert nicht wirklich" Was funktioniert denn daran nicht? Was erwartest du und was passiert statt dessen? > das der jeweilige wert des counters abgelesen wird Dein Counter dürfte wohl das I sein. Oder doch das A. Aber warum rotierst du das A immer um 1 nach links? Aber warum fragst du den Eingang erst dann ab, wenn die for schleife einmal bis 16 durchgezählt hat. Ich denke du willst den Counter bei irgendeinem Zählerstand erwischen und nicht erst dann, wenn er 16 erreicht hat. Im übrigen wird das wahrscheinlich nicht funktionieren, weil das ganze viel zu schnell abläuft. Du willst den Zählerstand einfrieren, wenn der Taster gedrückt wird und nicht solange er gedrückt ist. Vom Port kriegst du aber nur die Information ob der Taster gedrückt ist. Das ist aber relativ einfach zu beheben. WEnn der Taster vorher nicht gedrückt war und jetzt plötzlich gedrückt ist, dann ist er in der Zwischenzeit gedrückt worden. Du brauchst also noch eine Variable, die den Zustand ses Tasters im letzten Durchlauf festhält. Unterscheidet sich dieser Zustand vom jetzigen Zustand, dann war Action an der Taste Vorher = Eingang do Jetzt = Eingang if Jetzt <> Vorher then ' Juhu es gab Action an der Taste, werte da mal aus end if Vorher = Jetzt Loop Ich bin kein BASCOM Spezialist und wahrscheinlich kann man das auch noch einfacher machen. Am besten ist es im Web nach einem BASCOM Tutorial zu suchen und mal nachzulesen.
ok ich werde mal mein glück versuchen ob ich das mit deiner idee hinbekomm. danke für den tipp. kennst du vllt noch toutorials im internet wo soetwas gemacht wird? habe bisher noch nichts brauchbares gefunden. lg hauke
so habe jetzt den code nochmals umgeschrieben aber es geht immernoch nicht. der wert a wechselt IMMER aber er soll ja nur wechseln wenn der taster gedrückt wird. ich hoffe du kannst mir helfen.. $regfile = "m8def.dat" $crystal = 12000000 $baud = 9600 Config Pinb.1 = Input Eingang Alias Pinb.1 Dim Wert As Byte Dim A As Byte Dim Vorher As Bit Dim Jetzt As Bit Vorher = 0 Jetzt = 0 Do A = Rnd(17) Jetzt = Eingang If Eingang = 1 Then Toggle Vorher If Jetzt <> Vorher Then Wert = A End If Print A loop lg hauke
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.