EasyTransfer + String

b707
Онлайн
Зарегистрирован: 26.05.2017

anarch пишет:

а в Ардуино есть std::string?

вы заговариваетесь? :) Вы в своем коде сообщения #43 сами подключили пространство имен std и соответвующие инклюды - а теперь спрашиваете есть ли там std::string? :)

Или вы этот код скачали в инете не читая?

anarch
Offline
Зарегистрирован: 10.09.2017

это код я накидал в Eclipse лень было прошивать дуину ) тут все хорошо.

а когда перенес без std::string, а c ардуиновским String такое уже не прокатывает :(

b707
Онлайн
Зарегистрирован: 26.05.2017

anarch пишет:

а когда перенес без std::string, а c ардуиновским String такое уже не прокатывает :(

то есть вы нас тролите - выкладываете в форум один код, а обсуждаете другой? Берегитесь, за такое тут новичков канделябром по роже сразу :)

anarch
Offline
Зарегистрирован: 10.09.2017

в соседней ветке уже было канделябром )))

не подумал просто что std::string и ардуино две разных вещи ))

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

коллеги, спасибо большое всем откликнувшимся!

 

сделал в итоге так:

for (int i = 0; i < sss.length(); i++){   if (sss[i] > 31 && sss[i] <127) {mydata._ss[i] =  char(sss[i]);  } ;
Serial.println(mydata._ss[i]);     Serial.println(CharVar[i]);       } 
b707
Онлайн
Зарегистрирован: 26.05.2017

ProstoAlex пишет:

коллеги, спасибо большое всем откликнувшимся!

 

сделал в итоге так:

for (int i = 0; i < sss.length(); i++){   if (sss[i] > 31 && sss[i] <127) {mydata._ss[i] =  char(sss[i]);  } ;
Serial.println(mydata._ss[i]);     Serial.println(CharVar[i]);       } 

Алекс, почему индексы в строке не с нуля. а от 31 до 127?

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

это я так убираю не-латинские символы, включая сразу и переводы строк.

b707
Онлайн
Зарегистрирован: 26.05.2017

ProstoAlex пишет:

это я так убираю не-латинские символы, включая сразу и переводы строк.

да, простите, это я сослепу не туда посмотрел

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

коллеги, опять ахтунг (

фактически меняю строку:

           int _i = 0;
           for (int i = _resp_Index1 + 2; i <= _resp_Index2 - 2; i++) { mydata.NumberInSMS[_i] =  char(_WholeSMS[i]);  _i++; };

на:

for (int i = 0; 12; i++) { mydata.NumberInSMS[i] =  char(_WholeSMS[i]);  };

и Ардуина виснет молча...

голова уже не варит, что ей может не нравиться?

вот весь код:

#include <Wire.h>
#include <EasyTransferI2C.h>

//create object
EasyTransferI2C ET; 

    
struct SEND_DATA_STRUCTURE{
   char NumberInSMS[13];
   int16_t blinks;
};

//give a name to the group of data
SEND_DATA_STRUCTURE mydata;

//define slave i2c address
#define I2C_SLAVE_ADDRESS 9

void setup(){
  Wire.begin();
  Serial.begin(115200);
  //start the library, pass in the data details and the name of the serial port. Can be Serial, Serial1, Serial2, etc.
  ET.begin(details(mydata), &Wire);
  
  }

void loop(){
  //this is how you access the variables. [name of the group].[variable name]

String _response =  "+CMGR: \"REC READ\",\"+79134444444\",\"\",\"19/09/21,23:27:00+12\"abcdefOK";
  
     String _WholeSMS = ""; String NumberInSMS ="";   String TextInSMS ="";              // очистка СМС от невидимых символов
             for (int i = 0; i <= _response.length() + 1; i++){   if (_response[i] > 31 && _response[i] <127) {_WholeSMS = _WholeSMS + char(_response[i]);} ;
             } 
             Serial.print("_WholeSMS=");Serial.println(_WholeSMS);

       int   _resp_Index1 = _WholeSMS.indexOf(","); // ищем перую запятую  - чтобы дернуть номер СМС
            Serial.print("_resp_Index1=");Serial.print(_resp_Index1);
       int   _resp_Index2 = _WholeSMS.indexOf(",", _resp_Index1 + 1); // ищем вторую запятую
            Serial.print("; _resp_Index2=");Serial.println(_resp_Index2);
  
           for (int i = 0; i= 12; i++) { mydata.NumberInSMS[i] =  char(_WholeSMS[i]);  };
       //    int _i = 0;
       //    for (int i = _resp_Index1 + 2; i <= _resp_Index2 - 2; i++) { mydata.NumberInSMS[_i] =  char(_WholeSMS[i]);  _i++; };
           Serial.print("mydata.NumberInSMS=");Serial.println(mydata.NumberInSMS);
   
 
ET.sendData(I2C_SLAVE_ADDRESS);

  delay(500);
}

причем от содержания _response поведение не зависит - даже содержимое типа "123456789012" приводит к зависаниям...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ProstoAlex пишет:

на:

for (int i = 0; 12; i++) { mydata.NumberInSMS[i] =  char(_WholeSMS[i]);  };

и Ардуина виснет молча...

А чего Вы ожидали? Это цикл работает до тех пор, пока 12 не равно нулю. Когда станет равно, тогда цикл  и остановится. Ждите.

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

да, туплю )

благодарю! )