почему команда delay(375); это не тоже самое что delay((90/240)*1000);

В этих двух участках кода моя машинка должна повернутся на 90 градусов на лево(240 это скорость прокручивания машинки градусы/секунду). но почему то первый и третий участок кода заставляет машинку просто чуть чуть дёрнутся на лево, а во втором участке всё правильно работает

1:

if (res == 0x28D7)
{                
      motors.move_leftly();
      display.matrix_display(bitmapArrowleft);
      delay((90/240)*1000);
      motors.stop();
      display.matrix_display(smile);
}

2:

if (res == 0x28D7)
{               
      motors.move_leftly();
      display.matrix_display(bitmapArrowleft);
      delay(375);
      motors.stop();
      display.matrix_display(smile);
}

3:

int delay_time; 
float buffer;
if (res == 0x28D7)
{                
      motors.move_leftly();
      display.matrix_display(bitmapArrowleft);
      buffer = 90/240;
      delay_time = (float)buffer*1000;
      delay(delay_time);
      motors.stop();
      display.matrix_display(smile);
}

почему это так?


Ответы (2 шт):

Автор решения: Qwertiy

Потому что 90/240 - это 0, даже если его сохранить во float. Ну и 0*1000 - тоже 0.

Исправь на 90*1000/240.


Чтобы результат был дробным, надо чтобы хотя бы один из операндов был дробным: 90./240 или 90/240..

→ Ссылка
Автор решения: Solt

если нужен int, то вначале умножайте, потом делите и будет вам счастье. Только учитывайте возможное переполнение при работе с переменными

int delay_time;
if (res == 0x28D7)
{                
      motors.move_leftly();
      display.matrix_display(bitmapArrowleft);
      delay_time = 1000*90/240;
      delay(delay_time);
      motors.stop();
      display.matrix_display(smile);
}
→ Ссылка