/* * * * * * * * * * *
TRASH DESTINY v1.03
Botões ligados nas entradas 9(botão esquerdo) e 11(botão direito);
Botão esquerdo move o cursor;
Botão direito move o seleciona;
Link do projeto direto para o Wokwi:
https://wokwi.com/projects/332944685523796563
* * * * * * * * * * * */
#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);
int botao(void);
void movercursor(int cursor);
void jogar(void);
void creditos(void);
void sair(void);
void jogadores(void);
int sel;
void setup()
{
Serial.begin(9600);
pinMode(11, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
// 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
}
}
void loop() {
int opc;
menu();
opc = botao();
switch (opc)
{
case 1:
jogar();
break;
case 2:
ranking();
break;
case 3:
creditos();
break;
case 4:
sair();
break;
}
}
void menu (void)
{
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(30, 0);
display.print(F("TRASH DESTINY"));
display.setCursor(15, 15);
display.fillRect(14, 14, 31, 9, WHITE);
display.display();
display.setTextColor(SSD1306_BLACK);
display.print(F("JOGAR"));
display.setTextColor(SSD1306_WHITE);
display.setCursor(15, 25);
display.print(F("RANKING"));
display.setCursor(15, 35);
display.print(F("CREDITOS"));
display.setCursor(15, 45);
display.print(F("SAIR"));
display.display();
}
int botao(void)
{
int b1 = 1;
int b2 = 1;
int b2b = 1;
int cursor = 1;
while (b2 == 1)
{
b1 = digitalRead(11); //botao esquerdo
b2 = digitalRead(9); //botao direito
delay(1);
b2b = digitalRead(9);
//Serial.println(b2); //verifica se o botao funciona
if ((b2b - b1) == 1) // move o cursor
{
if (cursor > 3)
{
cursor = 0;
} else
{
cursor++;
}
//Serial.println(cursor); //verif. a função movercursor
movercursor(cursor, b2);
delay(10);
}
}
return cursor;
}
void movercursor(int cursor, int b2)
{
switch (cursor)
{
case 1:
display.fillRect(14, 14, 31, 9, WHITE);
display.display();
display.setTextColor(SSD1306_BLACK);
display.setCursor(15, 15);
display.println(F("JOGAR"));
display.display();
display.fillRect(14, 44, 25, 9, BLACK);
display.display();
display.setTextColor(SSD1306_WHITE);
display.setCursor(15, 45);
display.println(F("SAIR"));
display.display();
break;
case 2:
display.fillRect(14, 24, 43, 9, WHITE);
display.display();
display.setTextColor(SSD1306_BLACK);
display.setCursor(15, 25);
display.println(F("RANKING"));
display.display();
display.fillRect(14, 14, 31, 9, BLACK);
display.display();
display.setTextColor(SSD1306_WHITE);
display.setCursor(15, 15);
display.println(F("JOGAR"));
display.display();
break;
case 3:
display.fillRect(14, 34, 49, 9, WHITE);
display.display();
display.setTextColor(SSD1306_BLACK);
display.setCursor(15, 35);
display.println(F("CREDITOS"));
display.display();
display.fillRect(14, 24, 43, 9, BLACK);
display.display();
display.setTextColor(SSD1306_WHITE);
display.setCursor(15, 25);
display.println(F("RANKING"));
display.display();
break;
case 4:
display.fillRect(14, 44, 25, 9, WHITE);
display.display();
display.setTextColor(SSD1306_BLACK);
display.setCursor(15, 45);
display.println(F("SAIR"));
display.display();
display.fillRect(14, 34, 49, 9, BLACK);
display.display();
display.setTextColor(SSD1306_WHITE);
display.setCursor(15, 35);
display.println(F("CREDITOS"));
display.display();
break;
}
}
void jogadores void() {
int botao b2();
}
while (b2 == b1)
{
b2 = digitalRead(9); //botao direito
delay(1);
if ((b2b > b1) == 1) // move o cursor
{
if (cursor > 2)
{
cursor = 0;
} else
{
cursor++;
}
//Serial.println(cursor); //verif. a função movercursor
movercursor(cursor, b2);
delay(10);
}
}
}
void jogadores{
display.print(F("Douglas"));
display.setCursor(15, 15);
display.fillRect(14, 14, 31, 9, WHITE);
display.display();
display.setTextColor(SSD1306_BLACK);
display.print(F("Lorraine"));
display.setTextColor(SSD1306_WHITE);
display.setCursor(15, 25);
display.print(F("Luiz"));
display.setCursor(15, 35);
}
void jogar (void)
{
display.clearDisplay();
display.fillCircle(23, 39, 2, WHITE); //cabeca
display.drawLine(23, 42, 23, 52, WHITE); //tronco
display.drawLine(24, 45, 29, 40, WHITE); //braco direito
display.drawLine(22, 45, 17, 50, WHITE); //braco esquerdo
display.drawLine(22, 53, 20, 57, WHITE); //perna esq
display.drawLine(24, 53, 26, 57, WHITE); //perna dir
display.fillRect(21, 44, 5, 5, WHITE); //mochila
display.fillTriangle(31, 39, 34, 33, 37, 36, WHITE); //dispositivo para sugar lixo
display.fillCircle(116, 14, 7, WHITE); //Lua
display.fillCircle(112, 11, 7, BLACK); //dark side the moon
display.fillCircle(40, 32, 2, WHITE); //Lixo
display.fillCircle(53, 12, 2, WHITE); //lixo
display.fillCircle(74, 18, 2, WHITE); // mais lixo
display.display();
delay(30000);
}
void ranking (void)
{
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(35, 0);
display.print(F("RANKING"));
display.setCursor(20, 10);
display.print(F("NOME"));
display.setCursor(85, 10);
display.print(F("PONTOS"));
display.setCursor(1, 30);
display.print(F("1."));
display.setCursor(20, 30);
display.print(F("nome1"));
display.setCursor(85, 30);
display.print(F("789"));
display.setCursor(1, 40);
display.print(F("2."));
display.setCursor(20, 40);
display.print(F("nome2"));
display.setCursor(85, 40);
display.print(F("456"));
display.setCursor(1, 50);
display.print(F("3."));
display.setCursor(20, 50);
display.print(F("nome3"));
display.setCursor(85, 50);
display.print(F("123"));
display.display();
delay(5000);
}
void creditos (void)
{
int i;
for (i = 64; i > -60; i--)
{
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(30, i);
display.print(F("TRASH DESTINY"));
display.setCursor(10, i + 15);
display.print(F("Desenvolvido por:"));
display.setCursor(15, i + 25);
display.print(F("\tLorraine Gomes"));
display.setCursor(15, i + 35);
display.print(F("\tDouglas Oliveira"));
display.setCursor(15, i + 45);
display.print(F("\tLuiz Heinz"));
display.display();
delay(50);
}
}
void sair (void)
{
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(1, 30);
display.print(F("OBRIGADO PRO JOGAR!!"));
display.display();
display.clearDisplay();
delay(30000);
}