На данный момент есть датчик температуры, и модуль gprs. Нужно сделать так, чтоб по отправке смс включались твердотельные реле, а на компе в сериал монитор постоянно выводилась температура. Прогать не особо умею, пока получился вот такой код(смс не принимаются, температура выводится): #include <SoftwareSerial.h> SoftwareSerial gprsSerial(7, 8); //для зелёного светодиода будем использовать второй цифровой вход, //а для жёлтого - третий int greenPin = 2; int yellowPin = 3; String currStr = ""; // Переменная принимает значение True, если текущая строка является сообщением boolean isStringMessage = false; void setup() { gprsSerial.begin(19200); Serial.begin(9600); pinMode(greenPin, OUTPUT); pinMode(yellowPin, OUTPUT); // Настраиваем приём сообщений с других устройств // Между командами даём время на их обработку gprsSerial.print("AT+CMGF=1\r"); delay(300); gprsSerial.print("AT+IFC=1, 1\r"); delay(300); gprsSerial.print("AT+CPBS=\"SM\"\r"); delay(300); gprsSerial.print("AT+CNMI=1,2,2,1,0\r"); delay(500); } void loop() { while (true) { if (!gprsSerial.available()) return; tempreture(); char currSymb = gprsSerial.read(); if ('\r' == currSymb) { Serial.println ("222"); if (isStringMessage) { Serial.println ("333"); //если текущая строка - SMS-сообщение, //отреагируем на него соответствующим образом if (!currStr.compareTo("Green on")) { digitalWrite(greenPin, HIGH); } else if (!currStr.compareTo("Green off")) { digitalWrite(greenPin, LOW); } else if (!currStr.compareTo("Yellow on")) { digitalWrite(yellowPin, HIGH); } else if (!currStr.compareTo("Yellow off")) { digitalWrite(yellowPin, LOW); } isStringMessage = false; } else { if (currStr.startsWith("+CMT")) { //если текущая строка начинается с "+CMT", //то следующая строка является сообщением isStringMessage = true; } } currStr = ""; } else if ('\n' != currSymb) { currStr += String(currSymb); } } } void tempreture() { float voltage = 5.0 / 1024.0 * analogRead(0); Serial.print(voltage); Serial.println(" B"); float tempC = ( voltage - 0.5 ) * 100; Serial.print(tempC); Serial.println(" C"); delay(1000); }
Всё работает если не включать контроль температуры: void tempreture() { float voltage = 5.0 / 1024.0 * analogRead(0); Serial.print(voltage); Serial.println(" B"); float tempC = ( voltage - 0.5 ) * 100; Serial.print(tempC); Serial.println(" C"); delay(1000); } Если датчик температуры прописать - СМС перестаёт приниматься.
Может тут нужна многозадачность? Ардуино одновременно опрашивает датчик и шилд... Как это реализовать?