не могли бы вы проверить мой код, в чем проблема?

rtc
#include <Arduino.h>
#include <Wire.h>
#include <RTClib.h>

int hour1 = 2;
int min1 = 40;
int sec1 = 0;
int hour2 = 2;
int min2 = 39 ;
int sec2 = 10;

const int light = 13;
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
   
RTC_DS1307 rtc;


void setup()
{
  
Serial.begin(9600);
Wire.begin();
rtc.begin();

pinMode(light, OUTPUT);
pinMode(2, INPUT_PULLUP);
pinMode(3,INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
}

void loop()
{
  DateTime now = rtc.now();
   buttonState1 = digitalRead(2);
   buttonState2 = digitalRead(3);
   buttonState3 = digitalRead(4);
  if( buttonState1 == LOW)
    {   if(now.hour() == hour1 && now.minute()== min1 && now.second() == sec1)
        { 
          digitalWrite(light, HIGH);
        }
        if(now.hour() == hour2 && now.minute()== min2 && now.second() == sec2)
        {
          digitalWrite(light, LOW);
        }
    }

   if(buttonState2 == LOW) 
   
       { int x1 =  now.hour();
         int x2 =  now.minute();
        if (now.hour() == x1 && now.minute()== x2)
         {  
          digitalWrite(light, HIGH);
                          
        }
   if(now.hour() == hour2 && now.minute()== min2 && now.second() == sec2)
        {
          digitalWrite(light, LOW);
        }
    } 
     
    if(buttonState3 == LOW)
   
      {   int y1 =  now.hour();
          int y2 = now.minute();
       { if (now.hour() == y1 && now.minute()== y2)
         {  
          digitalWrite(light, LOW);
                          
        }
   if(now.hour() == hour1 && now.minute()== min1 && now.second() == sec1)
        {
          digitalWrite(light, HIGH);
        }
    } }
}   
  • контакт 2 для кнопки 1
  • контакт 3 для кнопки 2
  • контакт 4 для кнопки 3

мое требование:-

  • контакт 2 для кнопки 1: свет должен включаться и выключаться в соответствии с заданным временем, т. е. час1, мин1, сек1 и час2, мин23 и сек2 соответственно....
  • контакт 3 для кнопки 2: индикатор должен загореться после нажатия кнопки, и это время должно быть сохранено в x1, он должен быть выключен в час2, мин2 и сек2... и в следующий раз снова должен загореться в x1. ..
  • pin 4 для кнопки 3: свет должен быть выключен после нажатия кнопки, и это время должно быть сохранено в y1, оно должно быть включено в hour1, min1 и sec1... и в следующий раз снова должно быть выключено в y1. ..

работа программы:

  • контакт 2 для кнопки 1: работает правильно
  • контакт 3 для кнопки 2: свет включается сразу после того, как он выключен... не в течение времени, сохраненного x1 и x2
  • Контакт 4 для кнопки 3 гаснет сразу после того, как он находится в состоянии... не во время сохранения y1 и y2

, 👍-7

Обсуждение

этот код предназначен для включения и выключения света в соответствии с rtc при нажатии кнопки, но работает только первая кнопка, а две другие не могут считывать и сохранять время. предложить исправления, @pranav

Не могли бы вы сделать минимальные усилия, чтобы прояснить ваш вопрос, т.е. написать правильный английский, правильно отформатировать код, описать ошибки, возвращаемые компилятором..., @jfpoilpret


1 ответ


6

Ваша проблема в этих строках:

if(digitalRead(2 == HIGH)) ...

if(digitalRead(3 == HIGH)) ...

if(digitalRead(4 == HIGH)) ...

Все скобки неправильные! Правильный синтаксис:

if(digitalRead(2) == HIGH) ...

if(digitalRead(3) == HIGH) ...

if(digitalRead(4) == HIGH) ...

Что вы сравнивали 2, 3 и 4 со значением HIGH, а также потому, что они t равно, результат был 0. Затем код выполнял digitalRead(0) и, если результат был не 0, выполнял содержимое фигурных скобок.

,

Обратите внимание, что исходный вопрос был изменен после этого ответа. Ответ отражает проблему того времени., @John Burger