Скетч включения реле по смс
- Войдите на сайт для отправки комментариев
Добрый день всем ардуинцам.
Вступаю в ряды, сделал первые шаги, диодиком помигал, пытаюсь сделать управление нагрузкой через смс.
Взял пример из библиотеки GSMSHIELD и начал дополнять его своим кодом: чтение даных с температурного датчика и отправка его через СМС.
Вот код:
#include "SIM900.h" #include <SoftwareSerial.h> //If not used, is better to exclude the HTTP library, //for RAM saving. //If your sketch reboots itself proprably you have finished, //your memory available. //#include "inetGSM.h" //If you want to use the Arduino functions to manage SMS, uncomment the lines below. #include "sms.h" SMSGSM sms; #include "dht.h" #define DHTPIN 2 // what pin we're connected to #define DHTTYPE DHT11 // DHT 11 DHT dht(DHTPIN, DHTTYPE); //Simple sketch to send and receive SMS. int numdata; boolean started=false; char smsbuffer[160]; // char smsstring[160]; char n[20]; byte position; void setup() { //Serial connection. Serial.begin(9600); Serial.println("GSM Shield testing."); Serial.println("DHT21 test!"); pinMode(7, OUTPUT); dht.begin(); //Start configuration of shield with baudrate. //For http uses is raccomanded to use 4800 or slower. if (gsm.begin(2400)){ Serial.println("\nstatus=READY"); started=true; } else Serial.println("\nstatus=IDLE"); if(started){ //Enable this two lines if you want to send an SMS. //if (sms.SendSMS("3471234567", "Arduino SMS")) //Serial.println("\nSMS sent OK"); } }; void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); if(started){ if (isnan(t) || isnan(h)) { Serial.println("Failed to read from DHT"); } //Read if there are messages on SIM card and print them. if(gsm.readSMS(smsbuffer, 160, n, 20)) { if(smsbuffer=="temperature") { sms.SendSMS("+3471234567", "Temperature: " + t + " *C"); } Serial.println(n); Serial.println(smsbuffer); } position = sms.IsSMSPresent(SMS_ALL); if (position) { sms.DeleteSMS(position); } delay(2000); } };
В 65 строке у меня ошибка из-за того, что недопонял синтаксис этого языка. Сам на PHP и Javascript'е программлю. А с Си-подобными как-то не завелось. Подскажите, как правильно написать чтобы в одну строку и текст и переменная попала. Может, через переменную попробовать? Я пробовал через smsstring[] как в манулале, но опять не вышло. Как правильно надо?
Скетч пока недописанный, вы на мой индуский код внимания не обращайте. Интересмует пока косяк с 65 строчкой. Как правильно написать?
Попробуйте так:
String SMSText = "Temperature: " + String(t) + " *C";
sms.SendSMS("+3471234567", SMSText);
Теперь он ругается на строчку, где sms.SendSMS(...
gsm_dht.ino:66:45: error: no matching function for call to 'SMSGSM::SendSMS(const char [12], String&)'
gsm_dht.ino:66:45: note: candidates are:
Ему походу не нравится тип данных String что ли?
У вас номер 11 символов, а должно быть 12.
Не, он явно не на номер ругается. Сменил на "правильный" номер +7904.... (12 символов), ругуется теперь на
error: no matching function for call to 'SMSGSM::SendSMS(const char [13], String&)'
Попробуй обьявить переменные выше строки обращения в функцию. Вообще похоже, что эта функция принимает переменные другого типа. Как она описана в хелпе ?
Вот весь sms.h
Я так понимаю ей всё как char надо отдавать, а он на второй аргумент ругается, что типа string. :(
Пробовал:
Выводит: error: no matching function for call to 'SMSGSM::SendSMS(const char [12], String&)'
Меняю на
Выводит: error: expected primary-expression before 'char'
Объявил mynumber как строку и вписал туда свой номер.
Далее, всё передаю как String:
Выводит: gsm_dht.ino:67:40: error: no matching function for call to 'SMSGSM::SendSMS(String&, String&)'
gsm_dht.ino:67:40: note: candidates are:
походу дела трабла вообще не в типе данных. Ему String понятен, но ругается ИМХО на что-то другое. Не могу понять на что.
Ну дык
char SMSText = "Temperature: " + String(t) + " *C";
Вот-вот, именно, если функция объявлена как char SendSMS(char *number_str, char *message_str); , то дайте ей char.
Datak: Спасибо, вот так заработало (ну в смысле, ошибки нет). Вроде в char перевелось. Спасибо еще раз.
Продвинулся дальше, уже принимаю смски от ардуины с температурой.
Но вот такая трабла. В коде прописано вывод в serial последних данных после отсылки смс. Если я мониторю serial и при этом отправляю смски на запрос, то в ответ мне приходят четко смски с температурой. Но стоит мне закрыть монитор последовательного порта, отправить смс-запрос, затем снова открыть монитор последовательного порта - смска с температурой больше неприходит. И в монитор валится всякая хрень (команды AT, но уже другие, нежели при первом открытии). Это почему такое происходит?
Понятно, что в боевом режиме никакого сериал у меня не будет. Весь мониторинг сведется к получению смски с температурой. Но может кто-то объяснит мне этот феномен?
И еще, всё-таки сравнение у меня не работает. Там походу перевод строки или еще что-то попадает. В чистом виде "temperature" не принимается. Как правильно сравнить? Ну или хотя бы часть строки сравнить... Сейчас сделал так, что просто проверяю, не пустая ли строка (строка 65). А сбрасываю переменную выше в 70-71 строке, чтобы ардуина на один запрос бесконечно не слала мне данные.
Код прилагаю.
И еще, никак не могу нащупать ПИН для программного включения шилда. Перепробовал 9-й, 6-й пин. Не реагирует.
С сериал подключением такая же беда была, не хотело корректно работать.
Код для программного включения :
p.s. код в своё время взял с офф сайта шилда
does not work .
do you find solution to this error ser ?
SMSText = analogRead(A0);
sms.SendSMS ("+ 3471234567", SMSText);
SMSText must be String type.
char SendSMS( const char* number_str, String message_str )
so
String SMSText = String (analogRead(A0));
sms.SendSMS ("+3471234567", SMSText);
or
sms.SendSMS ("+3471234567", String (analogRead(A0));
Здравствуйте. Подскажите, как устранить.
Исходный скетч:
Ошибка в 79 строке:
У вас по три-пять разных библиотек на одно и то же. Почистите все библиотеки и установите только одну для DHT. одну для GPRSSHIELD и так далее
Ошибка не ушла.
Ноту-то - перевели или так и не смогли? "Кандидат ожидает 4(четыре, Карл!) аргумента, предоставлено 5". А Вы компилятору суете это "
sms.GetSMS(pos,n,20,smsbuffer,160);
" - сколько тут "параметров" и куда должен деть лишнее компилятор? :)Как исправить?
Как исправить?
Аналогия: в карман влазит только четыре яблока, а ты пихаешь пять. Как исправить?
Парни, я не програмист.
Подскажите дилетанту в какой строке и что изменить.
В какой строке - Вам написал компилятор (в 79-й). Как исправить - подсказали пользователи (сократить количество параметров функции до 4). Что Вам еще непонятно?
Пропишите плиз эту строку.
Все решилось заменой библиотеки GSMSHIELD на GSM-GPRS-GPS-Shield-GSMSHIELD
Звиздец ты тугой.