#include <stdio.h>
#include <stdlib.h>
#include "pico/stdlib.h"
#include "hardware/i2c.h"
#include "hardware/pio.h"
#include "ssd1306.h"
#include "font.h"
#include "setup.h"
void irq_buttons(uint gpio, uint32_t events);
void update_display();
void setup_display();
void setup_led(uint pin);
int main() {
setup_display();
setup_led(LED_RED_PIN);
setup_led(LED_GREEN_PIN);
setup_led(LED_BLUE_PIN);
while (true) {
update_display();
if ((temperatura > 60) || (umidade > 70) || (oxigenio < 15)) {
gpio_put(LED_RED_PIN, 1);
gpio_put(LED_GREEN_PIN, 0);
gpio_put(LED_BLUE_PIN, 0);
//set_led_matrix(11, pio, sm);
//buzzer_tone(50);
//sleep_ms(500);
//buzzer_off();
}
else if ((40 < temperatura && temperatura < 60) && (50 < umidade && umidade < 70) && (oxigenio > 15)) {
gpio_put(LED_RED_PIN, 0);
gpio_put(LED_GREEN_PIN, 1);
gpio_put(LED_BLUE_PIN, 0);
//set_led_matrix(15, pio, sm);
}
else {
gpio_put(LED_RED_PIN, 0);
gpio_put(LED_GREEN_PIN, 0);
gpio_put(LED_BLUE_PIN, 1);
//set_led_matrix(15, pio, sm);
}
sleep_ms(1000);
}
}
void irq_buttons(uint gpio, uint32_t events) {
}
void update_display() {
ssd1306_fill(&ssd, !cor); // Limpa o display
ssd1306_rect(&ssd, 3, 3, 122, 60, cor, !cor); // Desenha um retângulo
char msg_temp[20];
sprintf(msg_temp, "Temperatura %d", temperatura);
ssd1306_draw_string(&ssd, msg_temp, 8, 6);
char msg_umid[20];
sprintf(msg_umid, "Umidade %d", umidade);
ssd1306_draw_string(&ssd, msg_umid, 8, 18);
char msg_oxig[20];
sprintf(msg_oxig, "Oxigenio %d", oxigenio);
ssd1306_draw_string(&ssd, msg_oxig, 8, 33);
ssd1306_send_data(&ssd); // Atualiza o display
sleep_ms(735);
}
void setup_display() {
// I2C Initialisation. Using it at 400Khz.
i2c_init(I2C_PORT, 400 * 1000);
gpio_set_function(I2C_SDA, GPIO_FUNC_I2C); // Set the GPIO pin function to I2C
gpio_set_function(I2C_SCL, GPIO_FUNC_I2C); // Set the GPIO pin function to I2C
gpio_pull_up(I2C_SDA); // Pull up the data line
gpio_pull_up(I2C_SCL); // Pull up the clock line
//ssd1306_t ssd; // Inicializa a estrutura do display
ssd1306_init(&ssd, WIDTH, HEIGHT, false, endereco, I2C_PORT); // Inicializa o display
ssd1306_config(&ssd); // Configura o display
ssd1306_send_data(&ssd); // Envia os dados para o display
// Limpa o display. O display inicia com todos os pixels apagados.
ssd1306_fill(&ssd, false);
ssd1306_send_data(&ssd);
}
void setup_led(uint pin) {
gpio_init(pin);
gpio_set_dir(pin, GPIO_OUT);
gpio_put(pin, 0);
}Loading
pi-pico-w
pi-pico-w
BTN A
BTN B
Até 3,3V
Até 6,6V