//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;
}
Após ler a pergunta, aperte o
botão referente a sua resposta:
A
B
CERTO
ERRADO