Инвертация значения переменной при выводе в последовательный порт

IgorMM
Offline
Зарегистрирован: 01.01.2018

Доброго времени суток.

Наставьте чайника на правильный путь и ткните носом в его ошибки.

Есть скетч (получился при поиске ошибок основного скетча)

boolean flag = 0;           
boolean butt_flag = 0;            
boolean open_flag = 1;      
boolean pir_flag = 0;         
boolean butt = 0;             
boolean pir = 0;               

void setup() {
Serial.begin(9600);

  Serial.println(butt_flag);Serial.print("п.1 Флаг выключателя:");
  Serial.println(pir_flag);Serial.print("п.2 Флаг датчика:");
  Serial.println(flag);Serial.print("п.3 Свет:");
  Serial.println(butt);Serial.print("п.4 выключатель:");
  Serial.println(open_flag);Serial.print("п.5 Разрешение на работу датчика:");
  Serial.println(pir);Serial.print("п.6 датчик:");
  Serial.println("888888");Serial.print("п.8 ??????:");


}

void loop() {


}

При выводе в порт получаем:

Соответственно есть вопросы, на которые я в инете ответов не нашел:

1.       Почему переменные «butt» и «open_flag» поменяли свое значение? Причем, если закомментировать строку «Serial.println(open_flag);Serial.print("п.5 Разрешение на работу датчика:");» значение переменной «butt» будет 0.

2.       Почему чтобы в порт выводился сначала текст, а потом значение переменной код надо писать с право на лево?

3.       Почему значения переменной «pir» вывелось в самом начале?

4.       Почему строка «Serial.println("888888");Serial.print("п.8 ??????:");» вывелась как вывелась?

P.S. Всех с новым годом.

 

vk007
Offline
Зарегистрирован: 16.06.2015

Потому что вы не понимаете разницы между print и println. Вкратце, print печатает, но не делает перевод строки после напечатанного и следующая печать пойдет не с новой строки, а в хвост уже напечатанному. А println напечатает и сделает перевод строки; таким образом, то, что будет печататься вслед за ним, напечатается с новой строки.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Ничего не поменялось. Справа налево не надо.
У тебя перый ноль - это butt_flag a дальше все как написано. Значения всех переменных на месте. Все нормально.

IgorMM
Offline
Зарегистрирован: 01.01.2018

Вы правы, почему-то в голове сидело что префикс «ln» приводит к выполнению команды с новой строки, наверно наследие паскаля.

Спасибо, что наставили на путь истинный.

vk007
Offline
Зарегистрирован: 16.06.2015

IgorMM пишет:

почему-то в голове сидело что префикс «ln» приводит к выполнению команды с новой строки, наверно наследие паскаля.

А разве в паскале WriteLn работает по-другому? Если не ошибаюсь, то он точно также после вывода сообщения переводит курсор в начало следующей строки.