Как из буфера считать и сохранить данные в сроку? Требуется сохранить EMEI GPRS модуля.
- Войдите на сайт для отправки комментариев
Ср, 21/03/2018 - 18:57
приветствую,
прошу помощи с кодом чтения и сохранения данных (ответ AT-команды) из порта.
С помощью AT-команды (AT+GSN) запрашиваю EMEI-код GPRS-шилда (он на Serial2). Не могу понять как его (EMEI) в цикле считать массивом в строку. И какой порт считывать - Serial или Serial2.
Полученный номер не повторяет EMEI и больше чем в два раза.
Считывание ответа от модема ничем не отличается от любого другого получения данных по Сериал. Считывать надо из того порта, к которому подключен модем, конечно же...
Если хотите разобраться, почему считывается с ошибкой - выкладывайте код.
Serial.println("Get IMEI..."); Serial2.println("AT+GSN"); delay(2000); while(Serial2.available()>0) { atreplychar = Serial2.read(); IMEI.concat(atreplychar); Serial.print(atreplychar);} Serial.println("IMEI=" + String(IMEI)); delay(2000);старый код уже убил. постарался написать новый, но он получилось хуже - он ловит то, что улетает в модем. выводит IMEI=AT+GSN
:-(
s8 GSMClass::GetIMEI (char* IMEIbuf) { GSM.WriteStr_P(PSTR("AT\r\n")); _delay_ms(500); UART0_rx_reset( ); UART0_setSearchString( OK_ ); GSM.WriteStr_P(PSTR("\r\nAT+GSN\r\n")); UART0_rx_on( ); if( UART0_check_acknowledge( 63 ) > 0 ) { char* pSrc = (char*)rx_buffer; u8 n = 0; u8 k = 0; while ((n < 15) && (k < 64)) { if ((*pSrc >= '0') && (*pSrc <= '9')) {*IMEIbuf++ = *pSrc; n++;} else if (*pSrc == 'O') break; *pSrc++; k++; } if (n == 15) {*pSrc =0x00; return 1;} else return -2; } else return -1; }нашел в библиотеке GSM.h следующий код. как его можно адаптировать для использования без библиотеки?