Нужна помощь - пропуск некоторых операторов serial.print
У меня есть проект, над которым я работаю для курятника. Я хочу контролировать дверь со временем восхода и захода солнца. Также глядя на несколько других вещей, но где-то по пути , я, должно быть, испортил размещение setup ()
, loop()
и других операторов void. Я больше не получаю Serial.print
заявления для печати. Я сделал довольно много заимствований из других кодов (которые могут быть очевидны для тех, кто гораздо лучше в этом, чем я). Для некоторых из этих заимствованных кодов я получаю серийные отпечатки. Я использую это как свою отладку, чтобы проверить передаваемые значения и определить, являются ли они тем, что я ожидаю, особенно для времени восхода и захода солнца, чтобы управлять приводом моей двери.
Есть какие-нибудь идеи, почему эти различные строки serial.print не печатаются?
Я указал некоторые строки serial.print с помощью <------------------------
.
/*************************************************************
Скачать последнюю версию библиотеки Blynk можно здесь:
https://github.com/blynkkk/blynk-library/releases/latest
Blynk - это платформа с приложениями для iOS и Android для управления
Arduino, Raspberry Pi и тому подобное через Интернет.
Вы можете легко создавать графические интерфейсы для всех ваших
проектов, просто перетаскивая виджеты.
Загрузки, документы, учебные пособия: http://www.blynk.cc
Генератор скетча: http://examples.blynk.cc
Сообщество Blynk: http://community.blynk.cc
Следуйте за нами: http://www.fb.com/blynkapp
http://twitter.com/blynk_app
Библиотека Blynk лицензирована по лицензии MIT
Этот пример кода находится в открытом доступе.
*************************************************************
ПРЕДУПРЕЖДЕНИЕ!
Очень сложно заставить его работать. Пожалуйста, прочтите эту статью:
http://help.blynk.cc/hardware-and-libraries/arduino/esp8266-with-at-firmware
Этот пример показывает, как значение может быть передано из Arduino в
приложение Blynk.
ЗАПИСКА:
BlynkTimer обеспечивает функциональность SimpleTimer:
http://playground.arduino.cc/Code/SimpleTimer
Настройка проекта приложения:
Виджет отображения значения, прикрепленный к виртуальному контакту V5
*************************************************************/
/* Прокомментируйте это, чтобы отключить печать и сэкономить место */
#define BLYNK_PRINT Serial
#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
#include "DHT.h"
#include <Wire.h>
#include <time.h>
#include <TimeLib.h>
#include <Dusk2Dawn.h>
#include <DS1307RTC.h>
#define TIMEZONE -6
#define LATITUDE 38.3970
#define LONGITUDE -90.6412
//Тип DHT, который используется
#define DHTTYPE DHT11 // DHT 11
//Какой вывод выхода DHT подключен к Arduino
#define DHTPIN 5
DHT dht(DHTPIN, DHTTYPE);
// Вы должны получить токен Auth в приложении Blynk.
// Перейдите в Настройки проекта (значок гайки).
char auth[] = "d*********************************0";
// Ваши учетные данные Wi-Fi.
// Установите пароль на "" для открытых сетей.
char ssid[] = "P**********k";
char pass[] = "m*****************a";
int DisconnectCount = 0;
int ReCnctFlag;
int ReCnctCount = 0;
Dusk2Dawn HouseSprings(LATITUDE,LONGITUDE, TIMEZONE);
tmElements_t tm;
//Изменяет Минуты на тот же формат, что и Восход/Закат солнца (минуты после полуночи)
int Mins = tm.Hour * 60 + tm.Minute;
int Sunrise = HouseSprings.sunrise(tm.Year, tm.Month, tm.Day, true);
int Sunset = HouseSprings.sunset(tm.Year, tm.Month, tm.Day, true);
//char Str_door_status[] = "";
// Аппаратный Serial на Mega, Leonardo, Micro...
//#define EspSerial Serial1
// или Serial программного обеспечения на Uno, Nano...
#include <SoftwareSerial.h>
SoftwareSerial EspSerial(2, 3); // RX, TX
// Ваша скорость передачи данных ESP8266: корректировка для каждого проекта
#define ESP8266_BAUD 9600
ESP8266 wifi(&EspSerial);
BlynkTimer timer;
//Раздел кода, который будет обрабатывать получение данных влажности/температуры и куда их отправлять
void send_sensor()
{
//Установите переменную h в значение для
float h = dht.readHumidity();
// Считывание температуры по Фаренгейту (isFahrenheit = true)
//Установите переменную f в значение temp
float f = dht.readTemperature(true);
//delay(1000);
//Выполните проверку, если h или f не имеют значения
if (isnan(h) || isnan(f)) {
Serial.println(F("Не удалось прочитать с датчика DHT!"));
return;
}
//Они будут использоваться для отправки данных в последовательное окно
Serial.println(h); // ------------------------
Serial.println(f); // ------------------------
//Установите виртуальный вывод 3 blynk на значение температуры
Blynk.virtualWrite(V3, f);
//Установите виртуальный вывод 4 blynk на значение влажности
Blynk.virtualWrite(V4, h);
}
// Эта функция каждую секунду отправляет время работы Arduino на виртуальный вывод (5).
// В приложении частота чтения виджета должна быть установлена на PUSH. Это означает
// что вы определяете, как часто отправлять данные в приложение Blynk.
void myTimerEvent()
{
// Вы можете отправить любое значение в любое время.
// Пожалуйста, не отправляйте больше 10 значений в секунду.
}
int in1 = 11;
int in2 = 12;
void motor_stop()
{
digitalWrite(in1,LOW);
digitalWrite(in2,LOW);
Blynk.virtualWrite(V6,0);
Blynk.virtualWrite(V7,0);
}
BLYNK_WRITE(V6)
{
int pinValue = param.asInt();
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
if (pinValue = 1);
{
digitalWrite(in1,HIGH);
digitalWrite(in2,LOW);
Blynk.virtualWrite(V0,1);
//delay(35000);
//digitalWrite(in1,LOW);
//Blynk.virtualWrite(V6,0);
timer.setTimeout(35000L, motor_stop);
Blynk.virtualWrite(V0,2);
}
}
BLYNK_WRITE(V7)
{
int pinValue = param.asInt();
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
if (pinValue = 1);
{
digitalWrite(in1,LOW);
digitalWrite(in2,HIGH);
Blynk.virtualWrite(V0,1);
//убрал эту функцию задержки, так как Блинку она не нравится
//delay(35000);
//digitalWrite(in1,LOW);
//Blynk.virtualWrite(V6,0);
//Secondary method of delay that Blynk appears to prefer
timer.setTimeout(35000L, motor_stop);
Blynk.virtualWrite(V0,0);
}
}
void setup()
{
// Консоль отладки
Serial.begin(9600);
// Set ESP8266 baud rate
EspSerial.begin(ESP8266_BAUD);
delay(10);
Blynk.begin(auth, wifi, ssid, pass);
// Вы также можете указать сервер:
//Blynk.begin(auth, wifi, ssid, pass, "blynk-cloud.com", 80);
//Blynk.begin(auth, wifi, ssid, pass, IPAddress(192,168,1,100), 8080);
// Setup a function to be called every second
timer.setInterval(1000L, myTimerEvent);
dht.begin();
timer.setInterval(1000L, send_sensor);
//RTC.read(tm);
}
BLYNK_CONNECTED() {
Serial.println("Connected");
ReCnctCount = 0;
}
//Serial.println(Sunrise); // 418
//Serial.println(Sunset); // 1004
void open_door()
{
}
void close_door()
{
Serial.println("info"); // <------------------------
Serial.println(Mins); // <------------------------
Serial.println(Sunrise); // <------------------------
Serial.println(Sunset); // <------------------------
char time2[] = "00:00";
Dusk2Dawn::min2str(time2, Sunrise);
Serial.print("Sunrise: "); // <------------------------
Serial.println(time2); // 16:53 // <------------------------
char time3[] = "00:00";
Dusk2Dawn::min2str(time3, Sunset);
Serial.print("Sunset: "); // <------------------------
Serial.println(time3); // 16:53 // <------------------------
}
void loop()
{
Serial.println(Mins); // <------------------------
Serial.println(Sunrise); // <------------------------
Serial.println(Sunset); // <------------------------
if (Blynk.connected())
{
Blynk.run(); // Запускает соединение Blynk
}
else if (ReCnctFlag == 0)
{
ReCnctFlag = 1; // Установить флаг повторного подключения
Serial.println("Запуск таймера повторного подключения через 3 секунды...");
timer.setTimeout(3000L, []() { // Функция Таймера повторного подключения Лямбды
ReCnctFlag = 0; // Сбросить флаг повторного подключения
ReCnctCount++; // Инкремент Счетчика повторного подключения
Serial.print("Попытка повторного подключения #");
Serial.println(ReCnctCount);
Blynk.connect(); // Попробуйте повторно подключиться к серверу
});
}
timer.run(); // Инициирует BlynkTimer
//if (Mins > Sunrise) {
//Serial.println("Door is open");
//}
//if (Mins > Sunset) {
// Serial.println("Door is closed");
//}
}
Вот что я получаю в последовательном окне:
[45108333] Ready (ping: 53ms).
Connected
0
- Устройство еще не подключено к сети при попытке подключить Arduino uno (с USB) к приложению Blynk
- Объединение двух кодов двух датчиков в одной программе
- Как отправлять информацию о данных без работы Wi-Fi на LCD?
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
Не знаю, почему в коде появилось что-то странное, извините за беспорядок. Все шло вместе из отдельных строк., @Shane Petschonek
Вы можете увидеть, что я сделал в [истории редактирования](https://arduino.stackexchange.com/posts/82158/revisions). Короче говоря, отступы, а не символы в одной кавычке. Я изменил вашу попытку выделить операторы печати жирным шрифтом, указав их стрелкой в комментарии, потому что форматирование не подходит для списков кода., @timemage
Я заметил, что в коде используется " 3 " в " SoftwareSerial EspSerial(2, 3)", который, похоже, является "последовательным" RX-контактом. Но сильно урезанная версия вашего кода, не делающая ничего, кроме этого, не казалась причиной проблемы. Мое единственное предложение состоит в том, чтобы вы начали удалять код из своего вопроса, начиная с вещей, с которыми люди, которые могли бы попытаться вам помочь, не захотят иметь дело. Blynk, датчик DHT, все, что вы можете удалить, все еще демонстрируя проблему., @timemage
поместите много последовательных инструкций.print, чтобы определить, где зависает программа, @jsotola
вы можете снова вызвать Serial.begin (), чтобы "исправить" это и посмотреть, не сломается ли что-то еще. Я предполагаю, что-то пытается выполнить цифровую запись на последовательный пин., @dandavis
@timemage, это скетч для Uno, @Juraj
попробуйте
#определить BLYNK_NO_BUILDIN
перед#включить <BlynkSimpleShieldEsp8266.h>
, @Juraj@Juraj, да, это имеет больше смысла. Хотя без того, чтобы убрать кучу вещей, я не получу большой пользы от этой информации., @timemage