Sparrow-Spiel Recall a Bit
von Rainer R.
Ziel des Spiels Recall_a_Bit ist es eine zufällige Blinkfolge
der zwei LEDs auf den zwei Tastern zu wiederholen. Dabei wird bei
jedem Durchgang um einen Blinkimpuls erhöht. Begonnen wird
mit einer festen Folge von zweimalig wechselnden Blinken. Kann
man die Folge korrekt wiederholen wird die Anzahl Tastendrücke
durch langsames Blinken beider Leds angezeigt. Eine neue Bitfolge wird
festgelegt und die Anzahl der zu wiederholenden Impulse
um eins
erhöht. Macht man einen Fehler wird dies durch schnelles Blinken
der beiden Leds angezeigt und alles beginnt wieder neu.
Download: Sparrow_Recall_a_Bit.zip
Direkt laden: http://tiny.systems/categorie/cheepit/RecallABit.html
'Sparrow Programming Contest Easter 2015 Recall_a_Bit Version 1.0
' http://www.elektronik-labor.de/AVR/Sparrow/SparrowContest.html
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 5
$swstack = 5
$framesize = 4
Config Portb = &B000011010
Declare Sub Blinkled1
Declare Sub Blinkled2
Declare Sub Blinkalarm
Dim I As Byte
Dim N As Byte
Dim Anz As Byte
Dim Blinkanz As Byte
Dim Led_id As Byte
Led1 Alias Portb.3
Led2 Alias Portb.1
S1 Alias Pinb.0
S2 Alias Pinb.2
Led1 = 0
Led2 = 0
Dim Myword As Word
Dim S1_myword As Byte
Dim S2_myword As Byte
Dim Myword_anz As Byte
Dim Myword_max As Byte
Dim Startbit_max As Byte
' Erste Startwerte für ersten level zuweisen
Myword.0 = 1
Myword.1 = 0
Myword.2 = 1
Myword.3 = 0
Myword.4 = 1
Myword.5 = 0
Myword.6 = 1
Myword.7 = 0
S1_myword = Myword
S2_myword = Myword
Myword_anz = 0
' Anzahl der ersten Abfragen bei Neustart myword_max + 1
Startbit_max = 4
Myword_max = Startbit_max - 1
Led1 = 1
Led2 = 1
Waitms 500
Led1 = 0
Led2 = 0
Startnext:
If Myword_anz > 0 Then
' Neue Zufallszahl und Erhöhung der Anzahl ( nicht beim ersten Durchlauf oder Restart)
' s1 ode s2 drücken um nächste Runde zu spielen - mit neuer Zahl und Anzahl + 1
Led1 = 1
Led2 = 1
Myword = 0
Do
Myword = Myword + 1
Loop Until S1 = 0 Or S2 = 0
End If:
Led1 = 0
Led2 = 0
Waitms 500
S1_myword = Myword
S2_myword = Myword
Myword_anz = 0
Do
Myword_anz = Myword_anz + 1
' Blinkfolge als Vorgabe zur Wiederholung anzeigen
Waitms 100
Myword = S1_myword
For I = 1 To Myword_anz
If Myword.0 = 0 Then Call Blinkled1
If Myword.0 = 1 Then Call Blinkled2
Rotate Myword , Right
Waitms 100
Next I
S2_myword = S1_myword
Waitms 50
Anz = 1
Do
If S1 = 0 Then
Call Blinkled1
Waitms 50
Do
Loop Until S1 = 1
Waitms 50
If S2_myword.0 = 0 Then
Rotate S2_myword , Right
Anz = Anz + 1
Else
Blinkanz = 30
Call Blinkalarm
' Fehler - Restart Programm
Waitms 50
Goto 0 ' Programm reatart
End If
End If
If S2 = 0 Then
Call Blinkled2
Waitms 50
Do
Loop Until S2 = 1
Waitms 50
If S2_myword.0 = 1 Then
Rotate S2_myword , Right
Anz = Anz + 1
Else
Blinkanz = 30
Call Blinkalarm
' Fehler - Restart Programm
Waitms 50
Goto 0
End If
End If
Loop Until Anz > Myword_anz
Loop Until Myword_anz > Myword_max
' Folge korrekt wiederholt - Anzeige geschaffte Bits - nächster Level
Led1 = 1
Led2 = 1
Waitms 500
Myword_max = Myword_max + 1
For N = 0 To Myword_max
Led1 = 1
Led2 = 1
Waitms 100
Led1 = 0
Led2 = 0
Waitms 500
Next N
Waitms 500
Goto Startnext
' Definition Subroutines
Sub Blinkled1
Led1 = 1
Waitms 100
Led1 = 0
Waitms 50
End Sub
Sub Blinkled2
Led2 = 1
Waitms 100
Led2 = 0
Waitms 50
End Sub
Sub Blinkalar
For N = 1 To Blinkanz
Led1 = 1
Led2 = 1
Waitms 25
Led1 = 0
Led2 = 0
Waitms 50
Next N
End Sub