#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. Внимательно посмотрите на то, что вы хотите сделать, и как каждая переменная должна вести себя, выполняя то, что вы хотите сделать.