Arduino как ворота - PullRequest
       12

Arduino как ворота

0 голосов
/ 06 июля 2019

Я новичок в кодировании Arduino.

У меня есть проект, который использует Arduino для открывания ворот, но только когда температура поднимается выше 24 градусов.Проблема в том, как заставить Arduino отправить сигнал на размыкание реле, но только один раз?

Я пытался использовать операторы if и пытаться выполнить их некоторое время (1);но это, кажется, заканчивает весь сценарий.так что это не делает то, что я хочу ...

``` 
float temp;
int tempPin = A0;
int Relay1 = 13;
bool ronce = false;

void setup() {
    Serial.begin(9600);
    pinMode(Relay1,OUTPUT);

}



void loop() {
  delay(500);

  temp = analogRead(tempPin);
  temp = temp * 0.48828125;
  Serial.print(temp);

if(temp>24){
   ronce == true;
   Serial.println(" Temp over 24 degree");

   if (ronce = true){
     Serial.println(" Ronce is true.");

 while(1){
 Serial.println("runOnce");
 digitalWrite(Relay1,HIGH);
 delay(500); 
 digitalWrite(Relay1,LOW); 
     }
   }
 }

else {
   ronce == false;
   Serial.println(" failure");
}

}

Я хочу, чтобы он отправил сигнал на 24 градуса на реле, чтобы перейти на NC и заземление, а затем выключиться через 500 мс.тогда он не должен включаться снова до тех пор, пока он снова не опустится ниже 24 градусов.

Выход получается между 20-37 градусами, поэтому LM35 делает, как я хочу, это просто код.

1 Ответ

0 голосов
/ 06 июля 2019

Вам просто нужно создать функцию чтения, а затем читать ее, пока она не достигнет значения выше 24, затем просто включить реле и снова подождать, пока температура не опустится ниже 24.

int tempPin = A0;
int Relay1 = 13;

float read_temp()
{
    float sum = 0;
    float temp;
    for (int i = 0; i < 500; i++)
    {
        sum += analogRead(tempPin);
        delayMicroseconds(100);
    }
    temp = sum / 500;
    temp = temp * 0.48828125;
    return temp;
}

void setup()
{
    Serial.begin(9600);
    pinMode(Relay1, OUTPUT);
}

void loop()
{
    if (read_temp() > 24)
    {
        Serial.println("Temp over 24 degree");
        digitalWrite(Relay1, HIGH);
        delay(500);
        digitalWrite(Relay1, LOW);
        // wait until temp reach below 23.5
        while (read_temp() > 23.5)
            ;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...