Используя линейку датчиков освещённости в качестве сенсора, мы сделаем мотор с сенсорным управлением: проводя рукой в определённую сторону, мы можем задавать скорость вращения.
Напишите программу, которая распознаёт жесты. Если провести рукой по датчикам слева направо - скорость мотора увеличивается на 15. Если справа налево - скорость мотора уменьшается 20.
Дополните программу: при проведении двумя пальцами от краев к центру мотор должен остановиться. При проведении от центра к краям мотор должен включаться на максимальную скорость.
Мы рекомендуем сначала освоить материал и попробовать сделать программу самостоятельно! А потом проверить себя, посмотрев наш вариант решения:
#include <Eryoma.h>
Eryoma eryoma;
#define max_level 60
int sensor[8] = {0, 0, 0, 0, 0, 0, 0, 0};
int count = 1;
int speed_motor = 0;
boolean flag = false;
void setup() {
eryoma.setupConnector(ePort6, LineArray);
Serial.begin(9600);
}
void loop() {
for (int i = 0; i < 8; i++) {
if (eryoma.read(ePort6, i) < max_level && !sensor[i]) {
sensor[i] = count;
count++;
Serial.print("Sensor ");
Serial.println(i);
}
}
if (count == 9) {
if ((sensor[0] > sensor[1]) && (sensor[1] > sensor[2]) && (sensor[2] > sensor[3]) && (sensor[3] > sensor[4]) && (sensor[4] > sensor[5]) && (sensor[5] > sensor[6]) && (sensor[6] > sensor[7])) {
speed_motor -= 15;
Serial.println("right");
} else {
if ((sensor[0] < sensor[1]) && (sensor[1] < sensor[2]) && (sensor[2] < sensor[3]) && (sensor[3] < sensor[4]) && (sensor[4] < sensor[5]) && (sensor[5] < sensor[6]) && (sensor[6] < sensor[7])) {
speed_motor += 15;
Serial.println("left");
}
}
for (int i = 0; i < 8; i++) {
Serial.print(sensor[i]);
Serial.print(" || ");
}
Serial.println();
for (int i = 0; i < 8; i++) {
sensor[i] = 0;
count = 1;
}
Serial.println("Clear ");
while (eryoma.read(ePort6, 0) < 100 || eryoma.read(ePort6, 1) < 100 || eryoma.read(ePort6, 2) < 100 || eryoma.read(ePort6, 3) < 100 || eryoma.read(ePort6, 4) < 100 || eryoma.read(ePort6, 5) < 100 || eryoma.read(ePort6, 6) < 100 || eryoma.read(ePort6, 7) < 100) {}
}
eryoma.setMotorSpeed(A, speed_motor);
}
#include <Eryoma.h>
Eryoma eryoma;
#define max_level 60
int sensor[8] = {0, 0, 0, 0, 0, 0, 0, 0};
int count = 1;
int speed_motor = 0;
boolean flag = false;
void setup() {
eryoma.setupConnector(ePort6, LineArray);
Serial.begin(9600);
}
void loop() {
for (int i = 0; i < 8; i++) {
if (eryoma.read(ePort6, i) < max_level && !sensor[i]) {
sensor[i] = count;
count++;
Serial.print("Sensor ");
Serial.println(i);
}
}
if (count == 9) {
if ((sensor[0] > sensor[1]) && (sensor[1] > sensor[2]) && (sensor[2] > sensor[3]) && (sensor[3] > sensor[4]) && (sensor[4] > sensor[5]) && (sensor[5] > sensor[6]) && (sensor[6] > sensor[7])) {
speed_motor -= 15;
Serial.println("right");
} else {
if ((sensor[0] < sensor[1]) && (sensor[1] < sensor[2]) && (sensor[2] < sensor[3]) && (sensor[3] < sensor[4]) && (sensor[4] < sensor[5]) && (sensor[5] < sensor[6]) && (sensor[6] < sensor[7])) {
speed_motor += 15;
Serial.println("left");
} else {
if ((sensor[0] < sensor[1]) && (sensor[1] < sensor[2]) && (sensor[2] < sensor[3]) && (sensor[4] > sensor[5]) && (sensor[5] > sensor[6]) && (sensor[6] > sensor[7])) {
speed_motor = 0;
Serial.println("center");
}
}
}
for (int i = 0; i < 8; i++) {
Serial.print(sensor[i]);
Serial.print(" || ");
}
Serial.println();
for (int i = 0; i < 8; i++) {
sensor[i] = 0;
count = 1;
}
Serial.println("Clear ");
while (eryoma.read(ePort6, 0) < 100 || eryoma.read(ePort6, 1) < 100 || eryoma.read(ePort6, 2) < 100 || eryoma.read(ePort6, 3) < 100 || eryoma.read(ePort6, 4) < 100 || eryoma.read(ePort6, 5) < 100 || eryoma.read(ePort6, 6) < 100 || eryoma.read(ePort6, 7) < 100) {}
}
eryoma.setMotorSpeed(A, speed_motor);
}