Ардуино нано работает после перезагрузки

narek.mat
Offline
Зарегистрирован: 30.01.2019


Друзья Нано работает только после нажатия кнопки ресет но только с этим кодом

 

narek.mat
Offline
Зарегистрирован: 30.01.2019
#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);

}


}



 

b707
Offline
Зарегистрирован: 26.05.2017

narek.mat пишет:



Нано работает только после нажатия кнопки ресет но только с этим кодом

Марек, программисты так не пишут. Что означет ваша фраза?

Вот смотрите, сколько вариантов можно придумать:

1. С этим кодом Нано работает только после Ресет, с другими кодами нормально

2. После нажатия Ресет Нано работает только с этим кодом - до РЕСЕТа работает с любым

3. Нано работает только после РЕСЕТ и только с этим кодом.

наверно и это еще не все, у меня просто фантазия кончилась.

Выражайтесь яснее, человек, не умеющий четко выражать свои мысли, никогда не станет хорошим программистом.

narek.mat
Offline
Зарегистрирован: 30.01.2019
Напишу поконкретнее
Заливаю скетч в нано , включаю питание ничего не происходит, нажимаю ресет начинает работать как паложноно, но если залить другой скетч из примеров Ардуины ИДЕ то работает с первого раза,
Надеюсь вирозился по яснее
Schwarz78
Offline
Зарегистрирован: 19.01.2019

Если только с этим скетчем, я бы смотрел на дилеи в setup() Уж очень они долгие. Хотя я не настолько знаю подноготную ардуино.

Копать надо туда: когда вы заливаете код через загрузчик, он заливает, а потом передаёт управление "вашему скетчу". Когда вы нажимаете ресет, загрузчик немного ждёт, и потом сразу передаёт управление.

ВН
Offline
Зарегистрирован: 25.02.2016

попробовать закомментить 34 строку

или таки открыть монитор порта, как он просит  wait until Arduino Serial Monitor opens

sadman41
Offline
Зарегистрирован: 19.10.2016

Строка 34 имеет иной смысл. Это кусок из инициализации для всяких там леонард. У них Serial не сразу поднимается, поэтому в сетапе постоянно втыкают такую хрень, чтобы не пользовать "нерабочий" Serial. К открытию "монитора порта" это отношения не имеет, насколько я понимаю. 

ВН
Offline
Зарегистрирован: 25.02.2016

Спасибо за пояснения, sadman41.

Наверно попробовать залочить таки стоит, хотя бы из тех соображений, что если это нетипичная для нан команда, а нана и ведет себя не типично. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Почитал про этот 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.

Такой вот бедлам.

b707
Offline
Зарегистрирован: 26.05.2017

sadman41 пишет:

2) Micro Pro мыргает и не печатает вообще ничего, если закомментарен while

Скорее всего она просто успевают напечатать, пока ты открываешь монитор.  Во всяком случае, на СТМ32 именно так.

sadman41
Offline
Зарегистрирован: 19.10.2016

Да, об этом в инторнетах тоже пишут - на Nano при открытии ресетится МК, а на Леонарде - нет. Поэтому есть шанс прошляпить первый вывод. Надо бы delay() воткнуть для чистоты эксперимента, но я уже все микры по ящикам рассовал. Не очень, конечно, хорош это while() -  забыл его убрать и без подключения к ком-порту не прыгнешь в loop(). Надо какой-нить таймаут на миллисе устраивать. Вобщем, мутная история с сериалом на 32u4.

 

ВН
Offline
Зарегистрирован: 25.02.2016

sadman41 пишет:

1) Nano мыргает и печатает с активированным While и комментаренным. Открытие Serial Monitor никак не влияет на выполнение прошивки (кроме того, что ресетится плата);

посмотрел на уно, ожидаемо похоже на нано

Но как-то там все еще более путано с монитором. Т.е. если открываешь монитор - печатает, ресетишь - печатает, сбрасываешь питание при отрытом мониторе - не печатате, и на ресет потом тоже не печатает. 

хотя другие скетчи вроде как подхватывают открытый монитор.

...запихнул в луп еще вывод ... не, не подхватывает, наверно .... "что-то с памятью моей стало"

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

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, including if (Serial1)on the Leonardo, this will always return true.

==========================

Везде, кроме Леонардо (и всего на 32U4) Serial - возвращает ТРУ. Поэтому на Нанке эта конструкция не имеет значения. Я, для примера, вставляю ее всегда, потому что "боевой" контроллер для проверки любой херни у меня Леонардо.

 

KindMan
Offline
Зарегистрирован: 19.12.2018

Накой черт вставлять строку while(!Serial) уже после того, как был println("L") ? Или это такие тесты?
И что значит - заливаю скетч, включаю питание? Отключаете от usb и запитываете от блока питания? Затем открываете терминал и ничего нет?

narek.mat
Offline
Зарегистрирован: 30.01.2019

Проблема скорее всего была в библиотеке tm1637.h зоменил на tm1637display.h и все заработоло

Schwarz78
Offline
Зарегистрирован: 19.01.2019

О! Зоменил и зороботоло. Эт по-нашему, по-ардуински. Учитесь, неучи.

Valerich-tex
Offline
Зарегистрирован: 10.08.2019

Чтобы темы не флудить мой вопрос такой. Есть работающая программа, есть нано 168. и пока нано и программа запитываются от юсб все работает как по часам без нареканий. Когда установил нану в авто <a href="https://www.youtube.com/watch?v=4qT2bYc94Vo&amp;t=37s&amp;ab_channel=%D0%91%D0%BB%D0%BE%D1%85%D0%B5%D1%80Van">тут можно посмотреть как все выглядит.</a>

Начались перебои в работе, подключение к автомобилю сделал через DCDC преобразователь на выход 12В (выставив в преобразователе напряжение на 7В) чтобы скачки напряжения убрать. Перебои заключаются в том, что через время после включения (от замка зажигания работает) программа виснет, экран светится но ничего не происходит. помогает RST клавиша, но не на долго. Думал что проблема в электоровентиляторе автомобиля, он не родной и на включение жрет до 70А, но как показала практика во время включения нано работает как надо, а вот иногда во время отключения вентака как раз виснет.

Вопрос такой. как решить проблему с глюком чтобы постоянно не перезапускать нану и она работала стабильно

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Valerich-tex пишет:

Чтобы темы не флудить мой вопрос такой. Есть работающая программа, есть нано 168. и пока нано и программа запитываются от юсб все работает как по часам без нареканий. Когда установил нану в авто <a href="https://www.youtube.com/watch?v=4qT2bYc94Vo&amp;t=37s&amp;ab_channel=%D0%91%D0%BB%D0%BE%D1%85%D0%B5%D1%80Van">тут можно посмотреть как все выглядит.</a>

Начались перебои в работе, подключение к автомобилю сделал через DCDC преобразователь на выход 12В (выставив в преобразователе напряжение на 7В) чтобы скачки напряжения убрать. Перебои заключаются в том, что через время после включения (от замка зажигания работает) программа виснет, экран светится но ничего не происходит. помогает RST клавиша, но не на долго. Думал что проблема в электоровентиляторе автомобиля, он не родной и на включение жрет до 70А, но как показала практика во время включения нано работает как надо, а вот иногда во время отключения вентака как раз виснет.

Вопрос такой. как решить проблему с глюком чтобы постоянно не перезапускать нану и она работала стабильно

https://techno-mind.ru/elektronika-i-soft/pitanie-chuvstvitelnoj-elektroniki-ot-bortovoj-seti-legkovogo-avtomobilya.html