Šach: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
Bez shrnutí editace |
||
Riadok 1: | Riadok 1: | ||
Záverečný projekt predmetu DTV / LS2023 - ''' | Záverečný projekt predmetu DTV / LS2023 - '''Peter Marosi, Botond Csóka Botond''' | ||
Riadok 32: | Riadok 32: | ||
<tabs> | <tabs> | ||
<tab name=" | <tab name="Arduino Code"><source lang="c++" style="background: LightYellow;"> | ||
#include < | #include <LiquidCrystal.h> | ||
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); | |||
{ | const int buttonPin = 9; | ||
const int buttonPin2 = 10; | |||
int buttonState = 0; | |||
int buttonState2 = 0; | |||
int gameTimeIndex = 0; | |||
float gameTimes[] = {3, 5, 15, 60}; // Time in minutes | |||
int currentPlayer = 0; // Current player 0/1 | |||
unsigned long startTime = 0; // Start Time | |||
unsigned long elapsedTime = 0; // Elapsed Time | |||
bool isInMenu = true; | |||
unsigned long player1ElapsedTime = 0; | |||
unsigned long player2ElapsedTime = 0; | |||
unsigned long remainingTime=0; | |||
unsigned long isondisplay=0; | |||
void setup() { | |||
lcd.begin(16, 2); | |||
/ | pinMode(buttonPin, INPUT_PULLUP); | ||
pinMode(buttonPin2, INPUT_PULLUP); | |||
} | |||
void loop() { | |||
if (isInMenu) { // Menu | |||
if (isondisplay==0){ | |||
lcd.clear(); | |||
lcd.print("Choose time"); | |||
lcd.setCursor(0, 1); | |||
if (gameTimes[gameTimeIndex] < 10) { | |||
lcd.print("0"); | |||
} | |||
lcd.print(gameTimes[gameTimeIndex]); | |||
lcd.print(":00"); | |||
isondisplay=1; | |||
} | |||
if (buttonState != digitalRead(buttonPin)) { | |||
// BTN 1, change time intervals | |||
isondisplay=0; | |||
buttonState = !buttonState; | |||
if (buttonState == LOW) { | |||
gameTimeIndex = (gameTimeIndex + 1) % (sizeof(gameTimes) / sizeof(gameTimes[0])); | |||
delay(500); // Delay to prevent rebounce | |||
} | |||
} | |||
if (buttonState2 != digitalRead(buttonPin2)) { | |||
// BTN 2, Start | |||
buttonState2 = !buttonState2; | |||
if (buttonState2 == LOW) { | |||
currentPlayer = 0; | |||
elapsedTime = 0; | |||
startTime = millis(); | |||
isInMenu = false; | |||
lcd.clear(); | |||
lcd.print("Player 1"); | |||
delay(1000); // Delay to display the message | |||
} | |||
} | |||
} | } | ||
else { | |||
isondisplay=0; | |||
// Game mode | |||
if (currentPlayer == 0) { | |||
// Current P0 | |||
unsigned long currentTime = millis(); | |||
elapsedTime += currentTime - startTime; | |||
startTime = currentTime; | |||
remainingTime = (gameTimes[gameTimeIndex] * 60 - elapsedTime / 1000) * 1000; | |||
} else { | |||
// Current P1 | |||
player2ElapsedTime += currentTime - startTime; | |||
startTime = currentTime; | |||
remainingTime = (gameTimes[gameTimeIndex] * 60 - player2ElapsedTime / 1000) * 1000; | |||
} | |||
return(0); | |||
if (remainingTime <= 0) { // Time's up | |||
lcd.clear(); | |||
if(currentPlayer==0){ | |||
lcd.print("Player 1"); | |||
} | |||
else{ | |||
lcd.print("Player 2"); | |||
} | |||
lcd.setCursor(0, 1); | |||
lcd.print("Time's Up"); | |||
delay(1000); // Delay to display the message | |||
while (digitalRead(buttonPin) == LOW && digitalRead(buttonPin2) == LOW) { } | |||
// Waiting for button press | |||
delay(320); | |||
isInMenu = true; | |||
lcd.clear(); | |||
return; | |||
} | |||
else { | |||
// Display Time | |||
lcd.setCursor(0, 1); | |||
lcd.print("Time: "); | |||
if (remainingTime / 1000 / 60 < 10) { | |||
lcd.print("0"); | |||
} | |||
lcd.print(remainingTime / 1000 / 60); | |||
lcd.print(":"); | |||
if ((remainingTime / 1000) % 60 < 10) { | |||
lcd.print("0"); | |||
} | |||
lcd.print((remainingTime / 1000) % 60); | |||
} | |||
if (buttonState != digitalRead(buttonPin) && buttonState2 != digitalRead(buttonPin2)) { | |||
// BTN1 & BTN2 pressed, back to menu | |||
buttonState = !buttonState; | |||
buttonState2 = !buttonState2; | |||
if (buttonState == LOW && buttonState2 == LOW) { | |||
isInMenu = true; | |||
lcd.clear(); | |||
} | |||
} | |||
if (buttonState2 != digitalRead(buttonPin2) && currentPlayer==0) { | |||
// BTN2, change players | |||
buttonState2 = !buttonState2; | |||
if (buttonState2 == LOW) { | |||
currentPlayer = 1; | |||
startTime = millis(); | |||
lcd.setCursor(0, 0); | |||
lcd.print("Player 2 "); // Player 2 text | |||
} | |||
} | |||
if (buttonState != digitalRead(buttonPin) && currentPlayer == 1) { | |||
// BTN1, change players | |||
buttonState = !buttonState; | |||
if (buttonState == LOW) { | |||
currentPlayer = 0; | |||
startTime = millis(); | |||
lcd.setCursor(0, 0); | |||
lcd.print("Player 1 "); // Player 1 text | |||
} | |||
} | |||
} | |||
} | } | ||
Verzia z 15:36, 26. máj 2023
Záverečný projekt predmetu DTV / LS2023 - Peter Marosi, Botond Csóka Botond
Zadanie
Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie
Literatúra:
Analýza a opis riešenia
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...
Nezabudnite doplniť schému zapojenia!
Algoritmus a program
Algoritmus programu je....
#include <LiquidCrystal.h>
LiquidCrystal lcd(1, 2, 4, 5, 6, 7);
const int buttonPin = 9;
const int buttonPin2 = 10;
int buttonState = 0;
int buttonState2 = 0;
int gameTimeIndex = 0;
float gameTimes[] = {3, 5, 15, 60}; // Time in minutes
int currentPlayer = 0; // Current player 0/1
unsigned long startTime = 0; // Start Time
unsigned long elapsedTime = 0; // Elapsed Time
bool isInMenu = true;
unsigned long player1ElapsedTime = 0;
unsigned long player2ElapsedTime = 0;
unsigned long remainingTime=0;
unsigned long isondisplay=0;
void setup() {
lcd.begin(16, 2);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);
}
void loop() {
if (isInMenu) { // Menu
if (isondisplay==0){
lcd.clear();
lcd.print("Choose time");
lcd.setCursor(0, 1);
if (gameTimes[gameTimeIndex] < 10) {
lcd.print("0");
}
lcd.print(gameTimes[gameTimeIndex]);
lcd.print(":00");
isondisplay=1;
}
if (buttonState != digitalRead(buttonPin)) {
// BTN 1, change time intervals
isondisplay=0;
buttonState = !buttonState;
if (buttonState == LOW) {
gameTimeIndex = (gameTimeIndex + 1) % (sizeof(gameTimes) / sizeof(gameTimes[0]));
delay(500); // Delay to prevent rebounce
}
}
if (buttonState2 != digitalRead(buttonPin2)) {
// BTN 2, Start
buttonState2 = !buttonState2;
if (buttonState2 == LOW) {
currentPlayer = 0;
elapsedTime = 0;
startTime = millis();
isInMenu = false;
lcd.clear();
lcd.print("Player 1");
delay(1000); // Delay to display the message
}
}
}
else {
isondisplay=0;
// Game mode
if (currentPlayer == 0) {
// Current P0
unsigned long currentTime = millis();
elapsedTime += currentTime - startTime;
startTime = currentTime;
remainingTime = (gameTimes[gameTimeIndex] * 60 - elapsedTime / 1000) * 1000;
} else {
// Current P1
player2ElapsedTime += currentTime - startTime;
startTime = currentTime;
remainingTime = (gameTimes[gameTimeIndex] * 60 - player2ElapsedTime / 1000) * 1000;
}
if (remainingTime <= 0) { // Time's up
lcd.clear();
if(currentPlayer==0){
lcd.print("Player 1");
}
else{
lcd.print("Player 2");
}
lcd.setCursor(0, 1);
lcd.print("Time's Up");
delay(1000); // Delay to display the message
while (digitalRead(buttonPin) == LOW && digitalRead(buttonPin2) == LOW) { }
// Waiting for button press
delay(320);
isInMenu = true;
lcd.clear();
return;
}
else {
// Display Time
lcd.setCursor(0, 1);
lcd.print("Time: ");
if (remainingTime / 1000 / 60 < 10) {
lcd.print("0");
}
lcd.print(remainingTime / 1000 / 60);
lcd.print(":");
if ((remainingTime / 1000) % 60 < 10) {
lcd.print("0");
}
lcd.print((remainingTime / 1000) % 60);
}
if (buttonState != digitalRead(buttonPin) && buttonState2 != digitalRead(buttonPin2)) {
// BTN1 & BTN2 pressed, back to menu
buttonState = !buttonState;
buttonState2 = !buttonState2;
if (buttonState == LOW && buttonState2 == LOW) {
isInMenu = true;
lcd.clear();
}
}
if (buttonState2 != digitalRead(buttonPin2) && currentPlayer==0) {
// BTN2, change players
buttonState2 = !buttonState2;
if (buttonState2 == LOW) {
currentPlayer = 1;
startTime = millis();
lcd.setCursor(0, 0);
lcd.print("Player 2 "); // Player 2 text
}
}
if (buttonState != digitalRead(buttonPin) && currentPlayer == 1) {
// BTN1, change players
buttonState = !buttonState;
if (buttonState == LOW) {
currentPlayer = 0;
startTime = millis();
lcd.setCursor(0, 0);
lcd.print("Player 1 "); // Player 1 text
}
}
}
}
#include <avr/io.h>
void adc_init(void); // A/D converter initialization
unsigned int adc_read(char a_pin);
Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x zdrojaky.zip:
Zdrojový kód: zdrojaky.zip
Overenie
Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia. Na konci uvádzame fotku záverečnej obrazovky pred resetom. Vypísaný je tu priemerný čas a najlepší čas.
Video:
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.