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
}
@Wady, 👍0
Обсуждение1 ответ
▲ 2
Функция digitalRead()
имеет только один аргумент: цифровой вывод, состояние которого вы хотите узнать (высокий или низкий).
Вы должны изменить использование этой функции примерно так:
int state = digitalRead(nilai_sensor)
if (state == low) {
//сделать что-нибудь здесь
}
Надеюсь, вы найдете для себя полезное :D
,
@k.Cyborg
Смотрите также:
- Как использовать миллис вместо задержки?
- Как попытаться подключиться к Wi-Fi только один раз?
- Узел MCU не работает правильно
- Ошибка при компиляции для NodeMCU
- NodeMCU - Vin контакт как выход 5V?
- Как заставить 5-вольтовое реле работать с NodeMCU
- ESP8266 не подключается к Wi-Fi
- Разве в узле MCU v3 (LoLin) нет встроенного светодиода?
как вы хотите отключить датчик через контакт, который вы используете для его считывания? просто не читай это, @Juraj