Объединение двух разных программ в один скетч
Я работаю над проектом, в котором используется релейный модуль, Arduino Atmega328 и 2 двигателя 12 В постоянного тока. Исходя из кода, который я даю, первый код - двигатель 1 будет работать в зависимости от входного переключателя. А второй код - двигатель будет работать в зависимости от времени задержки. Я собираюсь объединить эти два кода в один скетч, надеясь, что эти два кода будут работать вместе. Но я не знаю, как их объединить.
`int motorPin = 10; // контакт, который включает двигатель
int blinkPin = 9; // контакт, который включает светодиод
int watertime = 5; // сколько времени поливать в секундах
int waittime = 60; // сколько времени ждать между поливами, в минутах
void setup()
{
pinMode(motorPin, OUTPUT);
pinMode(blinkPin, OUTPUT); // устанавливаем вывод 13 на выход, чтобы мы могли использовать его для включения светодиода
}
void loop()
{
digitalWrite(motorPin, HIGH); // включаем мотор
digitalWrite(blinkPin, HIGH); // включаем светодиод
delay(watertime*3000); // умножьте на 1000, чтобы перевести секунды в миллисекунды
digitalWrite(motorPin, LOW); // выключить мотор
digitalWrite(blinkPin, LOW); // выключить светодиод
delay(waittime*6000); // умножьте на 60000, чтобы перевести минуты в миллисекунды
}`
Это кодировка для запуска двигателя с использованием времени задержки
const int buttonPin = 2; // номер контакта кнопки
const int ledPin = 13; // номер пина светодиода
// переменные изменятся:
int buttonState = 0; // переменная для чтения состояния кнопки
void setup() {
// инициализируем вывод светодиода как выход:
pinMode(ledPin, OUTPUT);
// инициализируем вывод кнопки как вход:
pinMode(buttonPin, INPUT);
}
void loop() {
// считываем состояние значения кнопки:
buttonState = digitalRead(buttonPin);
// проверяем, нажата ли кнопка. Если да, то buttonState имеет значение HIGH:
if (buttonState == LOW) {
// включаем светодиод:
digitalWrite(ledPin, LOW);
} else {
// выключить светодиод:
digitalWrite(ledPin, HIGH);
}
}
это код, который будет запускать двигатель в зависимости от переключателя
на данный момент я не имею ни малейшего представления, как объединить эти два кода.
Идея моего проекта заключается в том, что когда переключатель LOW (контакт 3), двигатель 1 (контакт 13) будет HIGH, пока переключатель не станет HIGH, двигатель 1 будет LOW и остановится. В то же время, будет задержка времени на 10 секунд, и двигатель 2 (контакт 10) будет активен вскоре после того, как переключатель станет LOW и задержка времени на 10 секунд, и двигатель 2 будет активен со временем в течение 25 секунд и остановится, а следующий активен еще 60 минут
@Asrul Asyraff, 👍0
1 ответ
Лучший ответ:
Самый простой способ объединения двух программ:
- Скопируйте содержимое двух программ в один новый файл .ino (программу)
- Переименуйте первую функцию настройки
setup_one
- Переименуйте первую функцию цикла
loop_one
- Переименуйте другие функции настройки и цикла
setup_two
иloop_two
- Добавьте следующий код в конец этого файла.
Код:
void setup()
{
setup_one();
setupr_two();
}
void loop ()
{
loop_one();
loop_two();
}
Это очень упрощенный подход, и он не будет работать во всех случаях. Он будет работать в этом случае, но вы обнаружите, что он будет выполнять программу один, а затем программу два. Он будет работать, потому что ваши константы не конфликтуют (в верхней части программы), вы не используете один и тот же пин в разных программах и т. д.
Вам нужно изучить, что делает код, чтобы действительно объединить программы, вы увидите лучшие способы сделать это. Лучший способ изучить — это записать на своем родном языке, что делает каждая строка кода, так что в случае первой программы:
turn on the motor
turn on the LED
wait for 'watertime' seconds
turn off the motor
turn off the LED
wait for 'waittime' minutes
Для программы 2:
read the state of the pushbutton value:
If the button is in state low
Turn off the LED -- Not sure this might be on
else
Turn on the LED -- Not sure this might be off
Надеюсь, вы узнаете эти описания (это комментарии), и когда вы прочитаете описания, вы поймете, почему код, который вы собрали с помощью вышеуказанного метода, «не работает». Он работает, вам просто нужно подождать 'waittime' минут, прежде чем у вас будет несколько микросекунд, чтобы нажать кнопку.
Если вы хотите, чтобы мотор реагировал на кнопку, то измените описание на естественном языке так, чтобы оно делало то, что вам нужно, а затем замените английский код, и у вас должна получиться программа, близкая к рабочей. (Надеюсь)
- Как заставить 5-вольтовое реле работать с NodeMCU
- Когда следует использовать транзистор, МОП-транзистор, а когда следует использовать реле?
- Причины, по которым нельзя подключать реле непосредственно к цифровому контакту Arduino
- Esp8266 Vin контакт
- Правильный PIN для активации беспроводного реле с ESP8266 ESP-01
- Несколько неблокирующих таймеров обратного отсчета?
- Как инициализировать цифровой выходной контакт как LOW
- Управление реле 5В с помощью Wemos D1 R1