#define SET0(r,b) r&=~(1<<b)
#define SET1(r,b) r|=(1<<b)
#define TEST(r,b) (r&(1<<b))
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
bool lcdActive;
int body;
bool buttonLastState[4];
int long cas;
int nahodneCislo;
int long nezmackol = 2000;
int millisCas = 2000;
void setup() {
Serial.begin(9600);
randomSeed(analogRead(A0));
lcd.init();
lcd.backlight();
for(int i = 0; i < 4; i++) SET1(PORTB, i);
SET1(PCMSK0, PCINT0);
SET1(PCMSK0, PCINT1);
SET1(PCMSK0, PCINT2);
SET1(PCMSK0, PCINT3);
SET1(SREG, 7);
SET1(PCICR, PCIE0);
lcd.setCursor(0, 1);
lcd.print("Body: ");
lcd.setCursor(6, 1);
lcd.print(body);
lcd.setCursor(7, 0);
lcd.print("0");
}
void loop() {
if(body <= -10){
lcd.clear();
lcd.print("Prehral si");
while(1);
}
if(body >= 5){
lcd.clear();
lcd.print("Vyhral si");
while(1);
}
if(millis() >= cas){
nahodneCislo = random(1,5);
lcd.setCursor(7, 0);
lcd.print(nahodneCislo);
Serial.println(nahodneCislo);
cas += millisCas;
}
if(millis() >= nezmackol){
body--;
lcd.setCursor(0, 1);
lcd.print("Body: ");
lcd.setCursor(6, 1);
lcd.print(body);
nezmackol += millisCas;
}
if(lcdActive) {
lcdActive = false;
lcd.setCursor(0, 1);
lcd.print("Body: ");
lcd.setCursor(6, 1);
lcd.print(body);
lcd.print(" ");
lcd.setCursor(7, 0);
lcd.print(nahodneCislo);
}
}
ISR(PCINT0_vect){
if(TEST(PINB, 0) == 0 && nahodneCislo == 1){
lcdActive = true;
body++;
nahodneCislo = random(1,5);
cas += 1000;
Serial.println("Vosiel si 1");
Serial.println(nahodneCislo);
nezmackol = millis() + millisCas;
}
else if(TEST(PINB, 1) == 0 && nahodneCislo == 2){
lcdActive = true;
body++;
nahodneCislo = random(1,5);
cas += 1000;
Serial.println("Vosiel si 2");
Serial.println(nahodneCislo);
nezmackol = millis() + millisCas;
}
else if(TEST(PINB, 2) == 0 && nahodneCislo == 3){
lcdActive = true;
body++;
nahodneCislo = random(1,5);
cas += 1000;
Serial.println("Vosiel si 3");
Serial.println(nahodneCislo);
nezmackol = millis() + millisCas;
}
else if(TEST(PINB, 3) == 0 && nahodneCislo == 4){
lcdActive = true;
body++;
nahodneCislo = random(1,5);
cas += 1000;
Serial.println("Vosiel si 4");
Serial.println(nahodneCislo);
nezmackol = millis() + millisCas;
}
else if(TEST(PINB, 0) == 0 && nahodneCislo != 1){
lcdActive = true;
body = body - 2;
nahodneCislo = random(1,5);
cas += 1000;
Serial.println("Nevosiel si 1");
Serial.println(nahodneCislo);
}
else if(TEST(PINB, 1) == 0 && nahodneCislo != 2){
lcdActive = true;
body = body - 2;
nahodneCislo = random(1,5);
cas += 1000;
Serial.println("Nevosiel si 2");
Serial.println(nahodneCislo);
}
else if(TEST(PINB, 2) == 0 && nahodneCislo != 3){
lcdActive = true;
body = body - 2;
nahodneCislo = random(1,5);
cas += 1000;
Serial.println("Nevosiel si 3");
Serial.println(nahodneCislo);
}
else if(TEST(PINB, 3) == 0 && nahodneCislo != 4){
lcdActive = true;
body = body - 2;
nahodneCislo = random(1,5);
cas += 1000;
Serial.println("Nevosiel si 4");
Serial.println(nahodneCislo);
}
}