Объединение двух разных программ в один скетч

Я работаю над проектом, в котором используется релейный модуль, 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 минут

, 👍0


1 ответ


Лучший ответ:

1

Самый простой способ объединения двух программ:

  1. Скопируйте содержимое двух программ в один новый файл .ino (программу)
  2. Переименуйте первую функцию настройки setup_one
  3. Переименуйте первую функцию цикла loop_one
  4. Переименуйте другие функции настройки и цикла setup_two и loop_two
  5. Добавьте следующий код в конец этого файла.

Код:

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' минут, прежде чем у вас будет несколько микросекунд, чтобы нажать кнопку.

Если вы хотите, чтобы мотор реагировал на кнопку, то измените описание на естественном языке так, чтобы оно делало то, что вам нужно, а затем замените английский код, и у вас должна получиться программа, близкая к рабочей. (Надеюсь)

,