Хотите числа между двумя пределами с равным интервалом времени - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь получить значения от 10 до 100, поэтому я упорядочиваю

int pos;
long previousTime =0;
int increment = 1;
int interval = 10;

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {
  long currentTime = millis();
  if(currentTime - previousTime > interval){
    previousTime = currentTime;
    pos +=increment;
    if(pos<= 10 || pos > 100){
      increment = -increment;
    }
    Serial.println(pos);
  }


}

Но мой вывод показывает только 1 и 0. Если я уменьшу нижний предел до 0 или 1, то получу значения между этими предельные значения, указанные в операторе if, но не получающие должного результата при увеличении нижнего предела. Почему? output look like this :

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Хорошо, ваша проблема проста, теперь мы можем увидеть весь код. Посмотрите на позицию, она начинается с 0. При первом проходе через l oop он получает приращения до 1. Затем, если оператор проверяет, а 1 действительно меньше 10, он делает приращение -1. Затем на следующем проходе через l oop, который добавляется, снова делая pos 0, а так как 0 меньше 10, он снова меняет приращение. Он делает именно то, что вы сказали.

Попробуйте запустить pos в 10 и посмотреть, что произойдет.

0 голосов
/ 30 апреля 2020

Если это не тривиально для вас, вот предложение

int pos=0;
unsigned long previousTime =0;
int increment = 1;
int interval = 10;

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {
  unsigned long currentTime = millis();
  if(currentTime - previousTime >= interval){
    previousTime = currentTime;

    pos += increment;

    if(pos <=  10) increment = 1;
    if(pos >= 100) increment = -1; 
    // else leave increment as is ...

    Serial.println(pos);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...