#include "main.h"

// Definição dos pinos dos potenciômetros
const int potPinFrequency = A0; // Pino para o potenciômetro da frequência
const int potPinDutyCycle = A1; // Pino para o potenciômetro do duty cycle

// Definição dos pinos de saída
const int pwmPin = PB7;  // Substitua conforme o seu layout e o timer escolhido
const int ledPin = PC13; // Pino do LED

// Criação do objeto HardwareTimer. No STM32F103, existem vários timers (TIM1, TIM2, etc.).
// A escolha do timer depende da pinagem e das funções que você pretende utilizar.
HardwareTimer *pwmTimer = new HardwareTimer(TIM1);

void setup() {
  pinMode(potPinFrequency, INPUT);
  pinMode(potPinDutyCycle, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(pwmPin, OUTPUT);

  // Configuração inicial do timer para PWM
  pwmTimer->pause(); // Pausa o timer para configuração
  pwmTimer->setMode(1, TIMER_OUTPUT_COMPARE_PWM1, pwmPin); // Canal 1 em modo PWM
  pwmTimer->setOverflow(100, HERTZ_FORMAT); // Define a frequência inicial do PWM
  pwmTimer->refresh(); // Atualiza as configurações do timer
  pwmTimer->resume(); // Inicia o timer com as configurações definidas
}

void loop() {
  // Lendo os valores dos potenciômetros
  int freqValue = analogRead(potPinFrequency);
  int dutyValue = analogRead(potPinDutyCycle);

  // Mapeia o valor da frequência de 100 a 250 Hz
  long frequency = map(freqValue, 0, 1023, 100, 250);
  
  // Mapeia o valor do duty cycle de 0 a 100%
  int dutyCycle = map(dutyValue, 0, 1023, 0, 65535); // PWM resolução de 16 bits

  // Configura o PWM
  pwmTimer->setOverflow(frequency, HERTZ_FORMAT); // Configura a frequência
  pwmTimer->setCaptureCompare(1, dutyCycle, PERCENT_COMPARE_FORMAT); // Configura o duty cycle

  // Controla o LED baseado na frequência
  static unsigned long lastBlink = 0;
  unsigned long blinkRate = 1000 / (frequency / 100); // Frequência do blink proporcional ao PWM

  if (millis() - lastBlink > blinkRate) {
    digitalWrite(ledPin, !digitalRead(ledPin));
    lastBlink = millis();
  }
}
stm32:B12
stm32:B13
stm32:B14
stm32:B15
stm32:A8
stm32:A9
stm32:A10
stm32:A11
stm32:A12
stm32:A15
stm32:B3
stm32:B4
stm32:B5
stm32:B6
stm32:B7
stm32:B8
stm32:B9
stm32:5V.1
stm32:GND.1
stm32:3V3.1
stm32:GND.2
stm32:GND.3
stm32:3V3.2
stm32:R
stm32:B11
stm32:B10
stm32:B1
stm32:B0
stm32:A7
stm32:A6
stm32:A5
stm32:A4
stm32:A3
stm32:A2
stm32:A1
stm32:A0
stm32:C15
stm32:C14
stm32:C13
stm32:VBAT
pot1:GND
pot1:SIG
pot1:VCC
pot2:GND
pot2:SIG
pot2:VCC
led1:A
led1:C
r1:1
r1:2
ScopeBreakout
chip-scope1:D0
chip-scope1:D1
chip-scope1:D2
chip-scope1:D3
chip-scope1:A3
chip-scope1:A2
chip-scope1:A1
chip-scope1:A0