Улучшить arduino для цикла и цикла void

#arduino

#arduino

Вопрос:

Я написал код для своего проекта Arduino. У него есть цикл for. После завершения цикла for возникает цикл void.

Я ожидаю, что начальный разрыв должен сократиться со 100 до 0 и останется постоянным. Но когда код выполняется, он переходит от 100 к 0 и снова сбрасывает значения на 100. Затем значения снова изменятся от 100 до 0. На этот раз он остается равным 0.

Моя проблема в том, почему требуется два раза, чтобы остаться 0. Какие изменения я должен внести в код, чтобы получить ожидаемый результат.

Ожидаемый результат — только один цикл. 100 уменьшается до 0. затем остается 0.

Спасибо.

Ожидаемый результат выглядит следующим образом. Синусоидальная волна поступает от источника переменного тока. Пожалуйста, пренебрегите формой синуса и примите ее за импульс (ШИМ).

введите описание изображения здесь

Код:

 int minGap = 0;//motor full speed gap
int pulseWidth = 10;//pulse lenght
int startGap = 100;//starting gap
int gapReduseRate = 1;//gap reduse rate
 
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(3, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
 
  for(int i=startGap ; i>minGap ; i=i-gapReduseRate){
      digitalWrite(3, HIGH); // turn the LED on (HIGH is the voltage level)
      digitalWrite(9, HIGH);
      digitalWrite(5, HIGH);
      digitalWrite(6, HIGH);// turn the LED on (HIGH is the voltage level)
      delayMicroseconds(pulseWidth);                       // wait for a second
      digitalWrite(3, LOW);    // turn the LED off by making the voltage LOW
      digitalWrite(9, LOW);
      digitalWrite(5, LOW);
      digitalWrite(6, LOW);// turn the LED off by making the voltage LOW
      delayMicroseconds(i);                      // wait for a second
    }
}
 
// the loop function runs over and over again forever
void loop() {
   digitalWrite(3, HIGH);   // turn the LED on (HIGH is the voltage level)
   digitalWrite(9, HIGH);
   digitalWrite(5, HIGH);
   digitalWrite(6, HIGH);// turn the LED on (HIGH is the voltage level)
   delayMicroseconds(pulseWidth);                       // wait for a second
   digitalWrite(3, LOW);    // turn the LED off by making the voltage LOW
   digitalWrite(9, LOW);
   digitalWrite(5, LOW);
   digitalWrite(6, LOW);// turn the LED off by making the voltage LOW
   delayMicroseconds(minGap);                      // wait for a second
}

  

Комментарии:

1. Вы устанавливаете startGap равным 100, и после этого вы никогда ничего не вычитаете из startGap . Как вы думаете, почему он будет равен 0?

2. @ocrdu Я присваиваю i значению startGap и уменьшаю его. Пожалуйста, поищите петлю

3. Нет, это не так. Вы не прикасаетесь к startGap после присвоения startGap значения i. Вы уменьшаете i, а не startGap.

4. @ocrdu, но это не влияет на результат. Так ли это ?

5. minGap выполняет, и он всегда равен 0. startGap всегда равен 100. Внимательно посмотрите на то, что вы хотите сделать, и как каждая переменная должна вести себя, выполняя то, что вы хотите сделать.