max6675 и tm1637 зависают
- Войдите на сайт для отправки комментариев
Вс, 14/10/2018 - 13:43
Добрый день, подскажите пожалуйста какая ошибка в программе, выводит 5 показаний и зависает.
#include "max6675.h" #include <TM1637.h> int thermoDO = 4; // SO int thermoCS = 5;//CS int thermoCLK = 6; // SCK #define CLK 3 #define DIO 2 TM1637 tm1637(CLK,DIO); MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO); int temper; int k = 1; int a = 0; void setup() { Serial.begin(9600); tm1637.init(); tm1637.set(3); } void loop() { a = thermocouple.readCelsius() ; Serial.print(thermocouple.readCelsius()); if ( a < 100){ tm1637.point(POINT_ON);//включаем точку, что бы разделить десятичные temper = thermocouple.readCelsius()*100 ; tm1637.display(temper); k = 0; delay (1000); } if ( a > 100){ temper = thermocouple.readCelsius(); tm1637.display(temper); k = 0; delay (1000); } if (k == 0) {a = thermocouple.readCelsius() ; } }
куда выводит ? в SerialMonitor или на tm1637 ?
как вы определили что зависло ? если показания не обнолвляются - это одно ,если же микроконтроллер завис - это другое.
Видите-ли, Ева, программа всегда работает в точности так, как она написана, но к сожалению, не всегда так, как ее хотел написать программист.
Если программа работает так, как написано, а не так, как ее хотели написать, - это ошибка?
Если "да", то ошибку нельзя найти, не зная, чего именно программист хотел от программы.
На мой взгляд, программа написана настолько несуразно, что догадаться по ее тексту, чего же хотел программист, довольно сложно.
Единожды став нулём, k уже никогда не станет ничем иным и Вы будете выполнять thermocouple.readCelsius() постоянно с огромной частотой. Это нормально?
Показания не обнолвляются. в SerialMonitor выводится 5 показаний, на tm1637 5-ое показание выводится постоянно и праграмма дальше не идет.
Нужно измерять температуру в закалочной печи, достаточно вывода показаний на tm1637. Программистам не являюсь, не могу понять в чем проблема, в delay или в порядке выполения циклов.
Единожды став нулём, k уже никогда не станет ничем иным
Простите, не мог сдержаться
После if (k == 0) {a = thermocouple.readCelsius() ;} он не передет в начало цикла к a = thermocouple.readCelsius() ; ?
И if (k == 0) {a = thermocouple.readCelsius() ;} будет выполняться постоянно?
Вот так-то не зависает?
После if (k == 0) {a = thermocouple.readCelsius() ;} он не передет в начало цикла к a = thermocouple.readCelsius() ; ?
Я не уверен. что я правильно понимаю, что именно Вы называете циклом, но внутри фигурных скобок неплохо бы изменить k.
И if (k == 0) {a = thermocouple.readCelsius() ;} будет выполняться постоянно?
При каждом проходе loop.
Спасибо, так не зависает. Нужно чтоб отображалось на tm1637.
При таком коде выводит 5 значений в сериал порт и дальше программа не идет.
Откуда на индикатор библиотеку брали?
https://yadi.sk/d/QDJ2gKV837mWBx
Вот так у меня всё работает, ничего не зависает. Правда, я не стал подключать MAX, поэтому вывожу случайное число.
Спасибо, все заработало.
У меня и вариант из #9 не зависал...