Можете ли вы помочь мне объединить эти скетчи датчиков в один в Arduino?

Я хочу объединить эти три скетча в один.

ДАТЧИК ДОЖДЯ:

int rainPin = A0;
int greenLED = 6;
int redLED = 7;
// вы можете настроить пороговое значение
int thresholdValue = 500;

void setup(){
  pinMode(rainPin, INPUT);
  pinMode(greenLED, OUTPUT);
  pinMode(redLED, OUTPUT);
  digitalWrite(greenLED, LOW);
  digitalWrite(redLED, LOW);
  Serial.begin(9600);
}

void loop() {
  // читаем входной сигнал на аналоговом выводе 0:
  int sensorValue = analogRead(rainPin);
  Serial.print(sensorValue);

  if(sensorValue < thresholdValue){
    Serial.println(" - It's wet");
    digitalWrite(greenLED, LOW);
    digitalWrite(redLED, HIGH);
  }
  else {
    Serial.println(" - It's dry");
    digitalWrite(greenLED, HIGH);
    digitalWrite(redLED, LOW);
  }
  delay(500);
}

ДАТЧИК СВЕТА:

int ldrPin = A0;
int greenLED = 6;
int redLED = 7;
// вы можете настроить пороговое значение
int thresholdValue = 500;

void setup(){
  pinMode(ldrPin, INPUT);
  pinMode(greenLED, OUTPUT);
  pinMode(redLED, OUTPUT);
  digitalWrite(greenLED, LOW);
  digitalWrite(redLED, LOW);
  Serial.begin(9600);
}

void loop() {
  // читаем входной сигнал на аналоговом выводе 0:
  int sensorValue = analogRead(ldrPin);
  Serial.print(sensorValue);

  if(sensorValue < thresholdValue){
    Serial.println(" - light");
    digitalWrite(greenLED, LOW);
    digitalWrite(redLED, HIGH);
  }
  else {
    Serial.println(" - dark");
    digitalWrite(greenLED, HIGH);
    digitalWrite(redLED, LOW);
  }
  delay(500);
}

ДАТЧИК ДЫМА:

int smokeD0 = A5;
int greenLed = 11;
int redLed = 12;
// Ваше пороговое значение
int sensorThres = 300;

void setup() {
  pinMode(smokeD0, INPUT);
  pinMode(greenLed, OUTPUT);
  pinMode(redLed, OUTPUT);
  digitalWrite(greenLed, LOW);
  digitalWrite(redLed, LOW);
  Serial.begin(9600);
}

void loop() {
  int analogSensor = analogRead(smokeD0);
  Serial.println(analogSensor);


  // Проверяем, достигло ли порогового значения
  if (analogSensor < sensorThres)
  {
    Serial.println(" - Smoke");
    digitalWrite(redLed, LOW);
    digitalWrite(greenLed, HIGH);
  }
  else
  {
    Serial.println(" - No Smoke");
    digitalWrite(redLed, HIGH);
    digitalWrite(greenLed, LOW);
  }
  delay(100);
}

Я хочу объединить эти коды в один только с двумя выходами:

  • зеленый светодиод и;
  • redLED.

, 👍1

Обсуждение

Какая у вас проблема с их объединением? Вы не задали актуальный вопрос, @chrisl

Единственная проблема — одинаковые имена для «sensorValue», «thresholdValue» и одинаковые контакты для красного и зеленого светодиода, а также аналоговый контакт A0. Все в первых двух фрагментах., @KIIV


1 ответ


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

0

Переименование переменных

  1. Переименуйте thresholdValue в первых двух скетчах в rainSensorThreshold и lightSensorThreshold соответственно и sensorThres в smokeSensorThreshold в третьем скетче.

  2. Переименуйте sensorValue в первых двух скетчах в rainSensorValue и lightSensorValue соответственно и analogSensor в smokeSensorValue в третьем скетче.

Изменить аналоговый контакт

Используйте A1 (или другой аналоговый вход, отличный от A0 или A5) для ldrPin во втором скетч, например:

int ldrPin = A0;

Постоянные светодиодные контакты

В третьем скетче используйте те же контакты, что и в первых двух скетчах, для двух светодиодов и. Обратите внимание на изменение регистра:

int greenLed = 11;
int redLed = 12;

в

int greenLED = 6;
int redLED = 7;

Перекомпилируйте каждый скетч

Чтобы убедиться, что каждый скетч по-прежнему работает, перекомпилируйте каждый из них отдельно.

Объедините код

Наконец... Соедините код соответствующим образом, сохраняя три части отдельными:

  • Глобальные переменные
  • setup()
  • цикл()
,

У меня проблема с этим --- int SensorValue = AnalogRead(rainPin);, @R E

Ах, я это пропустил. Я обновил свой ответ., @Greenonline

Не забудьте проголосовать за :-), @Greenonline