Untitled
unknown
plain_text
2 years ago
7.0 kB
14
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