/*********************************************************************
FileName: main.c
Dependencies: Veja a secao de includes
Processor: Raspberry Pico
Compiler: SDK 2.1.1
Company: FATEC Santo Andre
Author: Prof. Edson Kitani e Prof. Weslley M. Torres
Date: 19/05/2025
Software License Agreement: Somente para fins didativos
*********************************************************************
File Description: Template para a aplicações da CPU FATEC G3
*
Change History:
1.0 19/05/2025 Versao inicial
**********************************************************************/
#include <stdio.h>
#include "pico/stdlib.h"
#include "pico/bootrom.h"
#include "hardware/pwm.h"
#include "hardware/adc.h"
#include "hardware/i2c.h"
#include "ssd1306.h"
//====================================================================
// Área de Prototipos ( Declaração das funções )
// <type> function();
//====================================================================
// Definicoes do Projeto
//====================================================================
#define botao_B1 22 //GPIO22 //Botão que fica na CPU
#define PWM_PIN 14
#define ADC0_NUM 0 // ADC A0
#define ADC0_PIN ( 26 + ADC0_NUM ) // GPIO ( 26 + 0 ) = 26
//===================================================================
// Variáveis Globais
//===================================================================
// Valor de leitura do ADC
uint16_t adc0_valor;
// Valor de leitura do ADC em string
char ADC_value_buffer[50];
//====================================================================
int main() {
//===================================================================
// Configuração de harware e configuração inicial
//===================================================================
// Define variáveis do programa principal
// Configura os I/Os
gpio_init(botao_B1);
gpio_init(15);
gpio_set_dir(botao_B1, GPIO_IN);
gpio_set_dir(15, GPIO_OUT);
// Configura 74LS245 como entrada B para A
gpio_put(15, 0);
// Configurado o GPIO 22 do botão B1 para função inicial de Boot
// Usado quando temos a placa de condicionador
bool boot = gpio_get(botao_B1);
if(boot == 0) {reset_usb_boot(0, 0);}
// Inicializa a UART com baud rate de 115200
// Usado para fazer monitoração serial via VS Code ou outro software
stdio_init_all();
// Configurando os valores dos parametros iniciais
// Configuração do ADC
adc_init(); // inicializa o ADC
adc_gpio_init( ADC0_PIN ); // configura os pinos de entrada analogica
// configura os pinos de PWM
gpio_set_function(PWM_PIN, GPIO_FUNC_PWM);
// Find out which PWM slice is connected to GPIO
uint slice_num = pwm_gpio_to_slice_num(PWM_PIN);
pwm_set_clkdiv(slice_num, 125); // // pwm freq pwm clock should now be running at 1MHz
pwm_set_wrap(slice_num, 4096); // Set period of 100 cycles (0 to 99 inclusive)
// Set channel A output high for one cycle before dropping PWM set to 0%
pwm_set_chan_level(slice_num, PWM_CHAN_A, 0);
// Set the PWM running
pwm_set_enabled(slice_num, true);
//===================================================================
//===================================================================
// Execução no modo continuo
//===================================================================
while (true)
{
adc_select_input(ADC0_NUM); // Seleciona o entrada A0
adc0_valor = adc_read(); // Leitura do sinal da entrada A0
pwm_set_chan_level(slice_num, PWM_CHAN_A, adc0_valor );
// Set the PWM running
pwm_set_enabled(slice_num, true);
sleep_ms(10);// Espera de 100ms antes do próximo comando
}
return 0;
}