Добрый день! Прошу совета или помощи в довольно тривиальной ситуации. А ситуация такова: имеется плата ардуино, внешнее устройство (работает исправно). На 6 пин ардуино посылается сигнал, задача в том, чтобы программно на ардуино сделать так, чтобы в этот момент двигатель начал движение на расстояние Х, после чего двигатель должен остановиться, следом должен посылаться сигнал c ардуино на реле, скажем, пин A0. Важно, что если на пин 6 не подан сигнал, то ардуино не должна посылать сигнал на A0. Такой код у меня получилось написать, но работает он не так, как я предполагал: Двигатель прокручивается, после этого срабатывает устройство, но если я умышленно не пропишу включение реле, двигатель всё равно прокрутится. Я в этом деле новичок, понимаю, что ошибка может быть пустячная и смешная, но всё же будут рад любой помощи. Код (C++): #include <Stepper.h> #define PIN_RELAY A0 // Определяем пин, используемый для подключения реле #define parus 6 int dot = 0; int bot = 0; Stepper motor(400, 11, 10); // объект motor, 400 шагов на оборот void setup() { motor.setSpeed(2000); // скорость 60 об. в мин. pinMode(PIN_RELAY, OUTPUT); // Объявляем пин реле как выход digitalWrite(PIN_RELAY, LOW); pinMode(parus, INPUT); // Объявляем пин пин 6 как вход digitalWrite(parus, HIGH); // } void loop() { dot = digitalRead(PIN_RELAY); bot = digitalRead(parus); if (bot == 1 && dot == 0){ motor.step(540); // 5 оборотов (240 шагов) по часовой стрелке delay(100); } if (bot == 0 && dot == 1) { digitalWrite(PIN_RELAY, HIGH); // Включаем реле - посылаем низкий уровень сигнала delay(100); digitalWrite(PIN_RELAY, LOW); // Отключаем реле - посылаем высокий уровень сигнала delay(700); } }
Попробуйте еще раз сформулировать алгоритм. Пока вы это сделали нечетко. поэтому и с кодом у вас проблемы. Я в вашем описании не вижу. как двигатель зависит от реле. Реле. судя по описанию - это выход. с какой стати вы с него читаете какие-то сигналы?