Всем привет! С помощью GPRS Shield v3 можно отправлять какие либо смс сообщения. Вопрос такой: можно ли составлять эти смс сообщения? Допустим у меня есть 2 переменные, которые постоянно меняют свое значение и эти самые значения нужно отправлять. Конечно можно составить с помощью Sring, но у меня не получается конвертировать в char. Есть ли еще какие нибудь способы?
Player_Yaroslav слушайте. я жке вам уже ответил в другой ветке, для конвертиртации String в char в классе Стринг есть специальный метод, ну читайте же документацию И нафига создавать новую ветку с тем же вопросом?
А чем не устраивает от Пушного Звера? Тем более там есть Ваш вариант Можно и с библиотеками но это более громоздко и менее оптимально. Все есть на ВИКИ у Амперки.
Я написал что не работает. String stringOne = "A string"; char Buf[50]; stringOne.toCharArray(Buf, 50) Нашел такую команду, но все равно приходит пустое смс
оно не может "не работать". если вы правильно делаете. Для прjверки выведите строчку char в сериал. например Код (C++): String stringOne = "A string"; char Buf[50]; stringOne.toCharArray(Buf, 50) Serial.print(Buf); значит ошибка где-то в другом месте. Покажите код. как вы текст СМС из переменных составляете... судя по вопросам, вы в этом не слишком опытны, накосячить могли где угодно.
Код (C++): #include <GPRS_Shield_Arduino.h> #include <SoftwareSerial.h> SoftwareSerial mySerial(10, 11); GPRS gprs(mySerial); #define MESSAGE_LENGTH 300 char message[MESSAGE_LENGTH]; char datetime[24]; char phone[16]; #define phone "+79010594050" #define protect_comm "Protect arm" #define disprotect_comm "Protect disarm" #define status_comm "Status" byte a = 8; byte b = 7; float voltage; float voltage1; byte c; byte n; byte ak; byte r; byte s; byte t; int messageIndex = 0; uint32_t myTimer; uint32_t myTimer1; uint32_t myTimer2; uint32_t myTimer3; uint32_t myTimer4; String i2; String i3; char *i1[] = { "Tilt normal", "WARNING! Tilt change", }; void setup() { mySerial.begin(9600); Serial.begin(9600); mySerial.println("AT+CMGF=1"); delay(100); mySerial.println("AT+CSCS=\"GSM\""); delay(100); pinMode (a, INPUT); pinMode(A1, INPUT); pinMode(b, OUTPUT); while (!Serial) { } Serial.print(F("Serial init OK\r\n")); gprs.powerOn(); while (!gprs.init()) { delay(1000); Serial.print(F("GPRS init error\r\n")); } Serial.println(F("GPRS init OK")); gprs.sendSMS(phone, "System ON"); Serial.println(F("System ON")); } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// void loop() { for (;;) { Serial.println(F("Loop function")); if (c == 1) { Serial.println(F("PROTECT function")); analys(); rele(); report(); emergency(); } else if (c == 2) { Serial.println(F("DISPROTECT function")); c = 0; } else if (c == 3) { Serial.println(F("STATUS function")); info(); c = 0; } if (gprs.ifSMSNow()) { Serial.println (F("GPRS have sms")); gprs.readSMS(message, phone, datetime); command(phone, message); } } } void command(char f_phone[], char f_message[]) { Serial.println (F("Command function")); if (strcmp(f_message, protect_comm) == 0) { Serial.println (F("Protection command")); c = 1; myTimer = millis(); Serial.println(F("Protection active")); gprs.sendSMS(phone, "Protection active"); } else if (strcmp(f_message, disprotect_comm) == 0) { Serial.println (F("Disprotection command")); c = 2; Serial.println(F("Protection disactive")); gprs.sendSMS(phone, "Protection disactive"); } else if (strcmp(f_message, status_comm) == 0) { Serial.println (F("Status command")); c = 3; Serial.println (F("Data collecting")); } else { Serial.println (F("Error command")); Serial.println(F("Error, unknown command")); gprs.sendSMS(phone, "Error, unknown command"); } } void analys() { Serial.println(F("Analys function")); if (digitalRead(a) == 0) { Serial.println (F("Tilt normal")); if (n == 1) { n = 0; gprs.sendSMS(phone, "Tilt normal"); } } else if (digitalRead(a) == 1) { if (n == 1) { Serial.println (F("WARNING! Tilt change")); } else if (n == 0) { Serial.println (F("WARNING! Tilt change")); gprs.sendSMS(phone, "WARNING! Tilt change"); n = 1; myTimer1 = millis(); } } voltage = analogRead(A1) * 0.015151515; Serial.print(F("Voltage: ")); Serial.print(voltage); if (voltage <= 10 and ak == 0) { ak = 1; gprs.sendSMS(phone, "WARNING! Voltage low"); Serial.println (F(" - WARNING! Voltage low")); myTimer2 = millis(); } else if (voltage <= 10 and ak == 1) { Serial.println (F(" - WARNING! Voltage low")); } else if (voltage > 10) { ak = 0; Serial.println(F(" - Voltage normal")); } } void rele() { Serial.println(F("Rele function")); if (voltage >= 13.7 and r == 0) { digitalWrite(b, HIGH); s = 1; r = 1; t = 1; myTimer4 = millis(); Serial.println(F("WARNING! Attempt to engine start")); gprs.sendSMS(phone, "WARNING! Attempt to engine start"); } else if (voltage < 13.7 and r == 1) { r = 0; } else if (voltage >= 13.7 and r == 1) { } else if (millis() - myTimer4 >= (unsigned long) 10 * 60 * 1000 and t == 1) { Serial.println(F("10 minutes after attempt to engine start, relay off")); gprs.sendSMS(phone, "10 minutes after attempt to engine start, relay off"); digitalWrite(b, LOW); s = 0; t = 0; r = 0; } } void report() { Serial.println("Report function"); if (millis() - myTimer >= (unsigned long) 2 * 60 * 60 * 1000) { myTimer = millis(); Serial.println(F("2-hour report, sysytem OK")); gprs.sendSMS(phone, "2-hour report, sysytem ON"); } } void emergency() { Serial.println(F("Emergency function")); if (n == 1 and ak == 0) { if (millis() - myTimer1 >= (unsigned long) 60 * 1000) { myTimer1 = millis(); Serial.println(F("Naklon SMS send")); gprs.sendSMS(phone, "WARNING! Tilt change"); } } else if (ak == 1 and n == 0) { if (millis() - myTimer2 >= (unsigned long) 60 * 1000) { myTimer2 = millis(); Serial.println(F("Voltage SMS send")); gprs.sendSMS(phone, "WARNING! Low voltage"); } } else if (ak == 1 and n == 1) { if (millis() - myTimer3 >= (unsigned long) 60 * 1000) { myTimer3 = millis(); Serial.println(F("Naklon & Rele SMS send")); gprs.sendSMS(phone, "WARNING! Low voltage | WARNING! Tilt change"); } } } void info() { Serial.println(F("Info function")); voltage1 = analogRead(A1) * 0.015151515; voltage = analogRead(A1) * 0.015151515; i2 = i1[digitalRead(a)]; i3 = voltage; } Вот собственно и код. функция info и отвечает за составление того самого смс. смс должно состоять из: "Status: " + i2 + ". Voltage: " + i3
и где в ней составление смс? покажете? Код (C++): void info() { Serial.println(F("Info function")); voltage1 = analogRead(A1) * 0.015151515; voltage = analogRead(A1) * 0.015151515; i2 = i1[digitalRead(a)]; i3 = voltage; }