#1 Re: Програмування Arduino » Зависание Arduino UNO » 2016-04-15 15:03:32

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

#2 Re: Програмування Arduino » Зависание Arduino UNO » 2016-04-15 11:46:40

Андрон пише:

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

Все виснет, и экран и 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 убрать, даже если очень нужен , Вы ищете плавающую ошибку )

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

#3 Програмування Arduino » Зависание Arduino UNO » 2016-04-15 10:33:27

macik_ua
відповідей: 16

Привет Всем!
Сразу скажу что я только начинаю эксперименты с ардуино.
Сделал тут конструктор с двумя терма-датчиками, диодом и экраном. На экран выводятся данные по температуре и в зависимости от диапазона горит нужный цвет диода.
КОд ниже.
Вопрос.
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);
}

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