Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Александр Кононенко от 15 Мая 2021, 14:37:06

Название: У кого-то получилось увязать Arduino с датчиками DS18B20 и DHT11?
Отправлено: Александр Кононенко от 15 Мая 2021, 14:37:06
Никак не получается вывести значения с датчиков в SCADA. Может у кого-то получилось?
Название: Re: У кого-то получилось увязать Arduino с датчиками DS18B20 и DHT11?
Отправлено: Александр Кононенко от 15 Мая 2021, 15:19:33
Ура, у меня получилось подключить датчик DHT11!

Код: (c++)
#include <OPC.h>
#include <Bridge.h>
#include <Ethernet.h>
#include <SPI.h>
#include "DHT.h"

//-----------------------------------------------------------------------------------------------------------------------------
//Датчик DHT11
#define DHTPIN 2 //Номер входу, до якого підключений датчик DHT11
DHT dht(DHTPIN, DHT11); //Ініціалізація датчика

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

#define pin_D2 2
#define pin_D4 4
#define pin_D5 5
#define pin_D6 6
#define pin_D7 7
#define pin_D8 8
#define pin_D10 10
#define pin_D11 11
#define pin_D12 12
#define pin_D13 13

OPCSerial aOPCSerial;


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

// PWM

int D9 = 9;
int D3 = 3;
int buf = 0;
int buf1 = 0;
float t = 0;
float h = 0;


//------------------------------------------------------------------------------------------------------------------------------
// Робота з віртуальними змінними

byte TemperatureDHT111(const char *itemID, const opcOperation opcOP, const byte value) {
  float t = dht.readTemperature(); //Измеряем температуру
  return t;
}
//--------------------------------------------------------------------------------------------
byte HumidityDHT111(const char *itemID, const opcOperation opcOP, const byte value) {
  float h = dht.readHumidity(); //Измеряем влажность
  return h;
}
//--------------------------------------------------------------------------------------------
byte VirtualTemperature1(const char *itemID, const opcOperation opcOP, const byte value) {
  return random(25, 29);
}
//------------------------------------------------------------------------------------------------------------------------------



int D9_Item(const char *itemID, const opcOperation opcOP, const int value) {
  if (opcOP == opc_opwrite) {
    analogWrite(D9, value);
    buf = value;
  }
  return buf;
}


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


int D3_Item(const char *itemID, const opcOperation opcOP, const int value) {
  if (opcOP == opc_opwrite) {
    analogWrite(D3, value);
    buf1 = value;
  }
  return buf1;
}


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


bool func_D2(const char *itemID, const opcOperation opcOP, const bool value) {
  static bool ledValue_D2 = false;

  if (opcOP == opc_opwrite) {
    ledValue_D2 = value;

    if (ledValue_D2)
      digitalWrite(pin_D2, LOW);
    else
      digitalWrite(pin_D2, HIGH);
  }
  else
    return ledValue_D2;
}


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


bool func_D4(const char *itemID, const opcOperation opcOP, const bool value) {
  static bool ledValue_D4 = false;
  if (opcOP == opc_opwrite) {
    ledValue_D4 = value;
    if (ledValue_D4)
      digitalWrite(pin_D4, HIGH);
    else
      digitalWrite(pin_D4, LOW);
  }
  else
    return ledValue_D4;
}

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


bool func_D5(const char *itemID, const opcOperation opcOP, const bool value) {
  static bool ledValue_D5 = false;
  if (opcOP == opc_opwrite) {
    ledValue_D5 = value;
    if (ledValue_D5)
      digitalWrite(pin_D5, HIGH);
    else
      digitalWrite(pin_D5, LOW);
  }
  else
    return ledValue_D5;
}

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


bool func_D6(const char *itemID, const opcOperation opcOP, const bool value) {
  static bool ledValue_D6 = false;
  if (opcOP == opc_opwrite) {
    ledValue_D6 = value;
    if (ledValue_D6)
      digitalWrite(pin_D6, HIGH);
    else
      digitalWrite(pin_D6, LOW);
  }
  else
    return ledValue_D6;
}


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


bool func_D7(const char *itemID, const opcOperation opcOP, const bool value) {
  static bool ledValue_D7 = false;
  if (opcOP == opc_opwrite) {
    ledValue_D7 = value;
    if (ledValue_D7)
      digitalWrite(pin_D7, HIGH);
    else
      digitalWrite(pin_D7, LOW);
  }
  else
    return ledValue_D7;
}


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


bool func_D8(const char *itemID, const opcOperation opcOP, const bool value) {
  static bool ledValue_D8 = false;
  if (opcOP == opc_opwrite) {
    ledValue_D8 = value;
    if (ledValue_D8)
      digitalWrite(pin_D8, LOW);
    else
      digitalWrite(pin_D8, HIGH);
  }
  else
    return ledValue_D8;
}

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


bool func_D10(const char *itemID, const opcOperation opcOP, const bool value) {
  static bool ledValue_D10 = false;
  if (opcOP == opc_opwrite) {
    ledValue_D10 = value;
    if (ledValue_D10)
      digitalWrite(pin_D10, HIGH);
    else
      digitalWrite(pin_D10, LOW);
  }
  else
    return ledValue_D10;
}


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


bool func_D11(const char *itemID, const opcOperation opcOP, const bool value) {
  static bool ledValue_D11 = false;
  if (opcOP == opc_opwrite) {
    ledValue_D11 = value;
    if (ledValue_D11)
      digitalWrite(pin_D11, HIGH);
    else
      digitalWrite(pin_D11, LOW);
  }
  else
    return ledValue_D11;
}


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


bool func_D12(const char *itemID, const opcOperation opcOP, const bool value) {
  static bool ledValue_D12 = false;
  if (opcOP == opc_opwrite) {
    ledValue_D12 = value;
    if (ledValue_D12)
      digitalWrite(pin_D12, HIGH);
    else
      digitalWrite(pin_D12, LOW);
  }
  else
    return ledValue_D12;
}


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


bool func_D13(const char *itemID, const opcOperation opcOP, const bool value) {
  static bool ledValue_D13 = false;
  if (opcOP == opc_opwrite) {
    ledValue_D13 = value;
    if (ledValue_D13)
      digitalWrite(pin_D13, HIGH);
    else
      digitalWrite(pin_D13, LOW);
  }
  else
    return ledValue_D13;
}


//--------------------------
void setup() {
  Serial.begin(9600);
  dht.begin();

  pinMode(pin_D2, INPUT);
    pinMode(3, OUTPUT);
      pinMode(pin_D4, OUTPUT);
        pinMode(pin_D5, OUTPUT);
          pinMode(pin_D6, OUTPUT);
            pinMode(pin_D7, OUTPUT);
              pinMode(pin_D8, OUTPUT);
                pinMode(9, OUTPUT);
                  pinMode(pin_D10, OUTPUT);
                     pinMode(pin_D11, OUTPUT);
                        pinMode(pin_D12, OUTPUT);
                           pinMode(pin_D13, OUTPUT);

  aOPCSerial.setup();

  //объявление переменных
  aOPCSerial.addItem("D2", opc_readwrite, opc_bool, func_D2);
    aOPCSerial.addItem("D4", opc_readwrite, opc_bool, func_D4);
      aOPCSerial.addItem("D5", opc_readwrite, opc_bool, func_D5);
        aOPCSerial.addItem("D6", opc_readwrite, opc_bool, func_D6);
          aOPCSerial.addItem("D7", opc_readwrite, opc_bool, func_D7);
            aOPCSerial.addItem("D8", opc_readwrite, opc_bool, func_D8);
              aOPCSerial.addItem("D10", opc_readwrite, opc_bool, func_D10);
                 aOPCSerial.addItem("D11", opc_readwrite, opc_bool, func_D11);
                    aOPCSerial.addItem("D12", opc_readwrite, opc_bool, func_D12);
                      aOPCSerial.addItem("D13", opc_readwrite, opc_bool, func_D13);

  aOPCSerial.addItem("D9", opc_readwrite, opc_int, D9_Item);
    aOPCSerial.addItem("D3", opc_readwrite, opc_int, D3_Item);

  aOPCSerial.addItem("TemperatureDHT111", opc_readwrite, opc_byte, TemperatureDHT111);
    aOPCSerial.addItem("HumidityDHT111", opc_readwrite, opc_byte, HumidityDHT111);
      aOPCSerial.addItem("VirtualTemperature1", opc_readwrite, opc_byte, VirtualTemperature1);
}

void loop() {
  aOPCSerial.processOPCCommands();
}