Operácie

Šach: Rozdiel medzi revíziami

Z SensorWiki

Riadok 1: Riadok 1:
Záverečný projekt predmetu DTV / LS2023 - '''Meno Priezvisko'''
+
Záverečný projekt predmetu DTV / LS2023 - '''Peter Marosi, Botond Csóka Botond'''
  
  
Riadok 32: Riadok 32:
  
 
<tabs>
 
<tabs>
<tab name="AVR C-code"><source lang="c++" style="background: LightYellow;">
+
<tab name="Arduino Code"><source lang="c++" style="background: LightYellow;">
#include <avr/io.h>
+
#include <LiquidCrystal.h>
  
int main(void)
+
LiquidCrystal lcd(1, 2, 4, 5, 6, 7);
{
+
const int buttonPin = 9;
  unsigned int measuredValue;
+
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;
  
   while (1)
+
void setup() {
  {
+
  lcd.begin(16, 2);
     /*  relax  */
+
  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 zo dňa a času 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

Vývojová doska ACROB.

Literatúra:


Analýza a opis riešenia

Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...

RGB LED.

Nezabudnite doplniť schému zapojenia!

Schéma zapojenia LCD displeja.


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.

Aplikácia.

Video:

Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.