Untitled

 avatar
unknown
plain_text
a year ago
7.0 kB
5
Indexable
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Encoder.h>
#include <Adafruit_NeoPixel.h>

#define buttonCancel 5
#define buttonArcade 9
#define buttonPause 6
#define buttonConfirm 8

#define ledPin 10

LiquidCrystal_I2C lcd(0x27, 20, 4);
Encoder enc(2,3);
Adafruit_NeoPixel ledRing = Adafruit_NeoPixel(12, ledPin, NEO_GRB + NEO_KHZ800);

String lineClear = "            ";

long position = 0;

long time = 0;
long timeSet = 0;
long timeSeconds = 0;
long timeMinutes = 0;
long timeHours = 0;

unsigned long timeAcutalSeconds = 0;
unsigned long timeSavedSeconds = 0;

int color = 0;
int R = 0;
int G = 0;
int B = 0;

int players = 2; //zmienna do określenia ilości graczy
int player = 1; // zmienna do określenia kolejności graczy

int i = 0;

int player1 = 0; // gracz - tutaj przypisujemy kolejność i jednocześnie kolor
int player2 = 0;
int player3 = 0;
int player4 = 0;
int player5 = 0;
int player6 = 0;

int menuMode = 0;

boolean pauseStatus = false;



void setup() {

  Serial.begin(9600);

  lcd.init();
  lcd.backlight();

  ledRing.begin();
  ledRing.show();


  pinMode(buttonPause, INPUT_PULLUP);
  pinMode(buttonCancel, INPUT_PULLUP);
  pinMode(buttonArcade, INPUT_PULLUP); 
  pinMode(buttonConfirm, INPUT_PULLUP);


}

void encoderRead(){ //odczyt wartości z pokrętła
  position = 0;
  long newPos = enc.read();
  
    if(newPos != position){
      position = newPos / 4;
     }
}

void ledRingConst(){ // zapalenie ringu ledowego
  ledRing.setPixelColor(0, ledRing.Color(R,G,B));
  ledRing.setPixelColor(1, ledRing.Color(R,G,B));
  ledRing.setPixelColor(2, ledRing.Color(R,G,B));
  ledRing.setPixelColor(3, ledRing.Color(R,G,B));
  ledRing.setPixelColor(4, ledRing.Color(R,G,B));
  ledRing.setPixelColor(5, ledRing.Color(R,G,B));
  ledRing.setPixelColor(6, ledRing.Color(R,G,B));
  ledRing.setPixelColor(7, ledRing.Color(R,G,B));
  ledRing.setPixelColor(8, ledRing.Color(R,G,B));
  ledRing.setPixelColor(9, ledRing.Color(R,G,B));
  ledRing.setPixelColor(10, ledRing.Color(R,G,B));
  ledRing.setPixelColor(11, ledRing.Color(R,G,B));
  
  ledRing.show();
}

void timeSetting(){ //ustawienie kursora na ekranie i czasu

  timeMinutes = time / 60;
    if(timeMinutes > 9){
      lcd.setCursor(6,2);
      lcd.print(timeMinutes);
    }else{
      lcd.setCursor(6,2);
      lcd.print(" ");
      lcd.setCursor(7,2);
      lcd.print(timeMinutes);
    }

    lcd.setCursor(8,2);
    lcd.print(":");

    timeSeconds = time - (timeMinutes * 60);
    lcd.setCursor(9,2);  
    lcd.print(timeSeconds);

    if(timeSeconds == 0){
      lcd.setCursor(10,2);
      lcd.print("0");
    }

}
void loop() {

  while(menuMode == 0){
    lcd.setCursor(0,0);
    lcd.print("-CARCASSONE-BRZDEK-TERRAFORMACJA-KRYPTYDA-7 CUDOW SWIATA-DISCOVERY-BRASS-ARNAK-");
    lcd.scrollDisplayLeft();
    delay(400);

    if(digitalRead(buttonConfirm) == LOW || digitalRead(buttonArcade) == LOW){
      menuMode++;
      lcd.clear();
      delay(200);
    }
  }

    
  while(menuMode == 1){  //okno menu z wyborem ilości graczy
      
      lcd.setCursor(0,0);
      lcd.print("PODAJ LICZBE GRACZY");
      lcd.setCursor(5,1);
      lcd.print("OD 2 DO 6:" + lineClear);
      

      encoderRead();
      players = position; 
      Serial.println(position);

      lcd.setCursor(0,2);
      lcd.print(players + lineClear);

      if(digitalRead(buttonConfirm) == LOW){
        menuMode++;
        lcd.clear();
        delay(500);
      }
      
      
    }



  while(menuMode == 2){ //okno menu z wyborem kolejności graczy (kolorów)


    if(players > 6 || players < 2){ 
      lcd.setCursor(0,0);
      lcd.print("BLEDNA ILOSC GRACZY!");
      lcd.setCursor(2,1);
      lcd.print("PODAJ OD 2 DO 6");
      delay(3000);
      menuMode--;
      lcd.clear();
    }


    while(i < players && menuMode == 2){
      lcd.setCursor(0,0);
      lcd.print("KOLOR " + String(player) + ". GRACZA");
         
      encoderRead();
      color = position; 
      Serial.println(color);

      lcd.setCursor(0,2);
      lcd.print(color + lineClear);

      if(digitalRead(buttonCancel) == LOW){
        menuMode--;
      }

      switch(color){
        case 1:
          R = 200;
          G = 0;
          B = 0;
          ledRingConst();
          break;
        case 2:
          R = 0;
          G = 200;
          B = 0;
          ledRingConst();
          break;
        case 3:
           R = 0;
           G = 0;
           B = 200;
           ledRingConst();
           break;
        }

      if(digitalRead(buttonConfirm) == LOW){
        if(player == 1){
            player1 = color;
        }

        if(player == 2){
          player2 = color;
        }

        if(player == 3){
          player3 = color;
        }

        if(player == 4){
          player4 = color;
        }
        
        if(player == 5){
          player5 = color;
        }

        if(player == 6){
          player6 = color;
        }

        player++;
        i++;
        delay(500);
      }
    
      if(player > players){
        menuMode++;
        lcd.clear();
      }
    

  }

  while(menuMode == 3){ //okno menu z ustawieniem limitu czasu ruchu gracza


    lcd.setCursor(2,0);
    lcd.print("USTAW CZAS RUCHU");
         
    encoderRead();
    time = position * 15; 
    Serial.println(timeSet);

    timeSetting();


    if(digitalRead(buttonConfirm) == LOW){
      timeSet = time;
      menuMode++;
      lcd.clear();
    }

    if(digitalRead(buttonCancel) == LOW){
      menuMode = 1;
      lcd.clear();
      player = 1;
      players = 0;
      i = 0;
      delay(100);
    }


  }

  while(menuMode == 4){
    lcd.setCursor(3,1);
    lcd.print("GRA USTAWIONA");
    lcd.setCursor(6,2);
    lcd.print("START?");
    delay(500);
    lcd.noDisplay();
    delay(500);
    lcd.display();

    if(digitalRead(buttonConfirm) == LOW){
      menuMode++;
      lcd.clear();
    }

    if(digitalRead(buttonCancel) == LOW){
      menuMode--;
      lcd.clear();
      timeSet = 0;
      delay(500);
    }
  }

  while(menuMode == 5){

    lcd.setCursor(0,0);
    lcd.print("Czas gry:");
    lcd.setCursor(0,1);
    lcd.print("Suma ruchow:");
    lcd.setCursor(0,2);
    lcd.print("Czas ruchu:");
    lcd.setCursor(0,3);
    lcd.print("MAGDA SZYBCIEJ!");

    if(digitalRead(buttonPause) == LOW){
      pauseStatus = true;
      //tutaj jakoś trzeba wymyśleć pauze, żeby działała zawsze i zatrzymywała wszystkie zegary
    }









    //tutaj miejsce na cały kod programu do liczenia czasu i przełączania graczy i kolorów 



  }
      














  }

     


  }
   
    




 


Editor is loading...
Leave a Comment