Проект 11. Счетчик отжиманий

Это несложное устройство позволяет считать, сколько отжиманий вы выполнили! Вы также можете реализовать режим тренировки с выводом количества подходов и использовать устройство в качестве тренера!

Оборудование:

Ultrasonic
DoubleSegment
Keypad

Программирование:

Цикл while

#define

Практика

Разработайте устройство, которое будет считать количество выполненных отжиманий. Устройство лежит на полу, датчик расстояния смотрит вверх. При нажатии на Button0 датчик начинает считать отжимания. Отжимание засчитывается при выполнении двух условий по порядку: 1. Пользователь приблизился к датчику ближе порога нижнего положения 2. Пользователь удалился от датчика выше порога верхнего положения. В случае выполнения этих условий выполняется прибавление одного отжимания в переменную и вывод её в COM-порт.

Дополнительное задание

Реализовать режим тренировки с тремя подходами по 5 отжиманий, с отдыхом 30 секунд между подходами. Один подход выглядит так: 1. На индикаторе выводится число 5 и система ждёт, пока пользователь выполнит 5 отжиманий. По мере выполнения отжиманий число на экране уменьшается. 2. После этого идёт подсчёт 15 секунд для отдыха

Решение

Мы рекомендуем сначала освоить материал и попробовать сделать программу самостоятельно! А потом проверить себя, посмотрев наш вариант решения:

#include <Eryoma.h>
Eryoma eryoma;

#define min_dist 10
#define max_dist 20

int count = 0;
void setup() {
  Serial.begin(9600);
  eryoma.setupConnector(ePort4, Keypad);
  eryoma.setupConnector(ePort2, Ultrasonic);
  eryoma.setupConnector(ePort0, DoubleSegment);
  while (eryoma.read(ePort4, D0) == 1) {}
}

void loop() {
  while (eryoma.read(ePort2) >= min_dist) {}
  while (eryoma.read(ePort2) <= max_dist) {}
  count++;
  eryoma.write(ePort0, count);
  delay(1000);
}

#include <Eryoma.h>
Eryoma eryoma;

#define min_dist 10
#define max_dist 20

int count = 5;
int approaches = 3;
void setup() {
  eryoma.setupConnector(ePort4, Keypad);
  eryoma.setupConnector(ePort2, Ultrasonic);
  eryoma.setupConnector(ePort0, DoubleSegment);
  while (eryoma.read(ePort4, D0) == 1) {}
}

void loop() {
  if (approaches > 0) {
    eryoma.write(ePort0, count);
    while (eryoma.read(ePort2) >= min_dist) {}
    while (eryoma.read(ePort2) <= max_dist) {}
    count--;
    eryoma.write(ePort0, count);
    delay(1000);
    if (count == 0) {
      delay(15000);
      approaches--;
      count = 5;
    }
  }else{
    while (eryoma.read(ePort4, D0) == 1) {}
    approaches = 3;
  }
}