#1 2016-04-15 10:33:27

macik_ua
Учасник
Зареєстрований: 2016-04-15
Повідомлень: 3

Зависание Arduino UNO

Привет Всем!
Сразу скажу что я только начинаю эксперименты с ардуино.
Сделал тут конструктор с двумя терма-датчиками, диодом и экраном. На экран выводятся данные по температуре и в зависимости от диапазона горит нужный цвет диода.
КОд ниже.
Вопрос.
1) почему через сутки или чуть больше, меньше виснит
2) Как сделать, что бы экран засыпал, понимаю что постоянно показывать чревато.

Ну конечно самое главное почему виснет. (питание идет от USB)

#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>

OneWire oneWire(2); // вход датчиков 18b20
DallasTemperature ds(&oneWire);
//28 FF 2D 18 A2 15 03 30
//28 FF 67 5E 02 16 03 2E
DeviceAddress sensor1 = {0x28, 0xFF, 0x2D, 0x18, 0xA2, 0x15, 0x03, 0x30};
DeviceAddress sensor2 = {0x28, 0xFF, 0x67, 0x5E, 0x02, 0x16, 0x03, 0x2E};

// работа с экраном
LiquidCrystal lcd(4, 5, 6, 7, 8, 9);
// работа с диодами
int b = 10;
int g = 12;
int r = 11;
//
void setup() {
  Serial.begin(9600);
  ds.begin();
  // Экран
  lcd.begin(16, 2);
  // объявляем используемые порты
  pinMode(r, OUTPUT);
  pinMode(g, OUTPUT);
  pinMode(b, OUTPUT);  
}

void loop() {
  ds.requestTemperatures(); // считываем температуру с датчиков
   
  Serial.print("Office : ");
  Serial.print(ds.getTempC(sensor1)); // отправляем температуру
  Serial.println("C");
  Serial.print("Water : ");
  Serial.print(ds.getTempC(sensor2));
  Serial.println("C");
  Serial.println();
  // Экран
  lcd.setCursor(0, 0);
  lcd.print("Office");
  lcd.setCursor(9, 0);
  lcd.print(ds.getTempC(sensor1));
  lcd.setCursor(0, 1);
  lcd.print("Water");
  lcd.setCursor(9, 1);
  lcd.print(ds.getTempC(sensor2));
  //
  // диоды
  if ( ds.getTempC(sensor2) <= 25){
    //Serial.print(" blu ");
    digitalWrite(r, LOW); //выключаем красный
    digitalWrite(g, LOW); //выключаем зеленый
    digitalWrite(b, HIGH); //включаем синий
    
  }else if ( ds.getTempC(sensor2) >= 26.50 ){
    //Serial.print(" red " );
    digitalWrite(r, HIGH); //включаем красный
    digitalWrite(g, LOW); //выключаем зеленый
    digitalWrite(b, LOW); //выключаем синий
  }else{
    //Serial.print(" gre " );
    digitalWrite(r, LOW); //выключаем красный
    digitalWrite(g, HIGH); //включаем зеленый
    digitalWrite(b, LOW); //выключаем синий 
  } 
  delay(1000);
}

Неактивний

#2 2016-04-15 11:08:07

Андрон
Гість

Re: Зависание Arduino UNO

Зависает только экран или на терминал тоже ничего не выдает?

#3 2016-04-15 11:09:39

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Зависание Arduino UNO

всем привет, я только начинаю работать с ардуино, вероятно мои ответы  будут вам полезны

LCD - выключить питание, и не забыть  все ноги индикатора в ноль выставить, при повторном выводе выполнить переиницицизацию индикатора

зависание   
- ошибки в библиотеках USB стека, кто его знает как ведет себя этот  драйвер, при такой длительной работе 
- переполнение стека ( USB / user lib ) ?

питание: 
попробовать записать  от внешнего источника, контроль только на индикаторе
вывод serial убрать, даже если очень нужен , Вы ищете плавающую ошибку )

Неактивний

#4 2016-04-15 11:46:40

macik_ua
Учасник
Зареєстрований: 2016-04-15
Повідомлень: 3

Re: Зависание Arduino UNO

Андрон пише:

Зависает только экран или на терминал тоже ничего не выдает?

Все виснет, и экран и serial ....
Вывод из зависания, просто кнопка ресет или сброс питания ....

Сейчас сделал плавающие надписи что бы экран не светился в одном месте ....

lcd.clear();
  curOffice = random(0,5);
  curOfficeTemp = (curOffice + 7);
  lcd.setCursor(curOffice, 0);
  lcd.print("Office");
  lcd.setCursor(curOfficeTemp, 0);
  lcd.print(ds.getTempC(sensor1));
  
  lcd.setCursor(curOffice, 1);
  lcd.print("Water");
  lcd.setCursor(curOfficeTemp, 1);
  lcd.print(ds.getTempC(sensor2));

У меня подозрение что это связано именно с USB, комп с Mac OS X, может он экономит так электричество ....  big_smile

NoName пише:

всем привет, я только начинаю работать с ардуино, вероятно мои ответы  будут вам полезны

LCD - выключить питание, и не забыть  все ноги индикатора в ноль выставить, при повторном выводе выполнить переиницицизацию индикатора

зависание   
- ошибки в библиотеках USB стека, кто его знает как ведет себя этот  драйвер, при такой длительной работе 
- переполнение стека ( USB / user lib ) ?

питание: 
попробовать записать  от внешнего источника, контроль только на индикаторе
вывод serial убрать, даже если очень нужен , Вы ищете плавающую ошибку )

Попробую все сделать, надо только питание найти внешнее ....

Остання редакція macik_ua (2016-04-15 11:47:49)

Неактивний

#5 2016-04-15 12:11:23

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Зависание Arduino UNO

зарядка для телефона ) и кабель  mini usb наверное

если не хотите выключать  дисплей
можно сделать  PWM подсветку, будет красиво )
срок жизни дисплея если не OLED пусть Вас особо не волнует, но срок службы устройства хватит

Неактивний

#6 2016-04-15 15:03:32

macik_ua
Учасник
Зареєстрований: 2016-04-15
Повідомлень: 3

Re: Зависание Arduino UNO

Подскажите, а то не могу найти. Как отключить программно подсветку?
Нашел, как дисплей но при этом подсветка горит...

Неактивний

#7 2016-04-15 16:08:30

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Зависание Arduino UNO

а какой индикатор ? как обычно подсветка выводить на pin

https://github.com/arduino/Arduino/blob … dCrystal.h
подсветки не видать, вероятнее всего по мануалу включена на питание,
переделываете аналог out , и будет работать

Остання редакція NoName (2016-04-15 16:12:33)

Неактивний

#8 2017-11-05 22:21:58

LAPIZUZELI
Гість

Re: Зависание Arduino UNO

как убрать ошибку : exit status 1
expected initializer before 'pinMode'



вот программа:
#include <boarddefs.h>
#include <IRremote.h>
#include <IRremoteInt.h>
#include <ir_Lego_PF_BitStreamEncoder.h>

void setup() {
  // put your setup code here, to run once:
  int pinOut = A1; // Константа. Будем использовать пин контроллера A1 для подключения светодиода.

// Процедура инициализации программы
void setup()

  pinMode(pinOut, OUTPUT);  // Установить пин А1 в режим выхода
  Serial.begin(9600);  // Инициировать работу COM порта платы на скорости 9600 бит в секунду
}

// Главный цикл программы
void loop()
  // Проверяем, есть ли очереди COM порта входящие данные
  if (Serial.available() > 0) {
    int command = Serial.read();  // считываем значение из порта
    if ('1' ==command){  //Если получена цифра "1"
      digitalWrite(pinOut, 1);  // Отправить логическую единицу (+5В) на пин А1
      Serial.println("LED is ON"); //Отправить сообщение в COM порт
    }else if ('0'==command){  //Если получена цифра "0"
      digitalWrite(pinOut, 0);  // Отправить логический ноль (0В) на на пин А1
      Serial.println("LED is OFF"); //Отправить сообщение в COM порт
    }   
  }
}


}

void loop() {
  // put your main code here, to run repeatedly:

}
плата  Ardruino/Genuino uno

#9 2017-11-06 00:28:13

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Зависание Arduino UNO

по слухам некие А1 могут выступать только   аналоговые входы (AINx) выберете другой pinOut

Неактивний

#10 2017-11-06 06:39:23

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: Зависание Arduino UNO

У Вас 2 лупа и 2 сетупа.) Уберите по одному. "Только гляди не перепутай, Кутузов!"

Неактивний

#11 2017-11-06 13:39:23

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Зависание Arduino UNO

 
// #include <boarddefs.h>
// #include <IRremote.h>
// #include <IRremoteInt.h>
// #include <ir_Lego_PF_BitStreamEncoder.h>
int pinOut = A1; // Константа. Будем использовать пин контроллера A1 для подключения светодиода.

void setup() {
  // put your setup code here, to run once:
  
  // Процедура инициализации программы
  pinMode(pinOut, OUTPUT);  // Установить пин А1 в режим выхода
  Serial.begin(9600);  // Инициировать работу COM порта платы на скорости 9600 бит в секунду
}
// Главный цикл программы
void loop() {
  // Проверяем, есть ли очереди COM порта входящие данные
  if (Serial.available() > 0) {
    int command = Serial.read();  // считываем значение из порта
    if ('1' ==command){  //Если получена цифра "1"
      digitalWrite(pinOut, 1);  // Отправить логическую единицу (+5В) на пин А1
      Serial.println("LED is ON"); //Отправить сообщение в COM порт
    }else if ('0'==command){  //Если получена цифра "0"
      digitalWrite(pinOut, 0);  // Отправить логический ноль (0В) на на пин А1
      Serial.println("LED is OFF"); //Отправить сообщение в COM порт
    }   
  }
}

Green ++ )

Неактивний

#12 2017-11-06 15:28:38

Selen
Учасник
Зареєстрований: 2017-01-02
Повідомлень: 88

Re: Зависание Arduino UNO

Подскажите, а то не могу найти. Как отключить программно подсветку?
Нашел, как дисплей но при этом подсветка горит...

lcd.noBacklight();

Неактивний

#13 2017-11-06 22:16:51

LAPIZUZELI
Гість

Re: Зависание Arduino UNO

Green пише:

У Вас 2 лупа и 2 сетупа.) Уберите по одному. "Только гляди не перепутай, Кутузов!"








Теперь такая ошибка:
exit status 1
expected unqualified-id before 'if'

#14 2017-11-07 00:15:01

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Зависание Arduino UNO

Green, ROFL )

Неактивний

#15 2017-11-07 08:58:39

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: Зависание Arduino UNO

Я понял что с чайниками общаться дело совсем неблагодарное. Всю душу вынут, иной раз.( Да и пИдагог из меня никудышний...

Неактивний

#16 2017-11-07 10:37:37

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Зависание Arduino UNO

Green пише:

....( Да и пИдагог из меня никудышний...

поговорить вообще не причем, а вот делать -  наверное лишнее

Неактивний

#17 2017-11-07 11:27:25

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: Зависание Arduino UNO

ОК.
Обычно думаешь, вот подскажу, минута делов - глядишь, помогу, сдвину. А там... болото.(
И что поражает - знаний то не нужно много, зачастую примитивщина на уровне физики 8-го класса.(
И, к тому же, Гугль есть - это ведь не то что раньше.) Понять сложно...((

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму