Programme für den heißen Draht mit Attiny 45.
Programm von der heißen Draht Seite, dass jeden Fehler für eine Sekunde optisch und akustisch darstellt.
void setup()
{
pinMode( 1 , INPUT);
pinMode( 0 , OUTPUT);
digitalWrite(1, HIGH);
pinMode( 4 , OUTPUT);
pinMode( 0 , OUTPUT);
}
void loop()
{
if (!( digitalRead(1) ))
{
analogWrite(0 , 100);
digitalWrite( 4 , HIGH );
delay( 900 );
digitalWrite( 0 , LOW );
digitalWrite( 4 , LOW );
}
delay( 2 );
}
Bei diesem Programm wird der analoge Eingang des Attiny verwendet. Damit lässt sich nicht nur ein HIGH oder LOW Signal auslesen, sondern ein variables Signal. Dies hat zur Folge, dass die Schwierigkeit verändert werden kann. So ist bereits ein zu nahe kommen des Drahtes oder ein richtiger Druck auf den Draht nötig um einen Fehler zu "machen". Möglich wäre auch die Zeit der Berührung wiederzugeben und erst ab einer bestimmten Zeit den Fehler anzeigen zu lassen.
void setup() {
pinMode(1, OUTPUT);
}
void loop() {
if(analogRead(2) < 50)
{
for(int x = 0;x < 100; x++)
{
digitalWrite(1, HIGH);
delay(500);
digitalWrite(1, LOW);
delay(500);
}
}
}
Bei diesem Programm muss der Attiny über reset zurückgesetzt werden, da nach einem Fehler die DELAY Zeit extrem hoch ist. Bei diesem Spiel hat der Spieler also nach einem Fehler verloren. Über eine rote LED an Pin0 und eine grüne LED an PIN1 wird der Spielstand angezeigt. Nach dem reset leuchtet die grüne und nach einem Fehler die rote LED. Der Summer wird an PIN2 anschlossen (bei mehr als 40 ma bitte einen Transistor verwenden). Den Fehler bekommt der Attiny über ein HIGH Signal an PIN 4. Pin 4 bitte mit einem PULL DOWN-Widerstand versehen.
void setup()
{
pinMode( 4 , INPUT);
pinMode( 0 , OUTPUT);
pinMode( 1 , OUTPUT);
pinMode( 2 , OUTPUT);
digitalWrite( 0 , HIGH );
digitalWrite( 1 , LOW );
}
void loop()
{
if (digitalRead(4))
{
digitalWrite( 0 , LOW );
digitalWrite( 1 , HIGH );
digitalWrite( 2 , HIGH );
delay( 900 );
digitalWrite( 2 , LOW );
delay( 9999999 );
}
delay( 1 );
}
Bei diesem Programm werden 3 LED nacheinander angeschaltet und bei jedem Fehler ertönt ein Summer. Somit ist das Spiel nicht nach einem Fehler aus, sondern nach drei Fehlern. Die Pin Belegung bitte aus dem Code entnehmen.
int fehler = 0 ;
int zeit = 0 ;
int a;
void setup()
{
pinMode( 4 , INPUT);
pinMode( 0 , OUTPUT);
pinMode( 1 , OUTPUT);
pinMode( 2 , OUTPUT);
pinMode( 3 , OUTPUT);
fehler = 0 ;
zeit = 100 ;
for (a=1; a<= ( 2 ); ++a )
{
digitalWrite( 0 , LOW );
delay( zeit );
digitalWrite( 1 , LOW );
delay( zeit );
digitalWrite( 2 , LOW );
delay( zeit );
digitalWrite( 0 , HIGH );
delay( zeit );
digitalWrite( 1 , HIGH );
delay( zeit );
digitalWrite( 2 , HIGH );
delay( zeit );
}
digitalWrite( 0 , HIGH );
digitalWrite( 1 , HIGH );
digitalWrite( 2 , HIGH );
}
void loop()
{
if (digitalRead(4))
{
fehler = ( fehler + 1 ) ;
delay( 2 );
if (( ( fehler ) == ( 1 ) ))
{
digitalWrite( 0 , LOW );
digitalWrite( 3 , HIGH );
delay( 700 );
digitalWrite( 3 , LOW );
}
if (( ( fehler ) == ( 2 ) ))
{
digitalWrite( 1 , LOW );
digitalWrite( 3 , HIGH );
delay( 700 );
digitalWrite( 3 , LOW );
}
if (( ( fehler ) == ( 3 ) ))
{
digitalWrite( 2 , LOW );
digitalWrite( 3 , HIGH );
delay( 1100 );
digitalWrite( 3 , LOW );
for (a=1; a<= ( 3 ); ++a )
{
digitalWrite( 0 , LOW );
delay( zeit );
digitalWrite( 1 , LOW );
delay( zeit );
digitalWrite( 2 , LOW );
delay( zeit );
digitalWrite( 0 , HIGH );
delay( zeit );
digitalWrite( 1 , HIGH );
delay( zeit );
digitalWrite( 2 , HIGH );
delay( zeit );
}
digitalWrite( 0 , HIGH );
digitalWrite( 1 , HIGH );
digitalWrite( 2 , HIGH );
fehler = 0 ;
delay( 20 );
}
}
}
Bei diesem Programm werden 99 Sekunden auf einem Sieben-Segment Display herunter gezählt. Wird ein Fehler begangen, ist das Spiel sofort vorbei. Die Pin-Belegung bitte aus dem Code entnehmen.
const byte startStopPin = 0, mistakePin = 1, buzzerPin = 16;
long startMillis;
void setup()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
pinMode(14, OUTPUT);
pinMode(15, OUTPUT);
pinMode(startStopPin, INPUT);
pinMode(mistakePin, INPUT);
pinMode(buzzerPin, OUTPUT);
displayNumber(0);
while(digitalRead(startStopPin) == LOW) // wait for the start signal
{ ; }
startMillis = millis();
}
void loop()
{
long number = 99 - (millis() - startMillis) / 1000;
if (number <= 0)
{
gameOver();
}
if (digitalRead(startStopPin) == HIGH && (millis() - startMillis) > 2000)
{
while(true)
{ ; }
}
if (digitalRead(mistakePin) == HIGH && (millis() - startMillis) > 2000)
{
gameOver();
}
displayNumber(number);
}
void displayNumber(byte x)
{
x %= 100;
set1(~dec27(x % 10));
set10(~dec27(x / 10));
}
void set1(byte value)
{
digitalWrite(2, bitRead(value, 0)); // segment a
digitalWrite(3, bitRead(value, 1)); // segment b
digitalWrite(4, bitRead(value, 2)); // segment c
digitalWrite(5, bitRead(value, 3)); // segment d
digitalWrite(6, bitRead(value, 4)); // segment e
digitalWrite(7, bitRead(value, 5)); // segment f
digitalWrite(8, bitRead(value, 6)); // segment g
}
void set10(byte value)
{
digitalWrite(9, bitRead(value, 0)); // segment a
digitalWrite(10, bitRead(value, 1)); // segment b
digitalWrite(11, bitRead(value, 2)); // segment c
digitalWrite(12, bitRead(value, 3)); // segment d
digitalWrite(13, bitRead(value, 4)); // segment e
digitalWrite(14, bitRead(value, 5)); // segment f
digitalWrite(15, bitRead(value, 6)); // segment g
}
byte dec27(byte decimal) {
if (decimal == 0)
return B00111111;
if (decimal == 1)
return B00000110;
if (decimal == 2)
return B01011011;
if (decimal == 3)
return B01001111;
if (decimal == 4)
return B01100110;
if (decimal == 5)
return B01101101;
if (decimal == 6)
return B01111101;
if (decimal == 7)
return B0000111;
if (decimal == 8)
return B01111111;
if (decimal == 9)
return B01101111;
return 0;
}
void gameOver()
{
displayNumber(0);
digitalWrite(buzzerPin, HIGH);
delay(3000);
digitalWrite(buzzerPin, LOW);
while (true)
{ ; }
}