/**
   ESP32 + DHT22 Example for Wokwi
   
   https://wokwi.com/arduino/projects/322410731508073042
*/

#include <stdio.h>  
#include "freertos/FreeRTOS.h" 
#include "freertos/task.h" 
#include "driver/gpio.h" 
#include "DHT.h" 
//NÃO CONSEGUI FAZER A LEITURA DO DHT! (ainda peguei um código mas estava saindo sempre 0 na saída)
//A LÓGICA SERIA A SEGUINTE:COM O VALOR DA LEITURA, IRIA SER DISTIGUIDO O PRIMEIRO CARCTERE E O SEGUNDO( PARA MOSTRAR EM UM DISPLAY E NO OUTRO)
//SE FOSSE COM A SINTAXE E IDE DO ARDUINO SERIA MOLEZA (pois já utilizei na vida real um dht22 para a elaboração de chocadeira)
// O PROGRAMA ESTÁ RODANDO NO DISPLAY OS NÚMEROS DE 0 - 9 (somente)
#define LED_a   (1ULL<<0)    //GPIO0     
#define LED_b   (1ULL<<1)    //GPIO1   
#define LED_c   (1ULL<<2)    //GPI02
#define LED_d   (1ULL<<3)    //GPIO3
#define LED_e   (1ULL<<4)    //GPIO4
#define LED_f   (1ULL<<5)    //GPIO5
#define LED_g   (1ULL<<6)    //GPIO6
#define LED_dp  (1ULL<<7)    //GPIO7

#define LED_h   (1ULL<<0)    //GPI39     
#define LED_i   (1ULL<<1)    //GPI40   
#define LED_j   (1ULL<<2)    //GPI41
#define LED_l   (1ULL<<3)    //GPI42
#define LED_m   (1ULL<<4)    //GPI43
#define LED_n   (1ULL<<5)    //GPI44
#define LED_o   (1ULL<<6)    //GPI45
#define LED_p  (1ULL<<7)     //GPIO7


#define DIGIT_0 (LED_a | LED_b | LED_c | LED_d | LED_e | LED_f)
#define DIGIT_1 (LED_b | LED_c)
#define DIGIT_2 (LED_a | LED_b | LED_d | LED_g | LED_e | LED_d )
#define DIGIT_3 (LED_a | LED_b | LED_c | LED_d | LED_g)
#define DIGIT_4 (LED_b | LED_c | LED_f | LED_g)
#define DIGIT_5 (LED_a | LED_c | LED_d | LED_f | LED_g)
#define DIGIT_6 (LED_a | LED_c | LED_d | LED_e | LED_f | LED_g)
#define DIGIT_7 (LED_a | LED_b | LED_c)
#define DIGIT_8 (LED_a | LED_b | LED_c | LED_d | LED_e | LED_f | LED_g)
#define DIGIT_9 (LED_a | LED_b | LED_c | LED_d | LED_f | LED_g)
#define DIGIT_A (LED_a | LED_b | LED_c | LED_e | LED_f | LED_g)
#define DIGIT_b (LED_c | LED_d | LED_e | LED_f | LED_g)
#define DIGIT_C (LED_a | LED_d | LED_e | LED_f)
#define DIGIT_d (LED_b | LED_c | LED_d | LED_e | LED_g)
#define DIGIT_E (LED_a | LED_d | LED_e | LED_f | LED_g)
#define DIGIT_F (LED_a | LED_e | LED_f | LED_g)
      
void app_main(void)        
{      
    REG_WRITE(GPIO_ENABLE_REG, LED_a | LED_b | LED_c | LED_d | LED_e | LED_f | LED_g | LED_dp);
    REG_WRITE(GPIO_OUT_W1TS_REG, LED_a | LED_b | LED_c | LED_d | LED_e | LED_f | LED_g | LED_dp);

    static const unsigned long long vetor_led[] = {DIGIT_0, DIGIT_1, DIGIT_2, DIGIT_3, DIGIT_4, DIGIT_5, DIGIT_6, 
        DIGIT_7, DIGIT_8, DIGIT_9, DIGIT_A, DIGIT_b, DIGIT_C, DIGIT_d, DIGIT_E, DIGIT_F};

    while(true) 
    {
      for (int i = 0; i <= 9; i++) {
        REG_WRITE(GPIO_OUT_W1TC_REG, vetor_led[i]);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
        REG_WRITE(GPIO_OUT_W1TS_REG, 0x00ff); 
      }
    } 
    
}