Добрый день, нужно подправить или написать новый скетч для ардуино. Есть ардуино UNo К которому подключен модуль RS-232 и GSM модуль M590. Нужно передавать данные поступившие по 232 на удаленный компьютер по Интернету. У удаленного компьютера статистический IP адрес. Вот скетч который пробовал написать. Код (C++): #include <SoftwareSerial.h> #include <avr/wdt.h> SoftwareSerial gsm(10, 11); // RX, TX unsigned long prev = 0; String inputString, l = ""; boolean stringComplete = false; char bufferGPRS_Serial[200]; int power = 5; int j, m, ip, p = 0; void setup() { Serial.begin(9600);delay(100); gsm.begin(9600);delay(100); wdt_reset(); pinMode(power, OUTPUT); Serial.setTimeout(2); Serial.println("START"); digitalWrite(power,0); delay(1000); digitalWrite(power,1); while (!(l.indexOf("+PBREADY") >= 0)) { if (millis() - prev >= 30000) { prev = millis(); wdt_enable(WDTO_15MS); delay(100); } if (gsm.available() > 0) { while (gsm.available() > 0) { bufferGPRS_Serial[j++] = gsm.read(); } bufferGPRS_Serial[j] = '\0'; l = bufferGPRS_Serial; } } String s = bufferGPRS_Serial; clearBufferGPRS_Serial(); Serial.println(s); m590("AT+XIIC?"); if (ip == 0) { gprsconnect(); } inputString.reserve(200); wdt_enable(WDTO_8S); // Время перезагрузки } void gprsconnect() { m590("AT+TCPCLOSE=0"); byte count = 0; do{ m590("AT+XISP=0");delay(500); m590("AT+CGDCONT=1,\"IP\",\"internet.megafon.ru\"");delay(500); m590("AT+XIIC=1");delay(500); m590("AT+XIIC?"); delay(500); count++; if (count > 5) { wdt_enable(WDTO_15MS); delay(100); } }while(ip == 0); m590("AT+TCPSETUP=0,5.200.52.161,3113");// ip и port } void loop() { serialEvent(); if (millis() - prev > 2000) { wdt_reset(); Serial.println(inputString); //String request = "AT+TCPSEND=0," + String(sizeof(inputString)); m590("AT+TCPSEND=0,5"); //request = inputString; delay(1000); m590(inputString);delay(100); m590("\r\n"); inputString = ""; prev = millis(); }/* if (gsm.available()) { char inChar = (char)gsm.read(); Serial.println(inChar); wdt_reset(); }*/ } void serialEvent() { if (Serial.available()>0) { while (Serial.available()) { char inChar[2]; Serial.readBytes(inChar, 2); Serial.println(inChar); inputString += inChar; }} } void clearBufferGPRS_Serial() { for (int t = 0; t < 100; t++) { // очищаем буфер, // присваивая всем индексам массива значение 0 bufferGPRS_Serial[t] = 0; } } void m590(String at) { m = 0; // бесконечный цикл while (m == 0) { // ждём 1 секунду j = 0; // посылаем в GPRS Shield АТ-команду "AT" gsm.println(at); delay(100); if (gsm.available() > 0) { while (gsm.available() > 0) { // пока идёт передача данных, // записываем каждый байт в символьный массив bufferGPRS_Serial[j++] = gsm.read(); } // добавляем символ конца строки bufferGPRS_Serial[j] = '\0'; // // посылаем АТ-команду "AT"; если GPRS Shield исправен, // он должен вернуть команду "AT"; // сравниваем всё что находиться в буфере GPRS Shield // со строкой "AT\r\n\r\nOK\r\n" //String s = at+"\r\n\r\nOK\r\n"; } String s = bufferGPRS_Serial; //Serial.println(s); /* else if (at == "AT" && s.indexOf("MODEM:STARTUP") >= 0) { p = 1; } */ if (at == "AT+TCPSETUP=0,5.200.52.161,3113" && s.indexOf("OK") >= 0) { Serial.println("Client Connected"); } else if (at == "AT+XIIC=1" && s.indexOf("OK") >= 0) { Serial.println("OKEY"); } else if (at == "AT+XISP=0" && s.indexOf("OK") >= 0) { Serial.println("Okey"); } String g = "+TCPSEND:0," + String(sizeof(inputString)); if (at.indexOf("+TCPSETUP:0,OK") >= 0 && s.indexOf(g) >= 0) { Serial.println("SEND"); } /* else if (at == "AT+TCPSETUP=0,5.200.52.161,3113" || at == "AT+XIIC=1" || at == "AT+XISP=0"){ wdt_enable(WDTO_15MS); delay(100); }*/ if(s.indexOf("0.0.0.0") >= 0 && at == "AT+XIIC?"){ Serial.println("NOT IP"); ip = 0; } else if(s.indexOf("ERROR") >= 0 && at == "AT+XIIC?"){ Serial.println("NOT CONNECTION"); wdt_enable(WDTO_15MS); delay(100); } else if (at == "AT+XIIC?" && s.indexOf("1, ") >= 0) { Serial.println("IP EXISTS"); ip = 1; } /*if () { } } if (at == "AT+XIIC?" && (bufferGPRS_Serial[24] == '0' && bufferGPRS_Serial[26] == '0' && bufferGPRS_Serial[28] == '0' && bufferGPRS_Serial[30] == '0')) { Serial.println("NOT IP"); ip = 0; } else if (at == "AT+XIIC?") { Serial.println("IP EXIST"); ip = 1; }*/ // очищаем буфер GPRS Serial clearBufferGPRS_Serial(); m++; } }
оформите код как положено - нечитабельно ни разу, и какая функция у вас отвечает за отправку данных(void m590)? Могу помочь, у меня работает mega2560 с SIM800L ,отправка данных с помощью GPRS.