Вопрос про Serial и перевод byte в char

Sync
Offline
Зарегистрирован: 12.01.2016

Приветствую всех. Только осваиваю ардуино и наткнулся на одну проблемку, которую не понимаю. Есть такой код

int SerialByte;
char SerialSymbol;

void setup() 
{
  Serial.begin(115200);
}

void loop ()
{
  SerialByte = Serial.read();
  SerialSymbol = char(SerialByte);
  
  if (SerialSymbol == 48) 
  {
  Serial.println(SerialSymbol);
  Serial.println(SerialByte);
  Serial.println("");
  }
}

Посылаею ему в терминале команду 0, получаю ответ. Но я не понимаю почему он понимает условие на 48 символ ASCII, а не на 0. Я ведь уже перевёл командой char полученый в Serial.read 48 символ в символ 0. N/t/ независимо от того, пишу я в условии if (SerialSymbol == 48) или if (SerialByte == 48) выполнение этого условия не меняется. Почему так?

Sync
Offline
Зарегистрирован: 12.01.2016

Что самое странное при выполнении Serial.print он работает верно - возвращает одно значение в byte (48), а второе в char (0). Только почему-то в if не учитывает это изменение.

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

'0' = 48 = 0x30 = B00110000 = (char)48 = (byte)48 = (int)48 = (long)48

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

Sync пишет:

от того, пишу я в условии if (SerialSymbol == 48) или if (SerialByte == 48) выполнение этого условия не меняется. 

А Вы ещё напишите  if (SerialSymbol == '0') и if (SerialByte == '0') и подумайте

Sync пишет:

Почему так?

Как сделаете, расскажите нам, что надумали.

 

Sync
Offline
Зарегистрирован: 12.01.2016

А, т.е. получается вводить переменную для перевода в char вооще не надо? Так ещё лучше, спасибо.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Но можно и "переводить" .....

arduino-1.6.7\examples\04.Communication\ASCIITable