#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int pot=0;
int lastpot=20;
int seed=0;
int counter=40;
int speed=40;
int scrollcounter=0;
bool currentloop=true;
uint8_t arrow[8] = {
0b00100,
0b01010,
0b10001,
0b10001,
0b10001,
0b11111,
0b00000,
0b00000,
};
uint8_t darkarrow[8] = {
0b11011,
0b10101,
0b01110,
0b01110,
0b01110,
0b00000,
0b11111,
0b11111,
};
void setup() {
lcd.begin(16,2);
lcd.createChar(3,arrow);
lcd.createChar(2,darkarrow);
pinMode(7,INPUT_PULLUP);
pinMode(6,OUTPUT);
pinMode(8,OUTPUT);
Serial.begin(115200);
}
void loop() {
lcd.clear();
lcd.print(" game 1 game 2 ");
for(int i=0;i<16;i++){
lcd.setCursor(i,1);
if(i==7||i==8){
continue;
}
lcd.write(255);
}
while(digitalRead(7)==HIGH){
lcd.setCursor(lastpot,1);
if(lastpot==7||lastpot==8){
lcd.print(" ");
}
else{
lcd.write(255);
}
pot=map(analogRead(A0),0,1023,0,15);
lastpot=pot;
lcd.setCursor(pot,1);
if(pot<7||pot>8){
lcd.print("\x02");
}
else{
lcd.print("\x03");
}
delay(100);
}
if(pot<7){
game1();
}
else if(pot>8){
game2();
}
}
int flashGreen() {
digitalWrite(8, HIGH);
delay(400);
digitalWrite(8, LOW);
}
int game1() {
flashGreen();
lcd.clear();
seed=0;
speed=40;
counter=50;
while(1){
if(counter>speed){
if(bitRead(seed,pot)==1){ //check if ^ is under #
digitalWrite(6,HIGH);
delay(500);
digitalWrite(6,LOW);
return;
}
for(int i=0;i<16;i++){ //clear top row
lcd.setCursor(i,0);
lcd.print(" ");
}
seed=random(0,65535); //generate and print random # top row
for(int i=15;i>=0;i--){
lcd.setCursor(i,0);
if(bitRead(seed,i)==1){
lcd.print("#");
}
}
counter=0;
if(speed>10){
speed=speed-4;
}
}
else{
counter++;
}
lcd.setCursor(lastpot,1); //draw ^ at current position
lcd.print(" ");
pot=map(analogRead(A0),0,1023,0,15);
lastpot=pot;
lcd.setCursor(pot,1);
lcd.print("\x03");
delay(100);
}
}
int game2() {
flashGreen();
counter=0;
int obst[25];
int row=0;
while(1){
if(currentloop==true){ //make and draw blocks
seed=random(1,9);
for(int i=0;i<seed;i++){ //generate random block length
obst[1+i]=1;
}
row=random(0,2);
for(int i=0;i<25;i++){
Serial.println(String(obst[i]));
}
Serial.println("break");
currentloop=false;
}
if(counter>7){
lcd.clear();
for(int i=0;i<16;i++){ //draw blocks
lcd.setCursor(i,row);
if(bitRead(obst[i+scrollcounter],0)==1){
lcd.write(255);
}
}
counter=0;
scrollcounter++;
}
if(scrollcounter>seed+17){
currentloop=true;
scrollcounter=0;
}
counter++;
lcd.setCursor(lastpot,1); //draw ^ at current position
lcd.print(" ");
pot=map(analogRead(A0),0,1023,0,15);
lastpot=pot;
lcd.setCursor(pot,1);
lcd.print("\x03");
delay(100);
}
}