То ли лыжи не едут... (непонятное поведение скетча)

shaman1010
Offline
Зарегистрирован: 15.08.2012

 День добрый, поскольку я занялся ардуинами относительно недавно, то возможно проблем в моем не понимании. Но есть ли мысли по поводу непонятки в таком очевидном скетче, а именно в непонятном получаемом ответе (повторно распечатывается второй char, причем оба раза...) 

Причем если  в Serial.print (или write) поменять местами ID1 и ID2 то будет дважды печататься другой ID (ID1 в данном примере)

shaman1010
Offline
Зарегистрирован: 15.08.2012

 Добавил код отдельно:

int ledPin = 13;
const char IDsensorIr[3] = {'I','D','1'};
const char IDtemp[3] = {'I','D','2'};
 
void setup()
{
 
 Serial.begin(9600);
 pinMode (ledPin, OUTPUT); 
 delay(2000);
}

void loop()
{

     Serial.print (IDsensorIr);
     Serial.print (IDtemp);
     Serial.write (IDsensorIr);
     Serial.write (IDtemp);
     Serial.println ("-");
     delay (1000);
}

 

leshak
Offline
Зарегистрирован: 29.09.2011

>я занялся ардуинами относительно недавно, то возможно проблем в моем не понимании

А вы думаете если "давно", то проблем не бывает ?;)

Тут "грабли" не ардуиновские, а чисто "работа со строками в Cи".

Прочитайте  http://arduino.ru/Reference/String

Особенно обращая внимание на все что говорится про "конец строки" и "символ \0" и внимательно посмотрите на длину своих массивов.

Вообще оно у вас будет печатать, пока случайно не попадется в памяти символ 0.

 

shaman1010
Offline
Зарегистрирован: 15.08.2012

 Спасибо за тычок носом, но даже когда изменил длину массивов на 4 - результат был такой-же как и в начале (что само по себе странно).

Нормально получилось, если задавать массив автоматом, тогда проблема не возникает:

const char IDsensorIr[ ] = {"ID1"};
const char IDtemp[ ] = {"ID2"};

Но самое интересное было позже...

Откатился обратно (с измененной длиной массивов):

const char IDsensorIr[4] = {'I','D','1'};
const char IDtemp[4] = {'I','D','2'};

и на этот раз все работало как нужно.

p.s. может стоит портелгейсов в доме погонять? :-))))

 

 

step962
Offline
Зарегистрирован: 23.05.2011

 Не стоит.

Просто возьмите за праило завершать строки в Си символом '\0':

const char IDsensorIr[4] = {'I','D','1','\0'};

Иначе будет у вас все работать через раз.

А то и через десять...