Тема: Як помножити число в ASCII на 2
Читаю книжку по Arduino і там є скетч, за допомогою якого можна вводити число через монітор послідовного порту і воно зразу множиться на 2. Проблема в тому, що я до кінця не розумію ті перетворення.
Припустимо, я хочу помножити на 2 число 235. Якщо подивится в табл. ASCII, то воно буде передаватися блоками (я так розумію):
00110010 00110011 00110101
Потім треба змістити попередні цифри на розряд вліво (помножити на 10)... І тут не ясно чи треба кожен блок зміщувати на розряд вліво, чи зразу всі три блоки. Виходить не зрозуміло що.
long number = 0;
long a = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
number = 0; // обнулить переменную, подготовив
// ее к приему нового числа
Serial.flush(); // очистить буфер порта от "мусора" перед ожиданием
while (Serial.available() == 0)
{
// ничего не делать, пока что-то не появится в буфере порта,
// когда что-то появится в буфере, Serial.available вернет
// количество символов, ожидающих обработки в буфере
}
// как минимум один символ имеется в буфере,
// начать вычисления
while (Serial.available() > 0)
{
// сдвинуть предыдущие цифры на разряд влево;
// иными словами, 1 превратится в 10, если в буфере имеются данные
number = number * 10;
// прочитать следующую цифру из буфера и вычесть из нее
// код символа '0', чтобы превратить в фактическое целое число
a = Serial.read() - '0';
// прибавить это значение к накапливаемому значению
number = number + a;
// выполнить короткую задержку, чтобы дать возможность
// следующим цифрам достичь буфера
delay(5);
}
Serial.print("You entered: ");
Serial.println(number);
Serial.print(number);
Serial.print(" multiplied by two is ");
number = number * 2;
Serial.println(number);
}