функция, которая устанавливает высокий пин на определенное количество раз и время - PullRequest
0 голосов
/ 19 марта 2020

У меня есть проблема, когда я пытаюсь установить высокий выходной контакт в течение установленного времени и времени.

Я выполняю вызов с hapticFeedback(1000, 2, 1);

переменные определены как

unsigned long hapticPreviousMillis = 0;
int hapticState = LOW;
int oneshotHaptic = 0;

здесь есть функция. По какой-то причине я получаю только пин-код, установленный ВЫСОКИЙ, а не мигает и НИЗКИЙ


void hapticFeedback(int activeLength, int repeats, int oneshotHaptic) {  

    if (oneshotHaptic == 1) {

        for (int x = 0; x <= repeats; x++) {

           unsigned long currentMillis = millis();

           if (currentMillis - hapticPreviousMillis >= (unsigned long)activeLength) {

                hapticPreviousMillis = currentMillis;


                if (hapticState == LOW) {
                    hapticState = HIGH;
                }
                else {
                    hapticState = LOW;
                }

                digitalWrite(haptic, hapticState);
            }
        }

    }

    oneshotHaptic = 0;

}

1 Ответ

0 голосов
/ 02 мая 2020

Так что я понял это, и если кто-то еще ищет это здесь, я придумал. Это может быть не самый плавный код, но он делает то, что я намеревался сделать

в l oop У меня есть

    if (setOneshotHaptic == 1) {

    hapticFeedback(activeLength);
}

и функция hapti c выглядит следующим образом

void hapticFeedback(int activeLength) {  

    unsigned long currentMillis = millis();

     if (currentMillis - hapticPreviousMillis >= (unsigned long)activeLength) {

         hapticPreviousMillis = currentMillis;

         if (x == repeats) {
                         setOneshotHaptic = false;
                         hapticState = HIGH;
                         x = 0;
         }

         if (hapticState == LOW) {
             hapticState = HIGH;
             x++;
         }
         else {
             hapticState = LOW;

         }

         digitalWrite(haptic, hapticState);

     }

}

всякий раз, когда я хочу получить обратную связь hapti c, я могу определить следующие переменные

    setOneshotHaptic = true;
    repeats = 3;
    activeLength = 1000;

Когда количество повторений достигнуто I зафиксируйте один снимок, сделайте так, чтобы выходной сигнал был высоким, чтобы он был низким, и, наконец, сбросьте счетчик повторений.

Возможно, есть более хорошие способы сделать это. Однако я не мог их найти, и это работает для меня ....

...