ARDUINO Задать диапазон значений при сложении или вычитании для float.

Adve

✩✩✩✩✩✩✩
9 Май 2024
3
0
Здравствуйте, помогите пожалуйста задать диапазон значений для переменной float, так, чтобы при помощи сложения, вычитания оно не превышало этот диапазон. Я пытался сделать это при помощи constrain но значения уходят за предел диапазона. Я понимаю что при сложении число просто добавляется игнорируя constrain, а как сделать так чтоб оно работало я не понимаю.
 

poty

★★★★★★✩
19 Фев 2020
3,067
908
@Adve, обернуть float в класс, переопределить операции. Альтернатива - проверка выхода за пределы перед/после операций (чем, собственно, и занимается constrain - её нужно вызывать сразу после любой операции с числом)
 

Adve

✩✩✩✩✩✩✩
9 Май 2024
3
0
Оформи код соответствующим тэгом, см. Правила
@poty, Спасибо за ответ, а можно пример пожалуйста.

Вот для этого кода как обернуть float в класс?
#define CLK 7
#define DT 2
#define SW 12
#include "GyverEncoder.h"
Encoder enc1(CLK, DT, SW);
float Val = 0.00;
void setup() {
Serial.begin(9600);
enc1.setType(TYPE2);
}
void loop() {
enc1.tick();
if (enc1.isTurn()) {
if (enc1.isRight()) Val++;
if (enc1.isLeft()) Val--;
Serial.println(Val);
}
}
 

vortigont

★★★★★★✩
24 Апр 2020
963
513
Saint-Petersburg, Russia
@Adve, для флоат операции инкремента/декремента не имеют смысла.
но если хотите тупой пример, то как-то так
C++:
if (enc1.isRight()){
  Val += 1.0;
  if (Val > 100.0) Val = 100.0;
}
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,885
605
44
Val += 1.0;
if (Val > 100.0) Val = 100.0;
А можно совместить в одну :)
C++:
if ((Val += 1.0) >= 100.0) Val = 100.0;
И да. Перегрузку операторов ++ и -- для float со встроенным ограничением лучше не далать, это плохое программирование. Лучше сделать отдельную функцию для этого.
 
  • Лойс +1
Реакции: vortigont