Bei dem Buzzer Spiel geht es darum welche Person oder welche Gruppe zuerst auf den Taster gedrückt hat. Bei diesem Spiel gibt es drei Farben, ROT, GELB, GRÜN und die Taster auf die die Gruppe schlägt haben die gleichen Farben.
Ablauf des Spieles, Modi 1:
- Wird gerade nicht gespielt, läuft ein "Lauflicht" in den drei Farben über den NEO Pixel ring.
- Drückt eine Spieler auf den Knopf, dann wird der Neo Pixel ring zu der Farbe die der Spiele hat.
- Mit dem Rest Knopf wird die Schaltung zurückgesetzt.
Ablauf des Spieles, Modi 2:
Im Prinzip genau gleich. Nur über den Poti lässt sich eine Zeit einstellen, in der eine andere Person Zeit hat die Frage zu beantworten. Der Ablauf der Zeit wird über das ausgehen der LEDs auf dem Ring angezeigt.
Über den Poti lässt sich auch der Spielmodus einstellen. Wird gerade nicht gespielt und der Poti ganz nach links gedreht wechselt der Modus. Die einzelne LED zeigt an in welchem Modus man sich befindet.
Ich habe auf einer Lochrasterplatine die anderen Bauteile und Klemmen aufgelötet, da ich die Schaltung nicht für mich verwendet habe, sondern für jemand gebaut habe. Dieser konnte dann an die Klemmen einfach seine Taster anschließen. Außerdem konnten so die Neo Pixel zur Montage einfach abgeschraubt werden.
Das Programm habe ich mit Ardublock in der Version von letsgoING2 geschrieben.
#include <Adafruit_NeoPixel.h>
Adafruit_NeoPixel strip_pin8 = Adafruit_NeoPixel(24,8, NEO_RGB + NEO_KHZ800);
int neo = 0;
bool stopp = false;
int spieler = 0;
int spielerrr = 0;
int sperre1 = 0;
int sperre2 = 0;
int sperre3 = 0;
int restzeit = 0;
long intervall = 0L;
void Unterprogramm();
int wechsel = 0;
void Unterprogramm33();
long rest = 0L;
void Unterprogramm11();
void Unterprogramm3();
void Unterprogramm2();
void Unterprogramm22();
void Unterprogramm100();
void interrupt();
void setup() {
strip_pin8.begin();
strip_pin8.show();
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
attachInterrupt(0, interrupt, HIGH);
for (int i = 0; i < 8; i++) {
strip_pin8.setPixelColor(neo,0 ,255 ,0 );
strip_pin8.show();
neo = ( neo + 1 );
}
for (int i = 0; i < 8; i++) {
strip_pin8.setPixelColor(neo,255 ,0 ,0 );
strip_pin8.show();
neo = ( neo + 1 );
}
for (int i = 0; i < 8; i++) {
strip_pin8.setPixelColor(neo,0 ,0 ,255 );
strip_pin8.show();
neo = ( neo + 1 );
}
delay( 1000 );
stopp = false;
spieler = 0;
spielerrr = 0;
sperre1 = 0;
sperre2 = 0;
sperre3 = 0;
neo = 0;
restzeit = 0;
}
void loop() {
intervall = millis();
while(intervall + 50L >= millis()) {
restzeit = constrain( analogRead(0) , 5 , 1500 ) ;
if (( ( restzeit > 0 ) && !( ( restzeit > 100 ) ) )) {
Unterprogramm100();
analogWrite(9 , 0);
}
if (( restzeit > 101 )) {
Unterprogramm2();
Unterprogramm3();
if (digitalRead(2)) {
stopp = false;
spieler = 0;
spielerrr = 0;
sperre1 = 0;
sperre2 = 0;
sperre3 = 0;
neo = 0;
}
analogWrite(9 , 100);
}
}
Unterprogramm();
}
//farbwechsel
void Unterprogramm() {
if (( !( ( stopp == true ) ) && ( wechsel < 24 ) )) {
strip_pin8.setPixelColor(neo,255 ,0 ,0 );
strip_pin8.show();
}
if (( !( ( stopp == true ) ) && ( ( wechsel > 22 ) && !( ( wechsel > 46 ) ) ) )) {
strip_pin8.setPixelColor(neo,0 ,0 ,255 );
strip_pin8.show();
}
if (( ( wechsel > 46 ) && !( ( stopp == true ) ) )) {
strip_pin8.setPixelColor(neo,0 ,255 ,0 );
strip_pin8.show();
}
neo = ( neo + 1 );
wechsel = ( wechsel + 1 );
if (( random( 1 , 30 ) > 24 )) {
neo = 0;
}
if (( wechsel == 72 )) {
wechsel = 0;
}
}
//33
void Unterprogramm33() {
if (( ( spieler == 3 ) && ( sperre3 == 0 ) )) {
spielerrr = 33;
sperre3 = 1;
for (int i = 0; i < 25; i++) {
strip_pin8.setPixelColor(neo,0 ,255 ,0 );
strip_pin8.show();
neo = ( neo + 1 );
}
while ( ( spielerrr == 33 ) ) {
rest = millis();
while(rest + map ( analogRead(0) , 0 , 1200 , 100 , 1000 ) >= millis()) {
if (( digitalRead(3) && ( ( sperre1 == 0 ) && !( ( spieler == 2 ) ) ) )) {
spieler = 1;
}
if (( digitalRead(4) && ( ( sperre2 == 0 ) && !( ( spieler == 1 ) ) ) )) {
spieler = 2;
}
}
neo = ( neo - 1 );
strip_pin8.setPixelColor(neo,0 ,0 ,0 );
strip_pin8.show();
if (( neo == 0 )) {
spielerrr = 0;
}
}
if (( !( ( spieler == 1 ) ) && !( ( spieler == 2 ) ) )) {
for (int i = 0; i < 25; i++) {
strip_pin8.setPixelColor(neo,255 ,255 ,0 );
strip_pin8.show();
neo = ( neo + 1 );
delay( 30 );
}
}
}
}
//11
void Unterprogramm11() {
if (( ( spieler == 1 ) && ( sperre1 == 0 ) )) {
sperre1 = 1;
spielerrr = 11;
for (int i = 0; i < 25; i++) {
strip_pin8.setPixelColor(neo,255 ,0 ,0 );
strip_pin8.show();
neo = ( neo + 1 );
}
while ( ( spielerrr == 11 ) ) {
rest = millis();
while(rest + map ( analogRead(0) , 0 , 1200 , 100 , 1000 ) >= millis()) {
if (( digitalRead(4) && ( ( sperre2 == 0 ) && !( ( spieler == 3 ) ) ) )) {
spieler = 2;
}
if (( digitalRead(5) && ( ( sperre3 == 0 ) && !( ( spieler == 2 ) ) ) )) {
spieler = 3;
}
}
neo = ( neo - 1 );
strip_pin8.setPixelColor(neo,0 ,0 ,0 );
strip_pin8.show();
if (( neo == 0 )) {
spielerrr = 0;
}
}
if (( !( ( spieler == 2 ) ) && !( ( spieler == 3 ) ) )) {
for (int i = 0; i < 25; i++) {
strip_pin8.setPixelColor(neo,255 ,255 ,0 );
strip_pin8.show();
neo = ( neo + 1 );
delay( 30 );
}
}
}
}
//restzeitmodi2
void Unterprogramm3() {
Unterprogramm11();
Unterprogramm22();
Unterprogramm33();
}
//spielmodi2
void Unterprogramm2() {
if (( digitalRead(3) && !( ( ( spieler == 2 ) || ( spieler == 3 ) ) ) )) {
spieler = 1;
stopp = true;
neo = 0;
for (int i = 0; i < 25; i++) {
strip_pin8.setPixelColor(neo,255 ,0 ,0 );
strip_pin8.show();
neo = ( neo + 1 );
}
}
if (( digitalRead(4) && !( ( ( spieler == 1 ) || ( spieler == 3 ) ) ) )) {
spieler = 2;
stopp = true;
neo = 0;
for (int i = 0; i < 25; i++) {
strip_pin8.setPixelColor(neo,0 ,0 ,255 );
strip_pin8.show();
neo = ( neo + 1 );
}
}
if (( digitalRead(5) && !( ( ( spieler == 1 ) || ( spieler == 2 ) ) ) )) {
spieler = 3;
stopp = true;
neo = 0;
for (int i = 0; i < 25; i++) {
strip_pin8.setPixelColor(neo,0 ,255 ,0 );
strip_pin8.show();
neo = ( neo + 1 );
}
}
}
//22
void Unterprogramm22() {
if (( ( spieler == 2 ) && ( sperre2 == 0 ) )) {
spielerrr = 22;
sperre2 = 1;
for (int i = 0; i < 25; i++) {
strip_pin8.setPixelColor(neo,0 ,0 ,255 );
strip_pin8.show();
neo = ( neo + 1 );
}
while ( ( spielerrr == 22 ) ) {
rest = millis();
while(rest + map ( analogRead(0) , 0 , 1200 , 100 , 1000 ) >= millis()) {
if (( digitalRead(3) && ( ( sperre1 == 0 ) && !( ( spieler == 3 ) ) ) )) {
spieler = 1;
}
if (( digitalRead(5) && ( ( sperre3 == 0 ) && !( ( spieler == 1 ) ) ) )) {
spieler = 3;
}
}
neo = ( neo - 1 );
strip_pin8.setPixelColor(neo,0 ,0 ,0 );
strip_pin8.show();
if (( neo == 0 )) {
spielerrr = 0;
}
}
if (( !( ( spieler == 1 ) ) && !( ( spieler == 3 ) ) )) {
for (int i = 0; i < 25; i++) {
strip_pin8.setPixelColor(neo,255 ,255 ,0 );
strip_pin8.show();
neo = ( neo + 1 );
delay( 30 );
}
}
}
}
//Spielmodi1
void Unterprogramm100() {
if (digitalRead(2)) {
stopp = false;
spieler = 0;
neo = 0;
for (int i = 0; i < 25; i++) {
strip_pin8.setPixelColor(neo,255 ,255 ,0 );
strip_pin8.show();
neo = ( neo + 1 );
delay( 10 );
}
}
if (( digitalRead(3) && !( ( ( spieler == 2 ) || ( spieler == 3 ) ) ) )) {
spieler = 1;
stopp = true;
neo = 0;
for (int i = 0; i < 25; i++) {
strip_pin8.setPixelColor(neo,255 ,0 ,0 );
strip_pin8.show();
neo = ( neo + 1 );
}
}
if (( digitalRead(4) && !( ( ( spieler == 1 ) || ( spieler == 3 ) ) ) )) {
spieler = 2;
stopp = true;
neo = 0;
for (int i = 0; i < 25; i++) {
strip_pin8.setPixelColor(neo,0 ,0 ,255 );
strip_pin8.show();
neo = ( neo + 1 );
}
}
if (( digitalRead(5) && !( ( ( spieler == 1 ) || ( spieler == 2 ) ) ) )) {
spieler = 3;
stopp = true;
neo = 0;
for (int i = 0; i < 25; i++) {
strip_pin8.setPixelColor(neo,0 ,255 ,0 );
strip_pin8.show();
neo = ( neo + 1 );
}
}
}
void interrupt() {
stopp = false;
spieler = 0;
spielerrr = 0;
sperre1 = 0;
sperre2 = 0;
sperre3 = 0;
neo = 0;
for (int i = 0; i < 8; i++) {
strip_pin8.setPixelColor(neo,0 ,255 ,0 );
strip_pin8.show();
neo = ( neo + 1 );
}
for (int i = 0; i < 8; i++) {
strip_pin8.setPixelColor(neo,255 ,0 ,0 );
strip_pin8.show();
neo = ( neo + 1 );
}
for (int i = 0; i < 9; i++) {
strip_pin8.setPixelColor(neo,0 ,0 ,255 );
strip_pin8.show();
neo = ( neo + 1 );
}
}