Создание проекта Arduino с различными приводами и сенсорами

Я пытался сделать автоматизированную домашнюю систему безопасности Arduino с датчиком огня, считывателем карт RFID и датчиком движения PIR. У меня также есть три исполнительных механизма - активный пьезозуммер, реле постоянного тока(для представления системы орошения водой для пожарной сигнализации) и ЖК-дисплей, показывающий состояние безопасности дома. У меня есть индивидуальные наборы кодов для каждого из них, просто я не знаю, как объединить все это вместе, чтобы заставить их работать вместе.

Мой фон кодирования довольно прост, и я получил эти коды онлайн. Вот они :

ЖК-дисплей :

    #include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Установить ЖК-адрес на 0x27 для 16 символов и 2-строчного дисплея
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{
    // инициализация LCD
    lcd.begin();

    // Включить черный свет и распечатайте сообщение.
    lcd.backlight();
    lcd.print("Hello, world!");
}

void loop()
{
    // Ничего не делать здесь...
}

Считыватель RFID-карт :


/*
 * Initial Author: ryand1011 (https://github.com/ryand1011)
 *
 * Reads data written by a program such as "rfid_write_personal_data.ino"
 *
 * See: https://github.com/miguelbalboa/rfid/tree/master/examples/rfid_write_personal_data
 *
 * Uses MIFARE RFID card using RFID-RC522 reader
 * Uses MFRC522 - Library
 * -----------------------------------------------------------------------------------------
 *             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino
 *             Reader/PCD   Uno/101       Mega      Nano v3    Leonardo/Micro   Pro Micro
 * Signal      Pin          Pin           Pin       Pin        Pin              Pin
 * -----------------------------------------------------------------------------------------
 * RST/Reset   RST          9             5         D9         RESET/ICSP-5     RST
 * SPI SS      SDA(SS)      10            53        D10        10               10
 * SPI MOSI    MOSI         11 / ICSP-4   51        D11        ICSP-4           16
 * SPI MISO    MISO         12 / ICSP-1   50        D12        ICSP-1           14
 * SPI SCK     SCK          13 / ICSP-3   52        D13        ICSP-3           15
*/

#include <SPI.h>
#include <MFRC522.h>

#define RST_PIN 9 // Конфигурируемый, см. типичный макет pin выше
#define SS_PIN 10 // Конфигурируемый, см. типичный макет pin выше

MFRC522 mfrc522(SS_PIN, RST_PIN);   // Создать экземпляр MFRC522

//*****************************************************************************************//
void setup() {
  Serial.begin(9600);                                           // Initialize serial communications with the PC
  SPI.begin();                                                  // Init SPI bus
  mfrc522.PCD_Init();                                              // Init MFRC522 card
  Serial.println(F("Read personal data on a MIFARE PICC:"));    //shows in serial that it is ready to read
}

//*****************************************************************************************//
void loop() {

  // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory.
  MFRC522::MIFARE_Key key;
  for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF;

  //some variables we need
  byte block;
  byte len;
  MFRC522::StatusCode status;

  //-------------------------------------------

  // Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle.
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }

  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial()) {
    return;
  }

  Serial.println(F("**Card Detected:**"));

  //-------------------------------------------

  mfrc522.PICC_DumpDetailsToSerial(&(mfrc522.uid)); //dump some details about the card

  //mfrc522.PICC_DumpToSerial(&(mfrc522.uid));      //uncomment this to see all blocks in hex

  //-------------------------------------------

  Serial.print(F("Name: "));

  byte buffer1[18];

  block = 4;
  len = 18;

  //------------------------------------------- GET FIRST NAME
  status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 4, &key, &(mfrc522.uid)); //line 834 of MFRC522.cpp file
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("Authentication failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }

  status = mfrc522.MIFARE_Read(block, buffer1, &len);
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("Reading failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }

  //PRINT FIRST NAME
  for (uint8_t i = 0; i < 16; i++)
  {
    if (buffer1[i] != 32)
    {
      Serial.write(buffer1[i]);
    }
  }
  Serial.print(" ");

  //---------------------------------------- GET LAST NAME

  byte buffer2[18];
  block = 1;

  status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 1, &key, &(mfrc522.uid)); //line 834
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("Authentication failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }

  status = mfrc522.MIFARE_Read(block, buffer2, &len);
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("Reading failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }

  //PRINT LAST NAME
  for (uint8_t i = 0; i < 16; i++) {
    Serial.write(buffer2[i] );
  }


  //----------------------------------------

  Serial.println(F("\n**End Reading**\n"));

  delay(1000); //change value if you want to read cards faster

  mfrc522.PICC_HaltA();
  mfrc522.PCD_StopCrypto1();
}
//*****************************************************************************************//

Датчик движения PIR :

int sensor = 2;              // the pin that the sensor is atteched to
int state = LOW;             // by default, no motion detected
int val = 0;                 // variable to store the sensor status (value)

void setup() {
  pinMode(led, OUTPUT);      // initalize LED as an output
  pinMode(sensor, INPUT);    // initialize sensor as an input
  Serial.begin(9600);        // initialize serial
}

void loop(){
  val = digitalRead(sensor);   // read sensor value
  if (val == HIGH) {           // check if the sensor is HIGH
    digitalWrite(led, HIGH);   // turn LED ON
    delay(100);                // delay 100 milliseconds 
    
    if (state == LOW) {
      Serial.println("Motion detected!"); 
      state = HIGH;       // update variable state to HIGH
    }
  } 
  else {
      digitalWrite(led, LOW); // turn LED OFF
      delay(200);             // delay 200 milliseconds 
      
      if (state == HIGH){
        Serial.println("Motion stopped!");
        state = LOW;       // update variable state to LOW
    }
  }
}

Датчик пожара с активным зуммером:

int flameSensorPin = 0; //  a0 
int flameSensorReading; 
int buzzerPin=8; 
void setup(void) 
{  
  Serial.begin(9600);
  pinMode(buzzerPin,OUTPUT);
} 
void loop(void) 
{ 
  flameSensorReading = analogRead(flameSensorPin);  
  if(flameSensorReading< 1023)
{
  digitalWrite(buzzerPin,HIGH);
}
else
{
  digitalWrite(buzzerPin,LOW);
}
 Serial.print("Analog reading = "); 
 Serial.println(flameSensorReading); // the raw analog reading delay(1000); 
 delay(500);
}

Реле постоянного тока :

// функция настройки запускается один раз при нажатии кнопки reset или power board
void setup() {
  // инициализировать цифровой вывод LED_BUILTIN в качестве вывода.
  pinMode(7, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(7, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(7, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

Любая помощь будет оценена по достоинству.

, 👍0

Обсуждение

Это ответ на ваш вопрос? Как объединить 2 разных скетча together Обратите внимание, что объединение скетчей означает, что вам нужно понять, как работает каждый скетч. Простое копирование и вставка в этом случае не работают., @chrisl

Кроме того, вам действительно нужно изучить принцип неблокирующего стиля кодирования, как в примере "BlinkWithoutDelay" (который поставляется с IDE Arduino), используя функцию " millis ()". Затем вы можете отбросить все вызовы delay (), что является обязательным для объединения такого количества кодов вместе., @chrisl

Я не собираюсь лгать и говорить, что понимаю, но на самом деле я еще больше запутался . Например, не могли бы вы сказать мне, какой следующий шаг мне нужно сделать, чтобы достичь конечного результата. Я должен представить этот проект к концу этой недели. РАЗРЫВ, @Arduino UNO