Добрый день, всем хорошим людям!! Я новичок в программировании Arduino, и сразу прошу прощения за непонятные написания моих мыслей. Нужен пинок в правильном векторе работы с 7-сегментным дисплеем. Нужна помощи вот в таком деле. Я хочу потенциометром выставлять заданную температуру для сработки реле и после того как я выставил температуру через 1- секунду выводятся показания реальной температуры с датчика MAX6675 K-тип с термопары. Я вывожу на него показания с потенциометра все работает но вот как мне выводить данные с термометра на тоже дисплей понять не могу. И еще одна проблема при чтении данных с MAX6675 дисплей сразу начинает моргать, как отключаю чтение все нормально. Всем откликнувшимся большое спасибо!!!
Код (C++): #define POT_PIN A0 // пин для подключения потенциометра #define DISPLAY_TIMEOUT 1 // интервал переключения дисплея в основной режим, сек enum {SET_TEMP, SHOW_TEMP}; // варианты отображения данных на дисплее byte currentDisplayMode; // переменная для хранения текущего режима дисплея unsigned int POTvalue; // переменная для хранения текущего состояния потенциометра unsigned long timestampDSP; // переменная для хранения времени переключения режимов дисплея void setup() { currentDisplayMode = SHOW_TEMP; // при первом включении задаем "основной" режим отображения данных } void readPOT() // функция работы с потенциометром { static unsigned int oldPOTvalue; // переменная для хранения предыдущего значения потенциометра POTvalue = analogRead(POT_PIN); // считываем значение с потенциометра if (POTvalue != oldPOTvalue) // если значение потенциометра изменилось { currentDisplayMode = SHOW_TEMP; // задаем режим отображения: показания потенциометра timestampDSP = millis(); // запоминаем время этого переключения } } // end of readPOT void readTemp() // функция работы с MAX6675 { // тут код для работы с MAX6675 } // end of readTemp void displayData() // функция вывода данных на дисплей { switch (currentDisplayMode) { case SET_TEMP: { // тут код вывода задаваемой потенциометром температуры } case SHOW_TEMP: { // тут код вывода текущей измеренной температуры } } // end of switch } // end of displayData void relayOperate() // функция работы с реле { // тут код для работы с реле } // end of relayOperate void loop() // выполняем задачи { readPOT(); // снимаем показания потенциометра readTemp(); // снимаем показания датчика температуры if (currentDisplayMode == SET_TEMP && millis() - timestampDSP > DISPLAY_TIMEOUT) // если отображаем показания потенциометра И прошло больше 1 сек { currentDisplayMode = SHOW_TEMP; // то задаем режим отображения: показания текущей температуры } displayData(); // выводим данные на дисплей relayOperate(); // управляем реле // тут что-то еще может быть } // end of loop Общая архитектура понятна?
Tomasina Спасибо. Кажется я немного понял, пинок в правильный вектор. А вот мигание дисплея непонятно почему? как только я читаю данные с микросхемы MAX6675 int temp; temp = thermocouple.readCelsius();
мое предположение - 74HC595 требует постоянного ногодрыганья для динамической индикации, а в моменты работы с MAX6675 этот процесс прерывается на этапе "погасить все сегменты", поэтому индикатор в такие периоды кажет пустоту. Либо надо переработать код отображения, либо используй для индикации TM1637, стоит копейки и умеет самостоятельно поддерживать индикацию при отсутствии внешний воздействий, т.е. не тратит ресурсы основного процессора.
Спасибо огромное, так я и думал что при обращении на микросхему MAX6675 процесс отрубается и из-за этого мигание. Спасибо еще раз буду ковырять с отображением и наверно попробую читать данные с термопары с помощью LM358N. Просто с переработкой скетча отображения ваще бида будет, у меня не столь обширные познания языка программирования.