Jump to content
Sign in to follow this  
Dimonela

Вывод На Hd44780 И Прочие Вопросы

Recommended Posts

Пытаюсь писать ПО под инкубатор, раньше не сильно сталкивался с таким ЯП как C(Wiring). Поэтому возникли проблемы с тем, что когда МК стартует, выводится чистый экран и только когда нажмешь button2 выводятся показания. Пробовал достать switch с условия, в тело loop() то были проблемы с тем что изображение мерцает, видимо перерисовывается. Вообщем помогите решить эту проблему и нужно как-то сделать так, чтобы показания меню, такие как текущая температура и влажность, были динамическими

#include <LiquidCrystal.h>
#include "DHT.h"
#define button1 8
#define button2 9
#define button3 10
#define DHTPIN 6
#define DHTTYPE DHT11
uint8_t a = 0;
uint8_t val = 0;
// инициализация пинов
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
DHT dht(DHTPIN, DHTTYPE);
void setup() {
 lcd.begin(16, 2);
 dht.begin();
}
void loop() {
 val = digitalRead(button2);
 if (val == HIGH) {
   if (a > 1) {
  a = 0;
  delay(100);
   } else {
  a++;
  delay(100);
   }
// Меню
   switch (a) {
  case 0:
    info(); //Общий показ
    break;
  case 1:
    temp(); //Температура
    break;
  case 2:
    vl(); //Влажность
    break;
   }
 }
}
void info() {
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print(dht.readTemperature());
 lcd.setCursor(0, 1);
 lcd.print(dht.readHumidity());
}
void temp() {
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print("Temperature");
 lcd.setCursor(0, 1);
 lcd.print(dht.readTemperature());
}
void vl() {
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print("Hum");
 lcd.setCursor(0, 1);
 lcd.print(dht.readHumidity());
}

Share this post


Link to post
Share on other sites

lcd.clear(); убери и не будет мерцать, процедура кушает много времени вот и заметное мерцание....

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Similar Content

    • By ШколоКлокер
      в крацце. я спалил (не факт что умерли. не знаю как проверить) 4 разных транзистора.
      причина этой писанины. я не смог запустить мосфеты. делал все по схеме. все резисторы. даже диод ставил ибо нагрузка это 2амперный двигатель. подавал шим через ардуино. с разными частотами. не работает НИЧЕГО. я уже купил модуль где точно все распаяно как надо. не работает. он открыт все время. на на всю силу открыт. поставил диод. все равно не управляется ардуиной. код простейший (воид сетап:пинмод(5 аутпут); аналогврайт(5, 255)). но. когда я попровал с другой частотой  
      void setup() { // ШИМ 8 разрядов, 62,5 кГц TCCR1A = TCCR1A & 0xe0 | 1; TCCR1B = TCCR1B & 0xe0 | 0x09; pinMode(5, OUTPUT); analogWrite(5, 0; // на выводе 9 ШИМ=10% } void loop(){ } двигатель начал пищать. я надеюсь мосфет не пробило 5 ампер от аккумулятора когда я пытался грубо его включить.
      а еще я делал уже без резисторв но на крутом каком то мосфете. у которого порог открытия затвора больше ноля(вольт)  ирлб какойто. смотрел видео алекса гавера (заметки ардуинщика)
       
      я реально не знаю что уже делать. руки опускаются, а модель самолета и сервопривод с аппаратурой ждут. 
      доп фото скину по надобностью 
      (не спрашивайте почему я такой глуп и не знаю как запустить элементарный мосфет. мне 15. если поможете, куплю шоколадку) 
    • By Evgeniy90
      Здравствуйте. Проблема такая:после прошивки USBASP ноутбук перестал его определять. Ошибка в диспетчере устройств:сбой запроса дескриптора USB устройства.
      Прошивал через Arduino UNO и avrdude. Прошивку скачать с офф сайта(последнюю на сайте https://www.fischl.de/usbasp/). Все прошло успешно. Почти))
      Подскажите что можно сделать? 
    • By Evgeniy90
      Здравствуйте! Столкнулся со следующей проблемой: при сборке МД "Шанс" дошел до этапа прошивки МК, в итоге запорол 3 атмеги. Прошивал 3 способами:
      1. Через Arduino UNO(As ISP) просто МК
      2. Через Arduino UNO(As ISP) МК внутрисхемно(соответственно с обвязкой)
      3. Через USB ASP внутрисхемно(с обвязкой соответственно).
      Вышло так, что в наличии кварца 11.0592 МГц не было, и я временно впаял 12 МГц. Прошил трижды всё правильно(фьюзы , контакты и т.д). После прошивки просто не видит МК (ну и плата не работает без МК.да и Бог с ней, но МК всеравно не могу считать). В чем причина понять не могу. Одно думаю, что это разница между 11.0592 и 12 МГц. Посоветуйте как решить проблему.
      Коды ошибок после прошивки во всех трёх случаях одинаковые:
      Sinaprog -invalid device signature
      Averdude -avrdude: warning: cannot set sck period, please check for usbasp firmware update
      target don't answer
    • By Sova
      Добрый день. Опять ATMega, опять таймер 1, вопрос рутинный, но я за сегодня уже извёлся. Что я хотел сделать: МК должен рассчитывать положения моторов (SG90, регулируются временем импульса), включать их все вместе по совпадению таймера 2, затем рассчитывать, когда какой мотор надо отключить, получившийся список сортировать и ставить таймер 1. Таймер 1 сработал - выключили мотор, переставили таймер 1 на подальше. Снова сработал - снова что-то там сделали, увеличили OCR1A и так далее. Конечно же с первого раза не заработало и я начал упрощать и локализировать проблему.
      Получилось вот что: при срабатывании прерывания на совпадение таймера 1 с OCR1A я смотрю в отладчик - а там во-первых TIFR = OCF1A + OCF1B + TOV1, а TCNT1 равен чему угодно, но не OCR1A. Таймер как будто срабатывает не тогда. А когда я ставлю значение поменьше, допустим, OCR1A = 1000 и перехожу в пустой цикл while(1){}, то при наступлении OCR1A == 1000 просто ничего не происходит, прерывание не срабатывает. В целом так. Сейчас очень упрощённый, минимально не работающий код выглядит так:
      #define SET(_REGISTER, _BIT) _REGISTER |= 1 << _BIT #define UNSET(_REGISTER, _BIT) _REGISTER &= ~(1 << _BIT) void local_timer_setup(void) { SET(TCCR1B, CS10); //Setting timer 1 to x1 mode }; void local_timer_start(void) { TCNT1 = 0; SET(TIMSK, OCIE1A); //Allow timer 1 match A interruption }; void local_timer_off(void) { UNSET(TIMSK, OCIE1A); //Prohibit timer 1 match A interruption }; ISR(TIMER1_COMPA_vect) { PORTD = 0xFF; local_timer_off(); }; ISR(TIMER2_COMP_vect) { if (global_timer_count == 2) { global_timer_count = 0; TIFR = 0; PORTD = 0; if (current_step < 10) OCR1A = 0xFFF; else OCR1A = 0xFFFF; if (current_step == 20) current_step = 0; else current_step++; local_timer_start(); } else global_timer_count++; }; Полный код в файле. sei() не забыл. Кстати, таймер нормально выключать/включать через TIMSK, как у меня? Заранее спасибо. 
      Scarecrow_embeded.rar
    • By LemonTV
      Есть картинка из сайта с фьюзами, есть программа avrdude_prog3.3 Как выставить правильно фьюзы чтобы не испортить мк? Незнаю как это сделать есть прямые и инверсные фьюзы, ГДЕ СТАВИТЬ ГАЛОЧКИ И КРУЖОЧЕК НА ПРЯМЫХ ИЛИ ИНВЕРСНЫХ?


×
×
  • Create New...