LED-Spiel+Joystick
Planung: Die Gestaltung eines Spieles mit Hilfe eines Joysticks, welches einem Punktestand sowie Benutzername anzeigt.
Umsetzung:
- experimentieren mit dem Joystick
- anschalten von LEDs mit dem Joystick
- programmieren des Spieles
- verbessern des Spieles
- Highscoreanzeige hinzufügen
nicht geglückt:
- hinzufügen eines Benutzernamens
Material:
- Steckverbinder (10)
- m+f Kabel (5)
- LEDs (4)
- Wiederstände (4) (220 Ohm)
- Arduino UNO
- Breadboard
- Joystick
Aufbau:
Code:
#include "erste10.h"
#include "zweite30.h"
#include "dritte35.h"
#include "vierte15.h"
#include "zweite30.h"
#include "dritte35.h"
#include "vierte15.h"
const int SW_pin = 2;
const int Y_pin = 0;
const int X_pin = 1;
const int led1 = 4;//blau oben:X = hoch
const int led2 = 6;//rot rechts:Y = hoch
const int led3 = 8;//blau unten:X = tief
const int led4 = 10;//rot links:Y = tief
int punkte = 0;
int highscore = 30;
int neuerhighscore = 0;
const int Y_pin = 0;
const int X_pin = 1;
const int led1 = 4;//blau oben:X = hoch
const int led2 = 6;//rot rechts:Y = hoch
const int led3 = 8;//blau unten:X = tief
const int led4 = 10;//rot links:Y = tief
int punkte = 0;
int highscore = 30;
int neuerhighscore = 0;
void setup() {
pinMode(SW_pin, INPUT);
digitalWrite(SW_pin, HIGH);
Serial.begin(9600);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
Serial.println("Die Regeln: Bewegen Sie den Joystick in Richtung der aufleuchtenden LED!");
Serial.println("Zum Starten auf den Joystick druecken!");
}
void loop() {
if(digitalRead(SW_pin) == 0){
Serial.print("Viel Spass!");
Serial.print("\n");
delay(500);
erste10();
zweite30();
dritte35();
vierte15();
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
delay(500);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay(500);
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
delay(500);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
punkte = punktea + punkteb + punktec + punkted;
Serial.println("Herzlichen Glueckwunsch!");
Serial.print("Sie haben ");
Serial.print(punkte);
Serial.print(" Punkte von 100 moeglichen Punkten erspielt.");
Serial.print("\n");
neuerhighscore = punkte;
if(neuerhighscore > highscore){
Serial.print("Neuer Highscore!");
Serial.print("\n");
Serial.print("Bisheriger Highscore: ");
Serial.print(highscore);
Serial.print("\n");
highscore = neuerhighscore;
neuerhighscore = 0;
}
if(neuerhighscore == highscore){
delay(1);
}
else
{
Serial.print("Highscore: ");
Serial.print(highscore);
neuerhighscore = 0;
}
Serial.print("\n");
Serial.print("\n");
Serial.println("Zum Starten auf den Joystick druecken");
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
}
}
if(digitalRead(SW_pin) == 0){
Serial.print("Viel Spass!");
Serial.print("\n");
delay(500);
erste10();
zweite30();
dritte35();
vierte15();
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
delay(500);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay(500);
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
delay(500);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
punkte = punktea + punkteb + punktec + punkted;
Serial.println("Herzlichen Glueckwunsch!");
Serial.print("Sie haben ");
Serial.print(punkte);
Serial.print(" Punkte von 100 moeglichen Punkten erspielt.");
Serial.print("\n");
neuerhighscore = punkte;
if(neuerhighscore > highscore){
Serial.print("Neuer Highscore!");
Serial.print("\n");
Serial.print("Bisheriger Highscore: ");
Serial.print(highscore);
Serial.print("\n");
highscore = neuerhighscore;
neuerhighscore = 0;
}
if(neuerhighscore == highscore){
delay(1);
}
else
{
Serial.print("Highscore: ");
Serial.print(highscore);
neuerhighscore = 0;
}
Serial.print("\n");
Serial.print("\n");
Serial.println("Zum Starten auf den Joystick druecken");
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
}
}
erste10.h:
int leda = 0;
int achsea = 0;
int zahla = 0;
const int Y_pina = 0;
const int X_pina = 1;
const int led1a = 4;//blau oben:X = hoch
const int led2a = 6;//rot rechts:Y = hoch
const int led3a = 8;//blau unten:X = tief
const int led4a = 10;//rot links:Y = tief
int punktea = 0;
int pina = 0;
int achsea = 0;
int zahla = 0;
const int Y_pina = 0;
const int X_pina = 1;
const int led1a = 4;//blau oben:X = hoch
const int led2a = 6;//rot rechts:Y = hoch
const int led3a = 8;//blau unten:X = tief
const int led4a = 10;//rot links:Y = tief
int punktea = 0;
int pina = 0;
void erste10(){
punktea = 0;
for(int i = 0; i < 10; i++){
digitalWrite(led1a, LOW);
digitalWrite(led2a, LOW);
digitalWrite(led3a, LOW);
digitalWrite(led4a, LOW);
leda = random(1, 5);
if(leda == 1){
achsea = X_pina;
zahla = 700;
pina = led1a;
}
if(leda == 2){
achsea = Y_pina;
zahla = 700;
pina = led2a;
}
if(leda == 3){
achsea = X_pina;
zahla = 450;
pina = led3a;
}
if(leda == 4){
achsea = Y_pina;
zahla = 450;
pina = led4a;
}
digitalWrite(pina, HIGH);
for(int b = 0; b < 1000; b++){
if(zahla == 700){
if(analogRead(achsea) > zahla ){
digitalWrite(led1a, LOW);
digitalWrite(led2a, LOW);
digitalWrite(led3a, LOW);
digitalWrite(led4a, LOW);
delay(500);
punktea = punktea + 1;
}
else
{
delay(1);
}
}
else
{
if(analogRead(achsea) < zahla ){
digitalWrite(pina, LOW);
delay(500);
punktea = punktea + 1;
}
else
{
delay(1);
}
}
}
}
}
punktea = 0;
for(int i = 0; i < 10; i++){
digitalWrite(led1a, LOW);
digitalWrite(led2a, LOW);
digitalWrite(led3a, LOW);
digitalWrite(led4a, LOW);
leda = random(1, 5);
if(leda == 1){
achsea = X_pina;
zahla = 700;
pina = led1a;
}
if(leda == 2){
achsea = Y_pina;
zahla = 700;
pina = led2a;
}
if(leda == 3){
achsea = X_pina;
zahla = 450;
pina = led3a;
}
if(leda == 4){
achsea = Y_pina;
zahla = 450;
pina = led4a;
}
digitalWrite(pina, HIGH);
for(int b = 0; b < 1000; b++){
if(zahla == 700){
if(analogRead(achsea) > zahla ){
digitalWrite(led1a, LOW);
digitalWrite(led2a, LOW);
digitalWrite(led3a, LOW);
digitalWrite(led4a, LOW);
delay(500);
punktea = punktea + 1;
}
else
{
delay(1);
}
}
else
{
if(analogRead(achsea) < zahla ){
digitalWrite(pina, LOW);
delay(500);
punktea = punktea + 1;
}
else
{
delay(1);
}
}
}
}
}
zweite30.h:
int ledb = 0;
int achseb = 0;
int zahlb = 0;
const int Y_pinb = 0;
const int X_pinb = 1;
const int led1b = 4;//blau oben:X = hoch
const int led2b = 6;//rot rechts:Y = hoch
const int led3b = 8;//blau unten:X = tief
const int led4b = 10;//rot links:Y = tief
int punkteb = 0;
int pinb = 0;
int achseb = 0;
int zahlb = 0;
const int Y_pinb = 0;
const int X_pinb = 1;
const int led1b = 4;//blau oben:X = hoch
const int led2b = 6;//rot rechts:Y = hoch
const int led3b = 8;//blau unten:X = tief
const int led4b = 10;//rot links:Y = tief
int punkteb = 0;
int pinb = 0;
void zweite30(){
punkteb = 0;
for(int i = 0; i < 30; i++){
digitalWrite(led1b, LOW);
digitalWrite(led2b, LOW);
digitalWrite(led3b, LOW);
digitalWrite(led4b, LOW);
ledb = random(1, 5);
if(ledb == 1){
achseb = X_pinb;
zahlb = 700;
pinb = led1b;
}
if(ledb == 2){
achseb = Y_pinb;
zahlb = 700;
pinb = led2b;
}
if(ledb == 3){
achseb = X_pinb;
zahlb = 450;
pinb = led3b;
}
if(ledb == 4){
achseb = Y_pinb;
zahlb = 450;
pinb = led4b;
}
digitalWrite(pinb, HIGH);
for(int b = 0; b < 750; b++){
if(zahlb == 700){
if(analogRead(achseb) > zahlb ){
digitalWrite(pinb, LOW);
delay(500);
punkteb = punkteb + 1;
}
else
{
delay(1);
}
}
else
{
if(analogRead(achseb) < zahlb ){
digitalWrite(pinb, LOW);
delay(500);
punkteb = punkteb + 1;
}
else
{
delay(1);
}
}
}
}
}
punkteb = 0;
for(int i = 0; i < 30; i++){
digitalWrite(led1b, LOW);
digitalWrite(led2b, LOW);
digitalWrite(led3b, LOW);
digitalWrite(led4b, LOW);
ledb = random(1, 5);
if(ledb == 1){
achseb = X_pinb;
zahlb = 700;
pinb = led1b;
}
if(ledb == 2){
achseb = Y_pinb;
zahlb = 700;
pinb = led2b;
}
if(ledb == 3){
achseb = X_pinb;
zahlb = 450;
pinb = led3b;
}
if(ledb == 4){
achseb = Y_pinb;
zahlb = 450;
pinb = led4b;
}
digitalWrite(pinb, HIGH);
for(int b = 0; b < 750; b++){
if(zahlb == 700){
if(analogRead(achseb) > zahlb ){
digitalWrite(pinb, LOW);
delay(500);
punkteb = punkteb + 1;
}
else
{
delay(1);
}
}
else
{
if(analogRead(achseb) < zahlb ){
digitalWrite(pinb, LOW);
delay(500);
punkteb = punkteb + 1;
}
else
{
delay(1);
}
}
}
}
}
dritte35.h:
int ledc = 0;
int achsec = 0;
int zahlc = 0;
const int Y_pinc = 0;
const int X_pinc = 1;
const int led1c = 4;//blau oben:X = hoch
const int led2c = 6;//rot rechts:Y = hoch
const int led3c = 8;//blau unten:X = tief
const int led4c = 10;//rot links:Y = tief
int punktec = 0;
int pinc = 0;
int achsec = 0;
int zahlc = 0;
const int Y_pinc = 0;
const int X_pinc = 1;
const int led1c = 4;//blau oben:X = hoch
const int led2c = 6;//rot rechts:Y = hoch
const int led3c = 8;//blau unten:X = tief
const int led4c = 10;//rot links:Y = tief
int punktec = 0;
int pinc = 0;
void dritte35(){
punktec = 0;
for(int i = 0; i < 35; i++){
digitalWrite(led1c, LOW);
digitalWrite(led2c, LOW);
digitalWrite(led3c, LOW);
digitalWrite(led4c, LOW);
ledc = random(1, 5);
if(ledc == 1){
achsec = X_pinc;
zahlc = 700;
pinc = led1c;
}
if(ledc == 2){
achsec = Y_pinc;
zahlc = 700;
pinc = led2c;
}
if(ledc == 3){
achsec = X_pinc;
zahlc = 450;
pinc = led3c;
}
if(ledc == 4){
achsec = Y_pinc;
zahlc = 450;
pinc = led4c;
}
digitalWrite(pinc, HIGH);
for(int b = 0; b < 500; b++){
if(zahlc == 700){
if(analogRead(achsec) > zahlc ){
digitalWrite(led1c, LOW);
digitalWrite(led2c, LOW);
digitalWrite(led3c, LOW);
digitalWrite(led3c, LOW);
delay(500);
punktec = punktec + 1;
}
else
{
delay(1);
}
}
else
{
if(analogRead(achsec) < zahlc ){
digitalWrite(pinc, LOW);
delay(500);
punktec = punktec + 1;
}
else
{
delay(1);
}
}
}
}
}
punktec = 0;
for(int i = 0; i < 35; i++){
digitalWrite(led1c, LOW);
digitalWrite(led2c, LOW);
digitalWrite(led3c, LOW);
digitalWrite(led4c, LOW);
ledc = random(1, 5);
if(ledc == 1){
achsec = X_pinc;
zahlc = 700;
pinc = led1c;
}
if(ledc == 2){
achsec = Y_pinc;
zahlc = 700;
pinc = led2c;
}
if(ledc == 3){
achsec = X_pinc;
zahlc = 450;
pinc = led3c;
}
if(ledc == 4){
achsec = Y_pinc;
zahlc = 450;
pinc = led4c;
}
digitalWrite(pinc, HIGH);
for(int b = 0; b < 500; b++){
if(zahlc == 700){
if(analogRead(achsec) > zahlc ){
digitalWrite(led1c, LOW);
digitalWrite(led2c, LOW);
digitalWrite(led3c, LOW);
digitalWrite(led3c, LOW);
delay(500);
punktec = punktec + 1;
}
else
{
delay(1);
}
}
else
{
if(analogRead(achsec) < zahlc ){
digitalWrite(pinc, LOW);
delay(500);
punktec = punktec + 1;
}
else
{
delay(1);
}
}
}
}
}
vierte15.h:
int ledd = 0;
int achsed = 0;
int zahld = 0;
const int Y_pind = 0;
const int X_pind = 1;
const int led1d = 4;//blau oben:X = hoch
const int led2d = 6;//rot rechts:Y = hoch
const int led3d = 8;//blau unten:X = tief
const int led4d = 10;//rot links:Y = tief
int punkted = 0;
int pind = 0;
int achsed = 0;
int zahld = 0;
const int Y_pind = 0;
const int X_pind = 1;
const int led1d = 4;//blau oben:X = hoch
const int led2d = 6;//rot rechts:Y = hoch
const int led3d = 8;//blau unten:X = tief
const int led4d = 10;//rot links:Y = tief
int punkted = 0;
int pind = 0;
void vierte15(){
punkted = 0;
for(int i = 0; i < 15; i++){
digitalWrite(led1d, LOW);
digitalWrite(led2d, LOW);
digitalWrite(led3d, LOW);
digitalWrite(led4d, LOW);
ledd = random(1, 5);
if(ledd == 1){
achsed = X_pind;
zahld = 700;
pind = led1d;
}
if(ledd == 2){
achsed = Y_pina;
zahld = 700;
pind = led2d;
}
if(ledd == 3){
achsed = X_pina;
zahld = 450;
pind = led3d;
}
if(ledd == 4){
achsed = Y_pina;
zahld = 450;
pind = led4d;
}
digitalWrite(pind, HIGH);
for(int b = 0; b < 250; b++){
if(zahld == 700){
if(analogRead(achsed) > zahld ){
digitalWrite(pind, LOW);
delay(500);
punkted = punkted + 1;
}
else
{
delay(1);
}
}
else
{
if(analogRead(achsed) < zahld ){
digitalWrite(pind, LOW);
delay(500);
punkted = punkted + 1;
}
else
{
delay(1);
}
}
}
}
}
punkted = 0;
for(int i = 0; i < 15; i++){
digitalWrite(led1d, LOW);
digitalWrite(led2d, LOW);
digitalWrite(led3d, LOW);
digitalWrite(led4d, LOW);
ledd = random(1, 5);
if(ledd == 1){
achsed = X_pind;
zahld = 700;
pind = led1d;
}
if(ledd == 2){
achsed = Y_pina;
zahld = 700;
pind = led2d;
}
if(ledd == 3){
achsed = X_pina;
zahld = 450;
pind = led3d;
}
if(ledd == 4){
achsed = Y_pina;
zahld = 450;
pind = led4d;
}
digitalWrite(pind, HIGH);
for(int b = 0; b < 250; b++){
if(zahld == 700){
if(analogRead(achsed) > zahld ){
digitalWrite(pind, LOW);
delay(500);
punkted = punkted + 1;
}
else
{
delay(1);
}
}
else
{
if(analogRead(achsed) < zahld ){
digitalWrite(pind, LOW);
delay(500);
punkted = punkted + 1;
}
else
{
delay(1);
}
}
}
}
}
Von Adrian Schmidt und Jannis Engemann
Erstellt: Adrian Schmidt (14.02.2017)
Letzte Änderung: Adrian Schmidt (14.02.2017)