#include <DS1307RTC.h>
#include "TM1637.h"
#include <DallasTemperature.h>
#include <TimeLib.h>
#include <OneWire.h>
#define CLK 2 //pins definitions for the module and can be changed to other ports
#define DIO 3
int a=1;
int b;
TM1637 TM1637(CLK,DIO);
#define ONE_WIRE_BUS 4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(9600);
delay(5000);
TM1637.init();
delay(1000);
TM1637.set(0);//BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
Serial.println("L");
TM1637.display(1111);
pinMode(13, INPUT);
sensors.begin();
while (!Serial) ; // wait until Arduino Serial Monitor opens
setSyncProvider(RTC.get); // the function to get the time from the RTC
if(timeStatus()!= timeSet)
Serial.println("Unable to sync with the RTC");
else
Serial.println("RTC has set the system time");
}
void loop()
{
if (digitalRead(13) == HIGH) {
delay(300);
if (a == 2) {
a=0; }
a++;
Serial.println ("k");}
Serial.println(a);
if ( a == 1 )
{
TM1637.point(false);
TM1637.display(0, hour()/10);
TM1637.display(1, hour()%10);
TM1637.display(2, minute()/10);
TM1637.display(3, minute()%10);
delay(500);
TM1637.point(true);
TM1637.display(0, hour()/10);
TM1637.display(1, hour()%10);
TM1637.display(2, minute()/10);
TM1637.display(3, minute()%10);
delay(500);
}
if (a == 2) {
sensors.begin();
TM1637.point(false);
int getTempCByIndex(0);
TM1637.display(sensors.getTempCByIndex(0)/1000);
}
}
Заливаю скетч в нано , включаю питание ничего не происходит, нажимаю ресет начинает работать как паложноно, но если залить другой скетч из примеров Ардуины ИДЕ то работает с первого раза,
Если только с этим скетчем, я бы смотрел на дилеи в setup() Уж очень они долгие. Хотя я не настолько знаю подноготную ардуино.
Копать надо туда: когда вы заливаете код через загрузчик, он заливает, а потом передаёт управление "вашему скетчу". Когда вы нажимаете ресет, загрузчик немного ждёт, и потом сразу передаёт управление.
Строка 34 имеет иной смысл. Это кусок из инициализации для всяких там леонард. У них Serial не сразу поднимается, поэтому в сетапе постоянно втыкают такую хрень, чтобы не пользовать "нерабочий" Serial. К открытию "монитора порта" это отношения не имеет, насколько я понимаю.
Почитал про этот while(!Serial()), обнаружил разночтения и провёл натурный эксперимент с Micro Pro и Nano:
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);
while (!Serial) ;
Serial.println("Heloooo");
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
1) Nano мыргает и печатает с активированным While и комментаренным. Открытие Serial Monitor никак не влияет на выполнение прошивки (кроме того, что ресетится плата);
2) Micro Pro мыргает и не печатает вообще ничего, если закомментарен while
3) Micro Pro мыргает и печатает, если раскомментарен while. Но только после открытия Serial Monitor.
Да, об этом в инторнетах тоже пишут - на Nano при открытии ресетится МК, а на Леонарде - нет. Поэтому есть шанс прошляпить первый вывод. Надо бы delay() воткнуть для чистоты эксперимента, но я уже все микры по ящикам рассовал. Не очень, конечно, хорош это while() - забыл его убрать и без подключения к ком-порту не прыгнешь в loop(). Надо какой-нить таймаут на миллисе устраивать. Вобщем, мутная история с сериалом на 32u4.
1) Nano мыргает и печатает с активированным While и комментаренным. Открытие Serial Monitor никак не влияет на выполнение прошивки (кроме того, что ресетится плата);
посмотрел на уно, ожидаемо похоже на нано
Но как-то там все еще более путано с монитором. Т.е. если открываешь монитор - печатает, ресетишь - печатает, сбрасываешь питание при отрытом мониторе - не печатате, и на ресет потом тоже не печатает.
хотя другие скетчи вроде как подхватывают открытый монитор.
...запихнул в луп еще вывод ... не, не подхватывает, наверно .... "что-то с памятью моей стало"
On the Leonardo, if (Serial)indicates whether or not the USB CDC serial connection is open. For all other instances, including if (Serial1)on the Leonardo, this will always return true.
==========================
Везде, кроме Леонардо (и всего на 32U4) Serial - возвращает ТРУ. Поэтому на Нанке эта конструкция не имеет значения. Я, для примера, вставляю ее всегда, потому что "боевой" контроллер для проверки любой херни у меня Леонардо.
Накой черт вставлять строку while(!Serial) уже после того, как был println("L") ? Или это такие тесты?
И что значит - заливаю скетч, включаю питание? Отключаете от usb и запитываете от блока питания? Затем открываете терминал и ничего нет?
Начались перебои в работе, подключение к автомобилю сделал через DCDC преобразователь на выход 12В (выставив в преобразователе напряжение на 7В) чтобы скачки напряжения убрать. Перебои заключаются в том, что через время после включения (от замка зажигания работает) программа виснет, экран светится но ничего не происходит. помогает RST клавиша, но не на долго. Думал что проблема в электоровентиляторе автомобиля, он не родной и на включение жрет до 70А, но как показала практика во время включения нано работает как надо, а вот иногда во время отключения вентака как раз виснет.
Вопрос такой. как решить проблему с глюком чтобы постоянно не перезапускать нану и она работала стабильно
Начались перебои в работе, подключение к автомобилю сделал через DCDC преобразователь на выход 12В (выставив в преобразователе напряжение на 7В) чтобы скачки напряжения убрать. Перебои заключаются в том, что через время после включения (от замка зажигания работает) программа виснет, экран светится но ничего не происходит. помогает RST клавиша, но не на долго. Думал что проблема в электоровентиляторе автомобиля, он не родной и на включение жрет до 70А, но как показала практика во время включения нано работает как надо, а вот иногда во время отключения вентака как раз виснет.
Вопрос такой. как решить проблему с глюком чтобы постоянно не перезапускать нану и она работала стабильно
Марек, программисты так не пишут. Что означет ваша фраза?
Вот смотрите, сколько вариантов можно придумать:
1. С этим кодом Нано работает только после Ресет, с другими кодами нормально
2. После нажатия Ресет Нано работает только с этим кодом - до РЕСЕТа работает с любым
3. Нано работает только после РЕСЕТ и только с этим кодом.
наверно и это еще не все, у меня просто фантазия кончилась.
Выражайтесь яснее, человек, не умеющий четко выражать свои мысли, никогда не станет хорошим программистом.
Если только с этим скетчем, я бы смотрел на дилеи в setup() Уж очень они долгие. Хотя я не настолько знаю подноготную ардуино.
Копать надо туда: когда вы заливаете код через загрузчик, он заливает, а потом передаёт управление "вашему скетчу". Когда вы нажимаете ресет, загрузчик немного ждёт, и потом сразу передаёт управление.
попробовать закомментить 34 строку
или таки открыть монитор порта, как он просит wait until Arduino Serial Monitor opens
Строка 34 имеет иной смысл. Это кусок из инициализации для всяких там леонард. У них Serial не сразу поднимается, поэтому в сетапе постоянно втыкают такую хрень, чтобы не пользовать "нерабочий" Serial. К открытию "монитора порта" это отношения не имеет, насколько я понимаю.
Спасибо за пояснения, sadman41.
Наверно попробовать залочить таки стоит, хотя бы из тех соображений, что если это нетипичная для нан команда, а нана и ведет себя не типично.
Почитал про этот while(!Serial()), обнаружил разночтения и провёл натурный эксперимент с Micro Pro и Nano:
1) Nano мыргает и печатает с активированным While и комментаренным. Открытие Serial Monitor никак не влияет на выполнение прошивки (кроме того, что ресетится плата);
2) Micro Pro мыргает и не печатает вообще ничего, если закомментарен while
3) Micro Pro мыргает и печатает, если раскомментарен while. Но только после открытия Serial Monitor.
Такой вот бедлам.
2) Micro Pro мыргает и не печатает вообще ничего, если закомментарен while
Скорее всего она просто успевают напечатать, пока ты открываешь монитор. Во всяком случае, на СТМ32 именно так.
Да, об этом в инторнетах тоже пишут - на Nano при открытии ресетится МК, а на Леонарде - нет. Поэтому есть шанс прошляпить первый вывод. Надо бы delay() воткнуть для чистоты эксперимента, но я уже все микры по ящикам рассовал. Не очень, конечно, хорош это while() - забыл его убрать и без подключения к ком-порту не прыгнешь в loop(). Надо какой-нить таймаут на миллисе устраивать. Вобщем, мутная история с сериалом на 32u4.
1) Nano мыргает и печатает с активированным While и комментаренным. Открытие Serial Monitor никак не влияет на выполнение прошивки (кроме того, что ресетится плата);
посмотрел на уно, ожидаемо похоже на нано
Но как-то там все еще более путано с монитором. Т.е. если открываешь монитор - печатает, ресетишь - печатает, сбрасываешь питание при отрытом мониторе - не печатате, и на ресет потом тоже не печатает.
хотя другие скетчи вроде как подхватывают открытый монитор.
...запихнул в луп еще вывод ... не, не подхватывает, наверно .... "что-то с памятью моей стало"
if(Serial)
Description
Indicates if the specified Serial port is ready.
On the Leonardo,
if (Serial)
indicates whether or not the USB CDC serial connection is open. For all other instances, includingif (Serial1)
on the Leonardo, this will always return true.==========================
Везде, кроме Леонардо (и всего на 32U4) Serial - возвращает ТРУ. Поэтому на Нанке эта конструкция не имеет значения. Я, для примера, вставляю ее всегда, потому что "боевой" контроллер для проверки любой херни у меня Леонардо.
Накой черт вставлять строку while(!Serial) уже после того, как был println("L") ? Или это такие тесты?
И что значит - заливаю скетч, включаю питание? Отключаете от usb и запитываете от блока питания? Затем открываете терминал и ничего нет?
Проблема скорее всего была в библиотеке tm1637.h зоменил на tm1637display.h и все заработоло
О! Зоменил и зороботоло. Эт по-нашему, по-ардуински. Учитесь, неучи.
Чтобы темы не флудить мой вопрос такой. Есть работающая программа, есть нано 168. и пока нано и программа запитываются от юсб все работает как по часам без нареканий. Когда установил нану в авто <a href="https://www.youtube.com/watch?v=4qT2bYc94Vo&t=37s&ab_channel=%D0%91%D0%BB%D0%BE%D1%85%D0%B5%D1%80Van">тут можно посмотреть как все выглядит.</a>
Начались перебои в работе, подключение к автомобилю сделал через DCDC преобразователь на выход 12В (выставив в преобразователе напряжение на 7В) чтобы скачки напряжения убрать. Перебои заключаются в том, что через время после включения (от замка зажигания работает) программа виснет, экран светится но ничего не происходит. помогает RST клавиша, но не на долго. Думал что проблема в электоровентиляторе автомобиля, он не родной и на включение жрет до 70А, но как показала практика во время включения нано работает как надо, а вот иногда во время отключения вентака как раз виснет.
Вопрос такой. как решить проблему с глюком чтобы постоянно не перезапускать нану и она работала стабильно
Чтобы темы не флудить мой вопрос такой. Есть работающая программа, есть нано 168. и пока нано и программа запитываются от юсб все работает как по часам без нареканий. Когда установил нану в авто <a href="https://www.youtube.com/watch?v=4qT2bYc94Vo&t=37s&ab_channel=%D0%91%D0%BB%D0%BE%D1%85%D0%B5%D1%80Van">тут можно посмотреть как все выглядит.</a>
Начались перебои в работе, подключение к автомобилю сделал через DCDC преобразователь на выход 12В (выставив в преобразователе напряжение на 7В) чтобы скачки напряжения убрать. Перебои заключаются в том, что через время после включения (от замка зажигания работает) программа виснет, экран светится но ничего не происходит. помогает RST клавиша, но не на долго. Думал что проблема в электоровентиляторе автомобиля, он не родной и на включение жрет до 70А, но как показала практика во время включения нано работает как надо, а вот иногда во время отключения вентака как раз виснет.
Вопрос такой. как решить проблему с глюком чтобы постоянно не перезапускать нану и она работала стабильно