Не работает термопара вместе с GSM модулем
- Войдите на сайт для отправки комментариев
Вс, 09/02/2020 - 16:59
Здравствуйте! Подскажите пожалуйста, я к сожалению в ардуино не силен, но сумел сообрать вот такой вот код:
#include "max6675.h" #include "SIM900.h" #include <SoftwareSerial.h> #include "sms.h" #include "call.h" //Термопара int thermoDO = 8; //он же SO int thermoCS = 9; int thermoCLK = 4; //он же SCK MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO); int vccPin = 5; //пин для питания int gndPin = 6; //пин для земли //=================Пины 2 и 3 для Подключения GSM модуля SMSGSM sms; int flag1=0; boolean started=false; char smsbuffer[160]; char n[20]; char nn[20]; char v[10]; //String n1 = ""; String n1 = ""; // Номер 1 //String n2 = ""; // Номер Жены String n2 = ""; // Test String v1 = ""; String s1 = ""; String input_string = ""; String smsContent = ""; char trevoga[] = "Vnimanie! Kriticheskaya temperatura! C = "; char pos; char sendsms[160]; void setup() { Serial.begin(9600); //активируем питание и землю pinMode(vccPin, OUTPUT); digitalWrite(vccPin, HIGH); pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW); Serial.println("MAX6675 test"); delay(1800); //ждем стабилизации чипа MAX if (gsm.begin(2400)) { started=true; } else Serial.println("\nstatus=IDLE"); } void loop() { delay(1800); //ждем стабилизации чипа MAX // ===========================СМС if (thermocouple.readCelsius() >= 80 && flag1 <= 0) { Serial.print("Превышен температурный предел! С = "); Serial.println(thermocouple.readCelsius()); String s1 = String(thermocouple.readCelsius(), 1); String v1 = String(trevoga + s1); v1.toCharArray(v,20); n1.toCharArray(n,20); sms.SendSMS(n, v); // Посылаем СМС о том, что привышена температура sms.DeleteSMS(1);memset(n,0,20); n2.toCharArray(nn,20); sms.SendSMS(nn, v); // Посылаем СМС о том, что привышена температура sms.DeleteSMS(1);memset(nn,0,20); char smsbuffer[160]=""; flag1++; delay(10000); } else if (thermocouple.readCelsius() >= 80 && flag1 > 0 && flag1 < 30000) { // 5 минут на чтение смс pos = sms.IsSMSPresent(SMS_UNREAD); // смотрим непрочитанные СМС if (pos) { // Если непрочитанные СМС есть, то... getsms(); // получаем непрочитанную СМС if (input_string=="0"){ // Команда "0" - отправить СМС Serial.print("Prislo SMS!"); n1.toCharArray(n,20); // Номер телефона String s1 = String(thermocouple.readCelsius(), 1); String v1 = String(s1 + " Gradusov"); v1.toCharArray(v,20); sms.SendSMS(n, v); sms.DeleteSMS(1); memset(n,0,20); input_string=""; char smsbuffer[160]="";} // flag1=0; sms.DeleteSMS(pos); // удаляем СМС из симки } flag1++; delay(10000);} else if (thermocouple.readCelsius() >= 80 && flag1 >= 30000) { Serial.print("Превышен температурный предел! С = "); Serial.println(thermocouple.readCelsius()); String s1 = String(thermocouple.readCelsius(), 1); String v1 = String(trevoga + s1); v1.toCharArray(v,20); n1.toCharArray(n,20); sms.SendSMS(n, v); // Посылаем СМС о том, что привышена температура sms.DeleteSMS(1);memset(n,0,20); n2.toCharArray(nn,20); sms.SendSMS(nn, v); // Посылаем СМС о том, что привышена температура sms.DeleteSMS(1);memset(nn,0,20); char smsbuffer[160]=""; flag1++; delay(180000000); } //Задержка 3 минуты else if (thermocouple.readCelsius() < 80) { Serial.print("Температура в норме! С = "); Serial.println(thermocouple.readCelsius()); flag1=0; delay(10000);} pos = sms.IsSMSPresent(SMS_UNREAD); // смотрим непрочитанные СМС if (pos) { // Если непрочитанные СМС есть, то... getsms(); // получаем непрочитанную СМС if (input_string=="0"){ // Команда "0" - отправить СМС Serial.println("Prislo SMS!"); n1.toCharArray(n,20); // Номер телефона String s1 = String(thermocouple.readCelsius(), 1); String v1 = String(s1 + " Gradusov"); v1.toCharArray(v,20); sms.SendSMS(n, v); sms.DeleteSMS(1); memset(n,0,20); input_string=""; char smsbuffer[160]="";} // flag1=0; sms.DeleteSMS(pos); // удаляем СМС из симки } } void getsms() { sms.GetSMS(1,n,20,smsbuffer,160); input_string =String(smsbuffer); }
К сожалению не выходит нормально работать с термопарой. Отдельно от моего скетча все работает. Также если не подавать питание на SIM модуль термопара начинает отвечать, но с разбросом температуры. Думаю что проблема в настройках скорости, но как исправить уразуметь не выходит. Модуль термопары: MAX6675K. Модуль SIM: SIM800L.
А нефиг задалбывать микросхему своими беспрерывными приставаниями.
Что ты пинаешь её своим thermocouple.readCelsius() через несколько микросекунд?
Измерь один раз температуру с присвоением значения какой-то переменной и эту переменную теребунькай своими if'ами и print'ами как угодно.
Вероятнее всего что это не правильно. Но и результат все равно не правильный. Температура все равно плавает от 0 до 25. Если использовать пример для измерения температуры, то все работает хорошо.
угадали
интересно, а вы никаких других типов переменных, кроме String - не знаете?
Зачем переводить числовое значение температуры в текстовой формат, чтобы через строчку сранивать его с числом 80? - как вы думаете, получится из такого сравнения толк?
Я знаю об этой ошибке, исправлял в торопях. На работе завал... Однако в начале где скетч еще выполняется и выводит в монитор порта температуру: все равно отправляются не верные значения. Значит я делаю вывод что теребуньканья микросхемы тут не причем.
Комментируй всё, что не связано с термопарой, так уменьшишь круг подозреваемых.
vccPin - для MAX6675 что ли?
Изначально да vccPin был для MAX6675. Сейчас оно не используется.
Температура начинает работать после закоменчивания вот этого куска кода.
Температура начинает работать после закоменчивания вот этого куска кода.
не вижу в коде, где описано gsm и где задаюься его пины
GSM описан в библиотеке, пины заданы там же.
Ну, поди, GSM просаживает питание, когда работать начинает.
Мой GSM модуль от USB и вообще от Arduino работать отказался. Поэтому он питается от ЛБП, так что просад по питанию исключен. Да и если бы проблема была в этом, то при отключении модуля GSM оно бы работало нормально, но нет. Не работает.
Проблема скорее всего с программным портом Serial, или согласовании их скоростей или прерываний каких-нибудь. Я тут совсем нуб, увы.
Ну, MAX хреново себя ведёт при частом опросе. Его тут нет. Остальные симптомы непонятны.
GSM описан в библиотеке, пины заданы там же.
если в GSM, так она не подключена.
Вот тут. Библиотека вот:
https://yadi.sk/d/qADcoDLJDTMFzQ