//Projeto Final Embarca Tech
//Aluno(a): Luana de Sousa Santos

#include "pico/stdlib.h"
#include "hardware/i2c.h"
#include "ssd1306.h"

#define I2C_PORT i2c0
#define SDA_PIN 0
#define SCL_PIN 1

#define LED_R_PIN 13
#define LED_G_PIN 11
#define BTN_A_PIN 5
#define BTN_B_PIN 6

volatile int acertos = 0;  // Contador 
volatile int erros = 0;  // Contador 

void set_leds(bool red, bool green){
    gpio_put(LED_R_PIN, red);
    gpio_put(LED_G_PIN, green);
}

//Função com o gabarito do teste
bool resposta(int questao, bool botao){
    switch (questao) {
        case 1:
            return (botao == gpio_get(BTN_A_PIN));  // Resposta correta: A
        case 2:
            return (botao == gpio_get(BTN_A_PIN));  // Resposta correta: A
        case 3:
            return (botao == gpio_get(BTN_B_PIN));  // Resposta correta: B
        case 4:
            return (botao == gpio_get(BTN_A_PIN));  // Resposta correta: A
        case 5:
            return (botao == gpio_get(BTN_B_PIN));  // Resposta correta: B
        default:
            return false;
    }
}

//Lógica principal
int main() {
   
   stdio_init_all();

   gpio_init(LED_R_PIN);
   gpio_set_dir(LED_R_PIN, GPIO_OUT);
   gpio_init(LED_G_PIN);
   gpio_set_dir(LED_G_PIN, GPIO_OUT);

   gpio_init(BTN_A_PIN);
   gpio_set_dir(BTN_A_PIN,GPIO_IN);
   gpio_pull_down(BTN_A_PIN);

   gpio_init(BTN_B_PIN);
   gpio_set_dir(BTN_B_PIN,GPIO_IN);
   gpio_pull_down(BTN_B_PIN);

  // Inicializa o I2C
  i2c_init(I2C_PORT, 400 * 1000); 
  gpio_set_function(SDA_PIN, GPIO_FUNC_I2C);
  gpio_set_function(SCL_PIN, GPIO_FUNC_I2C);
  gpio_pull_up(SDA_PIN);
  gpio_pull_up(SCL_PIN);

  // Inicializa o display OLED
  ssd1306_init(I2C_PORT);
  ssd1306_clear();

  ssd1306_draw_string(16, 0, "INICIANDO", true);
  ssd1306_draw_string(16, 20, "TESTE...", true);
  ssd1306_update(I2C_PORT);// Atualiza o display para mostrar o texto
  sleep_ms(2000);

  // Exibe pergunta 1 e opções de resposta    
  ssd1306_draw_string(16, 0, "Qual o seu nome?", true);
  ssd1306_draw_string(16, 20, "A - Maria", true);
  ssd1306_draw_string(16, 40, "B - Marta", true);    
  ssd1306_update(I2C_PORT);

  // Aguarda até que um botão seja pressionado
  while (true) {
         if (gpio_get(BTN_A_PIN)){
            set_leds(0,1);              // Resposta certa, led verde acende
            acertos++;

            if (!resposta(1, true)) {   // Resposta errada, led vermelho acende
                set_leds(1,0); 
                erros++;
            }
            break;

        } else if (gpio_get(BTN_B_PIN)){
            set_leds(1,0);              // Resposta errada, led vermelho acende
            erros++;
            break;

        } else {
            set_leds(0,0);
        }
      sleep_ms(50); 
  }
  sleep_ms(2000); 
  ssd1306_clear(); 
  
   // Exibe pergunta 2 e opções de resposta
  ssd1306_draw_string(16, 0, "Qual sua idade? ", true);
  ssd1306_draw_string(16, 20, "A - 59 anos", true);
  ssd1306_draw_string(16, 40, "B - 49 anos", true);    
  ssd1306_update(I2C_PORT);
 
   // Aguarda até que um botão seja pressionado
  while (true) {
         if (gpio_get(BTN_A_PIN)){
            set_leds(0,1);              // Resposta certa, led verde acende
            acertos++;

            if (!resposta(2, true)) {   // Resposta errada, led vermelho acende
                set_leds(1,0); 
                erros++;
            }
            break;

        } else if (gpio_get(BTN_B_PIN)){
            set_leds(1,0);              // Resposta errada, led vermelho acende
            erros++;
            break;

        } else {
            set_leds(0,0);
        }
      sleep_ms(50); 
  }
  sleep_ms(2000); 
  ssd1306_clear();

 // Exibe pergunta 3 e opções de resposta
  ssd1306_draw_string(16, 0, "Onde voce mora?", true);
  ssd1306_draw_string(16, 20, "A - Natal", true);
  ssd1306_draw_string(16, 40, "B - Fortaleza", true);    
  ssd1306_update(I2C_PORT);
 
  // Aguarda até que um botão seja pressionado
  while (true) {
         if (gpio_get(BTN_A_PIN)){
            set_leds(1,0);              // Resposta errada, led vermelho acende
            erros++;

            if (!resposta(3, false)) {   
                set_leds(0,1);         // Resposta certa, led verde acende
                acertos++;
            }
            break;

        } else if (gpio_get(BTN_B_PIN)){
            set_leds(0,1);            // Resposta certa, led verde acende
            acertos++;
            break;

        } else {
            set_leds(0,0);
        }
      sleep_ms(50); 
  }
  sleep_ms(2000); 
  ssd1306_clear(); 

// Exibe pergunta 4 e opções de resposta
  ssd1306_draw_string(16, 0, "Voce e casada?", true);
  ssd1306_draw_string(16, 20, "A - sim", true);
  ssd1306_draw_string(16, 40, "B - nao", true);    
  ssd1306_update(I2C_PORT);

    // Aguarda até que um botão seja pressionado
  while (true) {
         if (gpio_get(BTN_A_PIN)){
            set_leds(0,1);              // Resposta certa, led verde acende
            acertos++;

            if (!resposta(4, true)) {   // Resposta errada, led vermelho acende
                set_leds(1,0); 
                erros++;
            }
            break;

        } else if (gpio_get(BTN_B_PIN)){
            set_leds(1,0);              // Resposta errada, led vermelho acende
            erros++;
            break;

        } else {
            set_leds(0,0);
        }
      sleep_ms(50); 
  }
  sleep_ms(2000); 
  ssd1306_clear();

// Exibe pergunta 5 e opções de resposta
  ssd1306_draw_string(16, 0, "Voce tem filho?", true);
  ssd1306_draw_string(16, 20, "A - sim", true);
  ssd1306_draw_string(16, 40, "B - nao", true);    
  ssd1306_update(I2C_PORT);

  // Aguarda até que um botão seja pressionado
  while (true) {
         if (gpio_get(BTN_A_PIN)){
            set_leds(1,0);              // Resposta errada, led vermelho acende
            erros++;

            if (!resposta(5, false)) {   
                set_leds(0,1);         // Resposta certa, led verde acende
                acertos++;
            }
            break;

        } else if (gpio_get(BTN_B_PIN)){
            set_leds(0,1);            // Resposta certa, led verde acende
            acertos++;
            break;

        } else {
            set_leds(0,0);
        }
      sleep_ms(50); 
  }
  sleep_ms(2000); 
  ssd1306_clear(); 

  ssd1306_draw_string(16, 0, "FINALIZANDO", true);
  ssd1306_draw_string(16, 16, "TESTE...", true);
  ssd1306_update(I2C_PORT);
  sleep_ms(1000);
  set_leds(0,0);
  
  sleep_ms(2000); 
  ssd1306_clear(); 
  
 //Conversão dos valores inteiros em strings
 //Para exibir no display OLED o resultado do teste

  char acertos_str[10];
  char erros_str[10];

  sprintf(acertos_str, "Acertos %d", acertos);
  sprintf(erros_str, "Erros %d", erros);

  ssd1306_draw_string(16, 20, acertos_str, true);
  ssd1306_draw_string(16, 40, erros_str, true);    
  ssd1306_update(I2C_PORT);

  return 0;
}


BOOTSELLED1239USBRaspberryPiPico©2020RP2-8020/21P64M15.00TTT
Após ler a pergunta, aperte o botão referente a sua resposta:
A
B
CERTO
ERRADO