Hallo,
Zitat Zitat von Bow-Hunter Beitrag anzeigen
Okay, zumindest bekomme ich jetzt das Programm gespeichert. Habs grad mal auf den Tiny übertragen. Es spielt bei Stromzufuhr sofort den ersten Lichteffekt ab und reagiert nicht auf den Taster oder auf den Reset.
Ich probier das ganze morgen nach der Arbeit nochmal.
Du drückst die Taste zu lange

Code:
If Pinb.0 = 1 Then Incr Modus
Angenommen dein do-loop benötigt 1ms für einen Durchlauf, dann wird bei jedem Durchlauf Modus inkrementiert!

Du musst also die Flanke erfassen, wenn das Signal der Taste von 0 auf 1 springt und nur dann Modus inkrementieren.

Code:
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 0
$swstack = 0
$framesize = 0

Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Output
Config Portb.4 = Output
Config Pinb.0 = Input

Dim Modus As Integer
Dim Anzahlmodi As Integer
Dim Taste_old As Bit
Dim Taste_new As Bit

Modus = 1
Anzahlmodi = 2
Taste_new = 0


do

   Taste_old = Taste_new
   Taste_new = Pinb.0
   If ((Taste_old XOR Taste_new) AND Taste_new) = 1 Then Incr Modus

   If Modus > AnzahlModi then Modus=1
   Select Case Modus
   Case 1
      Gosub Lichteffekt1
   Case 2
      Gosub Lichteffekt2

   end select

loop
end
BASIC ist lange her bei mir, ich hoffe es hat keine Tippfehler.

Hier noch die Erklärung zum Ausdruck ((Taste_old XOR Taste_new) AND Taste_new):
(Taste_old XOR Taste_new)
liefert 1 Wenn sich der Wert von Taste geändert hat, also seit der letzten Abfrage gedrückt oder losgelassen wurde.
Ich gehe davon aus, dass eine gedrückte Taste eine 1 liefert, das hängt jetzt aber von deiner Hardware ab.

Der Ganze Ausdruck liefert nur 1 wenn die Taste gedrückt wurde.

Die Hilfsvariable Taste_new benötigt man, weil sich Pinb.0 zwischen zwei Abfragen ändern könnte.

MfG Peter(TOO)