Operácie

Šach: Rozdiel medzi revíziami

Zo stránky SensorWiki

StudentDTV (diskusia | príspevky)
Bez shrnutí editace
StudentDTV (diskusia | príspevky)
Bez shrnutí editace
Riadok 58: Riadok 58:
void loop() {
void loop() {


   if (isInMenu) {                                 // Menu
   if (isInMenu) {                               // Menu
      
      
     if (isondisplay==0){
     if (isondisplay==0){
Riadok 72: Riadok 72:
     }
     }
     if (buttonState != digitalRead(buttonPin)) {
     if (buttonState != digitalRead(buttonPin)) {
                                                  // BTN 1, change time intervals
                                                // BTN 1, change time intervals
       isondisplay=0;
       isondisplay=0;
       buttonState = !buttonState;
       buttonState = !buttonState;
Riadok 82: Riadok 82:


     if (buttonState2 != digitalRead(buttonPin2)) {
     if (buttonState2 != digitalRead(buttonPin2)) {
                                                  // BTN 2, Start
                                                // BTN 2, Start
       buttonState2 = !buttonState2;
       buttonState2 = !buttonState2;
       if (buttonState2 == LOW) {
       if (buttonState2 == LOW) {
Riadok 91: Riadok 91:
         lcd.clear();
         lcd.clear();
         lcd.print("Player 1");
         lcd.print("Player 1");
         delay(1000);                             // Delay to display the message
         delay(1000);                             // Delay to display the message
       }
       }
     }
     }
Riadok 97: Riadok 97:
     else {
     else {
       isondisplay=0;
       isondisplay=0;
                                                  // Game mode
                                                // Game mode
     if (currentPlayer == 0) {
     if (currentPlayer == 0) {
                                                  // Current P0
                                                // Current P0
       unsigned long currentTime = millis();
       unsigned long currentTime = millis();
       elapsedTime += currentTime - startTime;
       elapsedTime += currentTime - startTime;
Riadok 105: Riadok 105:
       remainingTime = (gameTimes[gameTimeIndex] * 60 - elapsedTime / 1000) * 1000;
       remainingTime = (gameTimes[gameTimeIndex] * 60 - elapsedTime / 1000) * 1000;
     } else {
     } else {
                                                  // Current P1
                                                // Current P1
       player2ElapsedTime += currentTime - startTime;
       player2ElapsedTime += currentTime - startTime;
       startTime = currentTime;
       startTime = currentTime;
Riadok 114: Riadok 114:




  if (remainingTime <= 0) {                         // Time's up
  if (remainingTime <= 0) {                       // Time's up


   lcd.clear();
   lcd.clear();
Riadok 125: Riadok 125:
   lcd.setCursor(0, 1);
   lcd.setCursor(0, 1);
   lcd.print("Time's Up");
   lcd.print("Time's Up");
   delay(1000);                                     // Delay to display the message
   delay(1000);                                   // Delay to display the message
    
    
   while (digitalRead(buttonPin) == LOW && digitalRead(buttonPin2) == LOW) {  }
   while (digitalRead(buttonPin) == LOW && digitalRead(buttonPin2) == LOW) {  }


                                                    // Waiting for button press
                                                // Waiting for button press
   delay(320);
   delay(320);
   isInMenu = true;
   isInMenu = true;
Riadok 137: Riadok 137:
}
}
     else {
     else {
                                                    // Display Time
                                                // Display Time
        
        
       lcd.setCursor(0, 1);
       lcd.setCursor(0, 1);
Riadok 154: Riadok 154:


     if (buttonState != digitalRead(buttonPin) && buttonState2 != digitalRead(buttonPin2)) {
     if (buttonState != digitalRead(buttonPin) && buttonState2 != digitalRead(buttonPin2)) {
                                                    // BTN1 & BTN2 pressed, back to menu
                                                // BTN1 & BTN2 pressed, back to menu
       buttonState = !buttonState;
       buttonState = !buttonState;
       buttonState2 = !buttonState2;
       buttonState2 = !buttonState2;
Riadok 164: Riadok 164:


   if (buttonState2 != digitalRead(buttonPin2) && currentPlayer==0) {
   if (buttonState2 != digitalRead(buttonPin2) && currentPlayer==0) {
                                                      // BTN2, change players
                                                // BTN2, change players
   buttonState2 = !buttonState2;
   buttonState2 = !buttonState2;
   if (buttonState2 == LOW) {
   if (buttonState2 == LOW) {
Riadok 175: Riadok 175:


if (buttonState != digitalRead(buttonPin) && currentPlayer == 1) {
if (buttonState != digitalRead(buttonPin) && currentPlayer == 1) {
                                                      // BTN1, change players
                                                // BTN1, change players
   buttonState = !buttonState;
   buttonState = !buttonState;
   if (buttonState == LOW) {
   if (buttonState == LOW) {
Riadok 187: Riadok 187:
}
}


</source></tab>
<tab name="filename.h"><source lang="c++" style="background: LightYellow;">
#include <avr/io.h>


void adc_init(void);                                  // A/D converter initialization
unsigned int adc_read(char a_pin);
</source></tab>
</tabs>
</tabs>



Verzia z 15:38, 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....


<tab name="Arduino Code"><source lang="c++" style="background: LightYellow;">

  1. 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
 }
   }
 }

}


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.