1

Тема: Ступенчатая регулировка

Помогите пожалуйста. Я только учусь. Надо, чтобы в этом цикле (за эту секунду) проскакивала только  одна "i".
   "i" -это переменное значение в этой программе, так же как и i_reg.

  if(millis()-time4>1000){

  for (float i=0; i<=i_reg; i=i+i_ch){analogWrite(pwm,i*255/2);}
   
   for (float i=i_reg; i>=0; i=i-i_ch){analogWrite(pwm,i*255/2);}

   time4=millis();}

Был еще такой первоначальный вариант: Но в нем  i_reg1 запросто перескакивает i_reg и уходит в 255.

if (millis() - time4 > 1000) {
     
       i_ch = i_reg / 8;  analogWrite(pwm, (i_reg * 255 / 2));

      i_reg1 += i_ch;

      if (i_reg1 <= 0 || i_reg1 >= i_reg) { i_ch = -i_ch; }
     
      time4 = millis();}
Не пойму, что не так.

2

Re: Ступенчатая регулировка

unsigned long times;
int i;

void setup() {
 pinMode(9,OUTPUT); 
}

void loop() {
 if(millis()-times>1000){
  i++;
  if(i>255){i=0;}
  analogWrite(9,i);
  times=millis();
  }

}

3

Re: Ступенчатая регулировка

if (millis() - time4 > 1000) {
     
       i_ch = i_reg / 8;  analogWrite(pwm, (i_reg * 255 / 2));      //i_reg регулировочный ток,
                                                                                         ( далее уходит в шим), делю на 8  ступеней ( i_ch),
                                                                                          от 0 до  8 ступени++, с 8  ступени -- обратно в 0.

      i_reg1 += i_ch;// i_ch

      if (i_reg1 <= 0 || i_reg1 >= i_reg) { i_ch = -i_ch; }      //когда i_reg1 (это 8*i_ch) он = i_reg (т.к. это один ток) должен
                                                                                          переключиться с  с + i_ch на  -i_ch и уйти в 0. Но он этого не
                                                                                           делает
     
      time4 = millis();}

4

Re: Ступенчатая регулировка

Все, всем спасибо. Сам сообразил. Тема закрыта.