Hey! Ich muss ein Schulprojekt mit Arduino programmieren und habe mich für TicTacToe entschieden. Dabei habe ich 9 Knöpfe die je für ein Feld auf dem Lcd Display stehen. Ich versuche gerade einen Gewinnmechanismus zu programmieren, habe jetzt aber das Problem, dass ich die Taster jeweils doppelt belegt habe (1x drücken -> x, 2x drücken -> o) und ich jetzt wenn zwei x in einer Reihe sind und der o blockieren will, zuerst x angezeigt wird und damit der Gewinnmechanismus ausgelöst wird. Gibt es die Möglichkeit, die Abfrage des Gewinns erst nach einer Zeit durchzuführen oder eine andere Möglichkeit das Problem zu umgehen? Danke!
const int taster1 = 2; //Taster 1 = Port 2
const int taster2 = 3; //Taster 2 = Port 3
const int taster3 = 4; //Taster 3 = Port 4
const int taster4 = 5; //Taster 4 = Port 5
const int taster5 = 6; //Taster 5 = Port 6
const int taster6 = 7; //Taster 6 = Port 7
const int taster7 = 8; //Taster 7 = Port 8
const int taster8 = 9; //Taster 8 = Port 9
const int taster9 = 10; //Taster 9 = Port 10
const int lautsprecher = 11; //Lautsprecher = Port 11
const int taster = 12; //Neustartknopf = Port 12
int pinWert = 1;
int pinWert1 = 1;
int pinWert2 = 1;
int pinWert3 = 1;
int pinWert4 = 1;
int pinWert5 = 1;
int pinWert6 = 1;
int pinWert7 = 1;
int pinWert8 = 1;
int pinWert9 = 1;
int zaehler1;
int zaehler2;
int zaehler3;
int zaehler4;
int zaehler5;
int zaehler6;
int zaehler7;
int zaehler8;
int zaehler9;
#include <LiquidCrystal_I2C.h> //Bibliothek wird eingebunden
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup() {
pinMode(taster, INPUT_PULLUP); //Neustartknopf als Objekt identifizieren, das ausgelesen wird
pinMode(taster1, INPUT_PULLUP); //Taster 1 als Objekt identifizieren, das ausgelesen wird
pinMode(taster2, INPUT_PULLUP); //Taster 2 als Objekt identifizieren, das ausgelesen wird
pinMode(taster3, INPUT_PULLUP); //Taster 3 als Objekt identifizieren, das ausgelesen wird
pinMode(taster4, INPUT_PULLUP); //Taster 4 als Objekt identifizieren, das ausgelesen wird
pinMode(taster5, INPUT_PULLUP); //Taster 5 als Objekt identifizieren, das ausgelesen wird
pinMode(taster6, INPUT_PULLUP); //Taster 6 als Objekt identifizieren, das ausgelesen wird
pinMode(taster7, INPUT_PULLUP); //Taster 7 als Objekt identifizieren, das ausgelesen wird
pinMode(taster8, INPUT_PULLUP); //Taster 8 als Objekt identifizieren, das ausgelesen wird
pinMode(taster9, INPUT_PULLUP); //Taster 9 als Objekt identifizieren, das ausgelesen wird
//Serial.begin(9600); //Für Test von Problem
display_grundeinstellung(); //"+"-Feld (TicTacToe Feld) wird geladen
}
void loop() {
neustart(); //Neustartknopf
auswahl1(); //Knopf 1
auswahl2(); //Knopf 2
auswahl3(); //Knopf 3
auswahl4(); //Knopf 4
auswahl5(); //Knopf 5
auswahl6(); //Knopf 6
auswahl7(); //Knopf 7
auswahl8(); //Knopf 8
auswahl9(); //Knopf 9
gewonnen(); //Gewinnmechanismus
//Serial.println(zaehler1); //Für Test von Problem
}
void display_grundeinstellung () {
lcd.init(); //Start d. Kommunikation mit dem Display
lcd.backlight(); //Hintergrundbeleuchtung wird aktiviert
lcd.clear(); //Löscht d. Bildschirminhalt
zaehler1 = 0;
zaehler2 = 0;
zaehler3 = 0;
zaehler4 = 0;
zaehler5 = 0;
zaehler6 = 0;
zaehler7 = 0;
zaehler8 = 0;
zaehler9 = 0;
lcd.setCursor(0,0);
lcd.print("+"); //Feld 1
lcd.setCursor(1,0);
lcd.print("+"); //Feld 2
lcd.setCursor(2,0);
lcd.print("+"); //Feld 3
lcd.setCursor(0,1);
lcd.print("+"); //Feld 4
lcd.setCursor(1,1);
lcd.print("+"); //Feld 5
lcd.setCursor(2,1);
lcd.print("+"); //Feld 6
lcd.setCursor(0,2);
lcd.print("+"); //Feld 7
lcd.setCursor(1,2);
lcd.print("+"); //Feld 8
lcd.setCursor(2,2);
lcd.print("+"); //Feld 9
}
void neustart () {
pinWert = digitalRead(taster);
if (pinWert == 0){
display_grundeinstellung(); //"+"-Feld (TicTacToe Feld) wird geladen
}
}
void auswahl1 () {
pinWert1 = digitalRead(taster1);
if (pinWert1 == 0){
zaehler1 = zaehler1 + 1; //Knopf 1 wird gedrückt -> zaehler 1 geht 1 rauf
delay(300);
}
if (zaehler1 == 1) { //Wenn Knopf 1 1x gedrückt wurde
lcd.setCursor(0,0);
lcd.print("x"); //Feld 1 = x
}
if (zaehler1 == 2) { //Wenn Knopf 1 2x gedrückt wurde
lcd.setCursor(0,0);
lcd.print("o"); //Feld 1 = o
}
}
void auswahl2 () {
pinWert2 = digitalRead(taster2);
if (pinWert2 == 0){
zaehler2 = zaehler2 + 1; //Knopf 2 wird gedrückt -> zaehler 2 geht 1 rauf
delay(300);
}
if (zaehler2 == 1) { //Wenn Knopf 2 1x gedrückt wurde
lcd.setCursor(1,0);
lcd.print("x"); //Feld 1 = x
}
if (zaehler2 == 2) { //Wenn Knopf 2 2x gedrückt wurde
lcd.setCursor(1,0);
lcd.print("o"); //Feld 1 = o
}
}
void auswahl3 () {
pinWert3 = digitalRead(taster3);
if (pinWert3 == 0){
zaehler3 = zaehler3 + 1; //Knopf 3 wird gedrückt -> zaehler 3 geht 1 rauf
delay(300);
}
if (zaehler3 == 1) { //Wenn Knopf 3 1x gedrückt wurde
lcd.setCursor(2,0);
lcd.print("x"); //Feld 1 = x
}
if (zaehler3 == 2) { //Wenn Knopf 3 2x gedrückt wurde
lcd.setCursor(2,0);
lcd.print("o"); //Feld 1 = o
}
}
void auswahl4 () {
pinWert4 = digitalRead(taster4);
if (pinWert4 == 0){
zaehler4 = zaehler4 + 1; //Knopf 4 wird gedrückt -> zaehler 4 geht 1 rauf
delay(300);
}
if (zaehler4 == 1) { //Wenn Knopf 4 1x gedrückt wurde
lcd.setCursor(0,1);
lcd.print("x"); //Feld 1 = x
}
if (zaehler4 == 2) { //Wenn Knopf 4 2x gedrückt wurde
lcd.setCursor(0,1);
lcd.print("o"); //Feld 1 = o
}
}
void auswahl5 () {
pinWert5 = digitalRead(taster5);
if (pinWert5 == 0){
zaehler5 = zaehler5 + 1; //Knopf 5 wird gedrückt -> zaehler 5 geht 1 rauf
delay(300);
}
if (zaehler5 == 1) { //Wenn Knopf 5 1x gedrückt wurde
lcd.setCursor(1,1);
lcd.print("x"); //Feld 1 = x
}
if (zaehler5 == 2) { //Wenn Knopf 5 2x gedrückt wurde
lcd.setCursor(1,1);
lcd.print("o"); //Feld 1 = o
}
}
void auswahl6 () {
pinWert6 = digitalRead(taster6);
if (pinWert6 == 0){
zaehler6 = zaehler6 + 1; //Knopf 6 wird gedrückt -> zaehler 6 geht 1 rauf
delay(300);
}
if (zaehler6 == 1) { //Wenn Knopf 6 1x gedrückt wurde
lcd.setCursor(2,1);
lcd.print("x"); //Feld 1 = x
}
if (zaehler6 == 2) { //Wenn Knopf 6 2x gedrückt wurde
lcd.setCursor(2,1);
lcd.print("o"); //Feld 1 = o
}
}
void auswahl7 () {
pinWert7 = digitalRead(taster7);
if (pinWert7 == 0){
zaehler7 = zaehler7 + 1; //Knopf 7 wird gedrückt -> zaehler 7 geht 1 rauf
delay(300);
}
if (zaehler7 == 1) { //Wenn Knopf 7 1x gedrückt wurde
lcd.setCursor(0,2);
lcd.print("x"); //Feld 1 = x
}
if (zaehler7 == 2) { //Wenn Knopf 7 2x gedrückt wurde
lcd.setCursor(0,2);
lcd.print("o"); //Feld 1 = o
}
}
void auswahl8 () {
pinWert8 = digitalRead(taster8);
if (pinWert8 == 0){
zaehler8 = zaehler8 + 1; //Knopf 8 wird gedrückt -> zaehler 8 geht 1 rauf
delay(300);
}
if (zaehler8 == 1) { //Wenn Knopf 8 1x gedrückt wurde
lcd.setCursor(1,2);
lcd.print("x"); //Feld 1 = x
}
if (zaehler8 == 2) { //Wenn Knopf 8 2x gedrückt wurde
lcd.setCursor(1,2);
lcd.print("o"); //Feld 1 = o
}
}
void auswahl9 () {
pinWert9 = digitalRead(taster9);
if (pinWert9 == 0){
zaehler9 = zaehler9 + 1; //Knopf 9 wird gedrückt -> zaehler 9 geht 1 rauf
delay(300);
}
if (zaehler9 == 1) { //Wenn Knopf 9 1x gedrückt wurde
lcd.setCursor(2,2);
lcd.print("x"); //Feld 1 = x
}
if (zaehler9 == 2) { //Wenn Knopf 9 2x gedrückt wurde
lcd.setCursor(2,2);
lcd.print("o"); //Feld 1 = o
}
}
void gewonnen () {
if(zaehler1 == 1 && zaehler2 == 1 && zaehler3 == 1){ //Waagerechte 1 = x
delay(2000);
lcd.clear();
lcd.print("X WON!!");
}
if(zaehler4 == 1 && zaehler5 == 1 && zaehler6 == 1){ //Waagerechte 2 = x
delay(2000);
lcd.clear();
lcd.print("X WON!!");
}
if(zaehler7 == 1 && zaehler8 == 1 && zaehler9 == 1){ //Waagerechte 3 = x
delay(2000);
lcd.clear();
lcd.print("X WON!!");
}
if(zaehler1 == 1 && zaehler4 == 1 && zaehler7 == 1){ //Senkrechte 1 = x
delay(2000);
lcd.clear();
lcd.print("X WON!!");
}
if(zaehler2 == 1 && zaehler5 == 1 && zaehler8 == 1){ //Senkrechte 2 = x
delay(2000);
lcd.clear();
lcd.print("X WON!!");
}
if(zaehler3 == 1 && zaehler6 == 1 && zaehler9 == 1){ //Senkrechte 3 = x
delay(2000);
lcd.clear();
lcd.print("X WON!!");
}
if(zaehler1 == 1 && zaehler5 == 1 && zaehler9 == 1){ //Diagonale 1 = x
delay(2000);
lcd.clear();
lcd.print("X WON!!");
}
if(zaehler3 == 1 && zaehler5 == 1 && zaehler7 == 1){ //Diagonale 2 = x
delay(2000);
lcd.clear();
lcd.print("X WON!!");
}
if(zaehler1 == 2 && zaehler2 == 2 && zaehler3 == 2){ //Waagerechte 1 = o
delay(2000);
lcd.clear();
lcd.print("O WON!!");
}
if(zaehler4 == 2 && zaehler5 == 2 && zaehler6 == 2){ //Waagerechte 2 = o
delay(2000);
lcd.clear();
lcd.print("O WON!!");
}
if(zaehler7 == 2 && zaehler8 == 2 && zaehler9 == 2){ //Waagerechte 3 = o
delay(2000);
lcd.clear();
lcd.print("O WON!!");
}
if(zaehler1 == 2 && zaehler4 == 2 && zaehler7 == 2){ //Senkrechte 1 = o
delay(2000);
lcd.clear();
lcd.print("O WON!!");
}
if(zaehler2 == 2 && zaehler5 == 2 && zaehler8 == 2){ //Senkrechte 2 = o
delay(2000);
lcd.clear();
lcd.print("O WON!!");
}
if(zaehler3 == 2 && zaehler6 == 2 && zaehler9 == 2){ //Senkrechte 3 = o
delay(2000);
lcd.clear();
lcd.print("O WON!!");
}
if(zaehler1 == 2 && zaehler5 == 2 && zaehler9 == 2){ //Diagonale 1 = o
delay(2000);
lcd.clear();
lcd.print("O WON!!");
}
if(zaehler3 == 2 && zaehler5 == 2 && zaehler7 == 2){ //Diagonale 2 = o
delay(2000);
lcd.clear();
lcd.print("O WON!!");
}
}