почему команда 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);
}