Здравствуйте форумчане! Помогите новичку. Программировать только начал, но усвоил некоторые моменты, но не могу найти решения данного вопроса. Есть два датчика влажности почвы (http://amperka.ru/product/soil-moisture-sensor) и gprs shield (http://amperka.ru/product/arduino-gprs-shield). Показания датчиков снимаю, с этим вопросов не возникает. НО! Возникли трудности. Показания одного датчика могу отправить, второй СМС - показания второго, а как отправить одной СМС показания сразу с двух датчиков? Не бейте сильно, если это просто. Я только учусь. Вот код программы: // библиотека для работы с GPRS устройством #include <GPRS_Shield_Arduino.h> // библиотека для эмуляции Serial-порта // она нужна для работы библиотеки GPRS_Shield_Arduino #include <SoftwareSerial.h> #define phone_number "89273344667" #define MESSAGE_LENGTH 160 //********** Индикатор успешной связи GSM ************************** const int LED = 13; //****************** Датчики влажности почвы ************************** // переменные куда будут записываться данные с датчиков влажности почвы int dat0 = 0; int dat1 = 0; char CVET0[8]; char CVET1[8]; // ************** GPRS Shield ************************** // текст сообщения char message[MESSAGE_LENGTH]; // номер, с которого пришло сообщение char phone[16]; // дата отправки сообщения char datetime[24]; // номер сообщения в памяти сим-карты int messageIndex = 0; // создаём объект класса GPRS. По умолчанию скорость общения с ним 9600 бод // с помощью него будем давать команды GPRS шилду GPRS gprs; void setup() { // включаем GPRS-шилд gprs.powerUpDown(); // открываем последовательный порт для мониторинга действий в программе Serial.begin(9600); // проверяем, есть ли связь с GPRS-устройством while (!gprs.init()) { // если связи нет, ждём 1 секунду // и выводим сообщение об ошибке; // процесс повторяется в цикле, // пока не появится ответ от GPRS-устройства digitalWrite(LED, HIGH); delay(1000); } // выводим сообщение об удачной инициализации GPRS Shield digitalWrite(LED, LOW); } void read_sensor() { dat0 = analogRead(0); dat1 = analogRead(1); } void preob() { // преобразуем целое число 10 системы исчисления // из переменной dat в строковое представление в DAT[] itoa(dat0, CVET0, 10); itoa(dat1, CVET1, 10); } void loop() { // если пришло новое сообщение if (gprs.ifSMSNow()) { // читаем его gprs.readSMS(message, phone, datetime); if (String(message) == "1") { read_sensor(); preob(); Serial.print("dat0 = "); Serial.println(dat0); Serial.print("dat1 = "); Serial.println(dat1); gprs.sendSMS(phone_number, CVET0); } } }
Код (C++): char bffr[32] = ""; // буфер, куда всё складываем merge(bffr, "Sensor 1: "); merge(bffr, CVET0); merge(bffr, "C, Sensor 2: "); merge(bffr, CVET1); merge(bffr, "C"); gprs.sendSMS(phone_number, bffr); А в самый конец скетча (после закрывающей скобки от loop) вставь: Код (C++): void merge (char *s, char *s_) // магия черного ящика { while(*s)s++; while(*s_){*s=*s_;s++;s_++;} // Доктор Who смотрит за тобой... }
Tomasina, спасибо огромное от доктора Who . Код работает. +1 к вашей репутации. Буду изучать код. Спасибо
Эммм, а что - strcat уже уволили? Код (C++): char buffer[126] = {0}; strcat(buffer,"Sensor 1: "); strcat(buffer," Second string"); Думаю, что это как раз тот случай, когда велосипеды выдумывать не надо