Ajuda com PWM

Olá a todos!
Eu estou fazendo um projeto onde eu utilizo 3 botões, um para controlar o valor do pwm, outro para determinar o tempo que esse valor do pwm irá diminuir até atingir 0 e por fim um para confirmar esses valores e iniciar o programa. O problema é que eu empaco na hora de pensar numa lógica para o valor escolhido do pwm atingir 0 no tempo, sendo que o decremento seja linear. Já pensei em utilizar a biblioteca softpwm para trabalhar direto em porcentagem, mas mesmo assim empaco na hora de pensar em fazer a descida linear conforme o tempo escolhido. Se alguém puder me ajudar ou mesmo me dar aquela luz para eu poder continuar o programa eu ficaria muito grato.
Obrigado pela atençao.

Ajudava bastante se mostrasse o código que já tem.

Como podem ver eu ainda estou aprendendo a usar o arduino, comecei a poucos dias, e não sei de muita coisa. Tirando alguns erros idiotas que cometi, como o da lógica do pwm, acho que o pragrama está aceitável. Se alguma coisa estiver errada eu agradeceria se me alertassem.
P.S.: botei a potência ao contrário pois estou usando a saída do pwm na porta inversora do lm324.

#include <LiquidCrystal.h> //Inclui a biblioteca do LCD
#include <SoftPWM.h>
 
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Configura os pinos do Arduino para se comunicar com o LCD
 
int confirma=0,tempo=0,pot=0,c=0,bot=0;
const int botaoPin=7;
const int confPin=8;
int pwmPin=6;
int pwm=0;
int flagbot=0;
 
void setup()
{
  SoftPWMBegin();
  SoftPWMSet(6,0);
  lcd.begin(16, 2); //Inicia o LCD com dimensões 16x2(Colunas x Linhas)
  pinMode(pwmPin,OUTPUT);
  pinMode(botaoPin,INPUT);
  pinMode(confPin,INPUT);
}
 
void loop()
{
  lcd.clear();
  lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
  lcd.print("Potencia: 10%");
  pot=10;
  tempo=1;
  while(confirma!=HIGH)
  {
    bot=digitalRead(botaoPin);
    delay(10);
    confirma=digitalRead(confPin);
    delay(10);
    if(flagbot==0)
    {
      if(bot==HIGH)
      {
        bot=0;
        c=c+1;
        if(c<15)
        {
          pot=pot+5;
        }
        if(c>14)
        {
          c=0;
          pot=10;
        }
      }
      flagbot=1;
    }
    else
    {
      if(bot==0)
      {
        flagbot=0;
        delay(10);
      }
    }  
    lcd.setCursor(10,0);
    lcd.print(pot);
  }
  c=0;
  bot=0;
  confirma=0;
  lcd.clear();
  lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
  lcd.print("Tempo: 1 s");
  flagbot=0; 
  while(confirma!=HIGH)
  {
    bot=digitalRead(botaoPin);
    delay(50);
    confirma=digitalRead(confPin);
    delay(50);
    if(flagbot==0)
    {
      if(bot==HIGH)
      {
        bot=0;
        c=c+1;
        if(c<20)
        {
          tempo=tempo+1;
        }
        if(c>19)
        {
          c=0;
          tempo=1;
          lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
          lcd.clear();
          lcd.print("Tempo: 1 s");
        }
        flagbot=1;
      }
    }
    else
    {
      if(bot==0);
      {
        flagbot=0;
        delay(10);
      }
    }
    lcd.setCursor(7,0);
    lcd.print(tempo);
  }
  lcd.clear();
  c=0;
  c=tempo;
  SoftPWMSetPercent(6, 100-pot);
  //pwm=230-(((pot-10)/5)*36);      //errado
  while(tempo!=0)
  {
    analogWrite(pwmPin, pwm);
    lcd.setCursor(0, 0);
    lcd.print("Acelerando");
    delay(1000);
    //pwm=pwm-(((24*((100-pot)/c))/36)-((24*((100-pot)/c))%36));        //errado
    //pwm=pwm-(pwm-((100-pot)%(c*10)))/36;          //errado
    //pwm=pwm+25.5*((100-pot)/(c*10));        //errado
    tempo=tempo-1;
  }
  bot=0;
  confirma=0;
}

A função millis será o que pretendes...

Eu, talvez porque a última parte não está concluída, ou porque não percebi bem a descrição, não percebo o que se pretende.
O tempo que se escolhe, é o tempo que o PWM demora a variar, ou é o tempo que demora a ir de zero até ao máximo?
O valor de PWM que se escolhe, é o valor em que começa a variação, ou é o valor que cada incremento?

O valor da potência seria o valor(porcentagem) em que o PWM começa a variação e o tempo escolhido é o tempo desse valor inicial decrementar até atingir 0. Essa porcentagem inicial do pwm seria 100% menos a potência escolhida.
P.S.: Modifiquei os comentários antigos, pois percebi que troquei algumas palavras. Eu estou fazendo por decremento (até atingir 0) e não por incremento como havia comentado. Desculpe a confusão.
P.S.:Estou utilizando a saída do pwm em um resistor e capacitor para manter um nivel DC e comparando esse sinal DC (na porta inversora) com um sinal em rampa (na porta não inversora) para controlar o angulo de disparo de um TRIAC. Por isso botei a variavel pot que é o valor inicial da potência que o TRIAC disponibilizará para a carga. O valor do pwm é para começar em 100% menos a potência escolhida para começar (pot) até atingir 0 em um tempo (tempo) escolhido, essa descida é para ser linear.
Assim para aumentar a potência da carga o valor de pwm deve diminuir.
Se restar alguma dúvida ou se foi uma explicação meio confusa me avisem que tento melhorar.