/*//**************************************************************************
Projeto 3 trabalho Fury Lost - 21
17/05=tentativa de menu com botao
19/05=criou o carinho estático
24/05=creditos em movimento
30/05=organizou os comentarios e funçoes
Scheligan
Renata
Gabrielly
Vanderlei
Botão A (porta 10)=Para baixo
Botão B (porta 8)=Para Selecionar
**************************************************************************/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define NUMFLAKES 10 // Number of snowflakes in the animation example
#define LOGO_HEIGHT 16
#define LOGO_WIDTH 16
void menu(void);//imprimi menu na tela
void botA(void);//BOTAO A PRESSIONADO
void botB(void);//BOTAO B PRESSIONADO
void credito(void);//aparece nome do grupo
void botao(void);
void carro(void);//imprimi carro
void ranking(void);//imprimi ranking já existente
void jogo(void);//aparece o jogo
int i=0;
int botaoA=1;//botao comeca com o valor 1
int botaoB=1;//botao comeca com o valor 1
void setup() {
Serial.begin(9600);
pinMode(10, INPUT_PULLUP);//porta do botao
pinMode(8, INPUT_PULLUP);//porta do botao
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
display.clearDisplay();//limpar a tela
}
void loop() {
// Serial.println(botaoB);//linha teste botaoB
// Serial.println(botaoA);//linha teste botaoA
menu();
//display.drawRect(6,10,65,10,SSD1306_BLACK);//teste para apagar o retangulo
// display.display();//atualiza a tela
botao();
if(botaoA==0 && i<=50){//verificando se botao A vale 0 e botao B vale 1
//Serial.println(botaoA);//linha teste botao
botA();//funcao que move o retangulo de posicao
}
if(botaoB==0){//verificando se botao B vale 0 e botao A vale 1
botB();//funcao que identifica oque foi selecionado para realizar
}
if(i>50){
i=0;//quando i passar da opcao 5 ele volta para a primeira
}
if(i==10){
//para apagar o retangulo quando ele pasar na opcao 5
display.drawRect(6,50,65,10,SSD1306_BLACK);
}
}
void menu(){
display.setTextSize(1);//tamanho da escrita
display.setTextColor(SSD1306_WHITE);//cor da escrita
display.setCursor(10,0);//indicar a posicao que vai ser impresso na tela
display.println(F("Menu"));//imprimir na tela
display.setTextSize(1);//tamanho da escrita
display.setTextColor(SSD1306_WHITE);//cor da escrita
display.setCursor(10,10);//indicar a posicao que vai ser impresso na tela
display.println(F("1-Jogar"));//imprimir na tela
display.setTextSize(1);//tamanho da escrita
display.setTextColor(SSD1306_WHITE);//cor da escrita
display.setCursor(10,20);//indicar a posicao que vai ser impresso na tela
display.println(F("2-Jogador"));//imprimir na tela
display.setTextSize(1);//tamanho da escrita
display.setTextColor(SSD1306_WHITE);//cor da escrita
display.setCursor(10,30);//indicar a posicao que vai ser impresso na tela
display.println(F("3-Ranking"));//imprimir na tela
display.setTextSize(1);//tamanho da escrita
display.setTextColor(SSD1306_WHITE);//cor da escrita
display.setCursor(10,40);//indicar a posicao que vai ser impresso na tela
display.println(F("4-Creditos"));//imprimir na tela
display.setTextSize(1);//tamanho da escrita
display.setTextColor(SSD1306_WHITE);//cor da escrita
display.setCursor(10,50);//indicar a posicao que vai ser impresso na tela
display.println(F("5-Sair"));//imprimir na tela
display.display();//atualiza a tela
delay(100);
}
void botao(void){
botaoA= digitalRead(10);
delay(10);
botaoB= digitalRead(8);
delay(10);
}
void carro(){
display.fillRect(10,30,20,10,SSD1306_WHITE);//desenha um retangulo preenchido
display.drawRect(9,26,8,5,SSD1306_WHITE);//desenha o contorno de um retangulo
display.drawRect(9,40,8,5,SSD1306_WHITE);//desenha o contorno de um retangulo
display.drawRect(23,26,8,5,SSD1306_WHITE);//desenha o contorno de um retangulo
display.drawRect(23,40,8,5,SSD1306_WHITE);//desenha o contorno de um retangulo
display.display();//atualiza a tela
delay(30000);//espera 30 segundos
}
void ranking(){//imprimi o ranking na tela
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10,20);//indicar a posicao que vai ser impresso na tela
display.println(F("Penellope 350"));
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10,30);//indicar a posicao que vai ser impresso na tela
display.println(F("Gustavo 300"));
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10,40);//indicar a posicao que vai ser impresso na tela
display.println(F("Allan 299"));
display.display();
}
void jogo(){//funcao do jogo
//int j=10;
i=0;
do{
botao();
delay(2);
if(botaoA==0){
botA();
if(i>50){
i=0;
}
}
//Serial.println(botaoA);
display.setTextSize(1);//tamanho da escrita
display.setTextColor(SSD1306_WHITE);//cor da escrita
display.setCursor(10,0);//indicar a posicao que vai ser impresso na tela
display.println(F("Jogadores"));//imprimir na tela
display.setTextSize(1);//tamanho da escrita
display.setTextColor(SSD1306_WHITE);//cor da escrita
display.setCursor(10,10);//indicar a posicao que vai ser impresso na tela
display.println(F("Gustavo"));//imprimir na tela
display.setTextSize(1);//tamanho da escrita
display.setTextColor(SSD1306_WHITE);//cor da escrita
display.setCursor(10,20);//indicar a posicao que vai ser impresso na tela
display.println(F("Allan"));//imprimir na tela
display.setTextSize(1);//tamanho da escrita
display.setTextColor(SSD1306_WHITE);//cor da escrita
display.setCursor(10,30);//indicar a posicao que vai ser impresso na tela
display.println(F("Penellope"));//imprimir na tela
display.setTextSize(1);//tamanho da escrita
display.setTextColor(SSD1306_WHITE);//cor da escrita
display.setCursor(10,40);//indicar a posicao que vai ser impresso na tela
display.println(F("Mario"));//imprimir na tela
display.setTextSize(1);//tamanho da escrita
display.setTextColor(SSD1306_WHITE);//cor da escrita
display.setCursor(10,50);//indicar a posicao que vai ser impresso na tela
display.println(F("Mickey"));//imprimir na tela
display.display();//atualiza a tela
delay(2000);
if( botaoB==0){
display.clearDisplay();
display.display();
carro();//funcao imprimi o carro
break;
}
}while(botaoB==1);
/*if(botA-botB==-1){//mexer o carro em andamento
display.fillRect(10,30+j,20,10,SSD1306_WHITE);
display.drawRect(9,26+j,8,5,SSD1306_WHITE);
display.drawRect(9,40+j,8,5,SSD1306_WHITE);
display.drawRect(23,26+j,8,5,SSD1306_WHITE);
display.drawRect(23,40+j,8,5,SSD1306_WHITE);
}*/
}
void credito(){//funcao imprimi creditos em movimento na tela
int j=0;
while(j<=64){//enquanto j for do tamanho ou menor que a tela
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10,j);//indicar a posicao que vai ser impresso na tela
display.println(F("Grupo 21"));//imprimi na tela
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10,j+10);//indicar a posicao que vai ser impresso na tela
display.println(F("Developer:Scheligan"));
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10,j+20);//indicar a posicao que vai ser impresso na tela
display.println(F("Developer: Renata"));
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10,j+30);//indicar a posicao que vai ser impresso na tela
display.println(F("Designer: Gabrielly"));
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10,j+40);//indicar a posicao que vai ser impresso na tela
display.println(F("Designer: Vanderlei"));
display.display();//atualiza a tela
display.setTextSize(1);
display.setTextColor(SSD1306_BLACK);//cor da escrita em preto para apagar
display.setCursor(10,j);//indicar a posicao que vai ser impresso na tela
display.println(F("Grupo 21"));
display.setTextSize(1);
display.setTextColor(SSD1306_BLACK);//cor da escrita em preto para apagar
display.setCursor(10,j+10);//indicar a posicao que vai ser impresso na tela
display.println(F("Developer:Scheligan"));
display.setTextSize(1);
display.setTextColor(SSD1306_BLACK);//cor da escrita em preto para apagar
display.setCursor(10,j+20);//indicar a posicao que vai ser impresso na tela
display.println(F("Developer: Renata"));
display.setTextSize(1);
display.setTextColor(SSD1306_BLACK);//cor da escrita em preto para apagar
display.setCursor(10,j+30);//indicar a posicao que vai ser impresso na tela
display.println(F("Designer: Gabrielly"));
display.setTextSize(1);
display.setTextColor(SSD1306_BLACK);//cor da escrita em preto para apagar
display.setCursor(10,j+40);//indicar a posicao que vai ser impresso na tela
display.println(F("Designer: Vanderlei"));
j++;//aumenta o valor de j
}
}
void botA(){//imprimi o retangulo na tela
botao();
i+=10;//cada vez que selecionar o botao vai aumentando o i para ele mudar a posicao
display.drawRect(6,i-10,65,10,SSD1306_BLACK);// para apagar o retangulo anterior
display.drawRect(6,i,65,10,SSD1306_WHITE);//imprimi retangulo na nova posicao
display.drawRect(6,60,65,10,SSD1306_BLACK);//apagar o retangulo na posicao 60 pq nao tem opcao
display.display();//atualiza a tela
//Serial.println(i);//teste valor de i
delay(100);
}
void botB(){
botao();
display.clearDisplay();//limpar tela
display.display();//atualizar a tela
switch(i){//dependendo do valor de i ele vai realizar uma funcao
case 10: //selecionou jogar
jogo();//funcao jogo
display.display();//atualiza a tela
delay(100);
display.clearDisplay();//limpar a tela
break;
case 20: //selecionou jogador
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10,20);//indicar a posicao que vai ser impresso na tela
display.println(F("Cadastre um novo jogador"));//imprimi na tela
display.display();//atualiza a tela
delay(100);
display.clearDisplay();//limpa a tela
break;
case 30: //selecionou ranking
ranking();//funcao ranking
delay(30000);//espera 30 segundos
display.clearDisplay();//limpar a tela
break;
case 40: //selecionou creditos
credito();//funcao credito
display.display();//atualiza a tela
delay(100);
display.clearDisplay();//limpa a tela
break;
case 50: //selecionou sair
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10,20);
display.println(F("Ate mais"));//imprimi na tela
display.display();//atualiza a tela
delay(30000);//espera 30 segundos
display.clearDisplay();//limpa a tela
break;
}
delay(1000);
}