ESP8266 слишком много аргументов для функции

Мой проект использует ESP8226, чтобы разрешить: 1) пользователь для установки будильника. 2) через 20 секунд после звонка будильника он уведомит телефон через приложение Blynk с помощью датчика движения. 3) через 40 секунд отключится датчик и не будет отправлять уведомление снова. У меня есть две проблемы:

  • Получена ошибка с кодированием (digitalRead(nilai_sensor, LOW);) «слишком много аргументов для функции 'int digitalRead(uint8_t)»
  • Мне нужна помощь с кодированием для отключения датчика и больше не уведомлю.

Ниже мой код Arduino:

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <TimeLib.h>
#include <WidgetRTC.h>
BlynkTimer timer;
WidgetRTC rtc;
WidgetLED led1(V10);
// Вы должны получить токен авторизации в приложении Blynk.
// Переходим в настройки проекта (значок ореха).
char auth[] = "a7d4522186464dd297870f2ab8e53250";

// Ваши учетные данные Wi-Fi.
// Установите пароль «» для открытых сетей.
char ssid[] = "NabiL";
char pass[] = "limaringgitlimapuluhsen";
int flag = 0;
int buzzer = 12;
int motor = 13;
int sensor = 4;



int saat;
int on_delay;
int off_delay;
int ok_delay;

int get1 = 0;
int get2 = 0;
int nilai_sensor = 0;

void blinkLedWidget()
{
  if (led1.getValue()) {
    led1.off();
    Serial.println("LED on V1: off");
  } else {
    led1.on();
    Serial.println("LED on V1: on");
  }
}

void clockDisplay()
{
  // Вы можете вызвать часы(), минуты(), ... в любое время
  // Подробности см. в примерах библиотеки времени.

  String currentTime = String(hour()) + ":" + minute() + ":" + second();
  String currentDate = String(day()) + "/" + month() + "/" + year();
  Serial.print("Current time: ");
  Serial.print(currentTime);
  Serial.print("Current Time: ");
  Serial.print(currentDate);
  Serial.println();

  // Отправляем время в приложение
  Blynk.virtualWrite(V1, currentTime);
  // Отправляем дату в приложение
  Blynk.virtualWrite(V2, currentDate);
}

BLYNK_CONNECTED() {
  // Синхронизировать время при соединении
  rtc.begin();
}
BLYNK_WRITE(V5) // Таймер
{
  Serial.println(param.asStr());


  if (param.asInt())
  {
    on_delay = saat + 20;  //20Сб
    off_delay = saat + 10;  //10Сб
    ok_delay = saat + 40;  //40Сб

    digitalWrite(buzzer, HIGH);
    digitalWrite(motor, HIGH);
  }
}
BLYNK_WRITE(V6) // Таймер
{
  Serial.println(param.asStr());


  if (param.asInt())
  {
    on_delay = saat + 20;  //20Сб
    off_delay = saat + 10;  //10Сб
    ok_delay = saat + 40;  //40Сб

    digitalWrite(buzzer, HIGH);
    digitalWrite(motor, HIGH);
  }
}
BLYNK_WRITE(V0){
  Serial.println(param.asStr());


  if (param.asInt())
  {

    digitalWrite(buzzer, HIGH);
    digitalWrite(motor, HIGH);

  }
  else

  {
    digitalWrite(buzzer, LOW);
    digitalWrite(motor, LOW);

  }
}
BLYNK_WRITE(V12){
  Serial.println(param.asStr());


  if (param.asInt())
  {

    digitalWrite(buzzer, HIGH);
  }
  else

  {
    digitalWrite(buzzer, LOW);
  }
}
BLYNK_WRITE(V13){
  Serial.println(param.asStr());


  if (param.asInt())
  {

    digitalWrite(motor, HIGH);
  }
  else

  {

    digitalWrite(motor, LOW);
  }
}
void setup()
{
  // Консоль отладки
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
  setSyncInterval(10 * 60); // Интервал синхронизации в секундах (10 минут)

  // Отображение цифровых часов каждые 1 секунду
  timer.setInterval(1000L, clockDisplay);
timer.setInterval(1000L, blinkLedWidget);
  // Настройка кнопки уведомления на контакте D1



  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(4, INPUT);


}
void loop()
{
  saat = millis() / 1000;

  if(saat == off_delay)
  {
    digitalWrite(buzzer, LOW);
    digitalWrite(motor, LOW);
  }



   if(saat == on_delay)
  {
    Serial.println("Time Up");
    get1 = 1;
  }

     if(get1 == 1)
    {
     Serial.println("Program Sensor");

   nilai_sensor = digitalRead(sensor); 

    if(nilai_sensor == HIGH)
    {
      Serial.println("Still sleeping");
     Blynk.notify("Still sleeping");

    //задержка(5000);
   }
  }


if(saat == ok_delay)
  { 
    Serial.println("Shut Down Sensor");
    get2 = 1;
  }
 if(get2 == 1)
  {
    Serial.println("turn off Sensor");
    nilai_sensor = digitalRead(sensor);
   digitalRead(nilai_sensor, LOW);

  }


  Blynk.run();
  timer.run(); // Инициирует BlynkTimer

}

, 👍0

Обсуждение

как вы хотите отключить датчик через контакт, который вы используете для его считывания? просто не читай это, @Juraj


1 ответ


2

Функция digitalRead() имеет только один аргумент: цифровой вывод, состояние которого вы хотите узнать (высокий или низкий).

Вы должны изменить использование этой функции примерно так:

int state = digitalRead(nilai_sensor)

if (state == low) {
    //сделать что-нибудь здесь
}

Надеюсь, вы найдете для себя полезное :D

,