Wpis z mikrobloga

#arduino
Można jakoś ograniczyć zakres wartości zmiennej?
Powiedzmy, że chcę żeby wartość zmiennej x mogła być z zakresu 0-20.
Czy da się ograniczyć ją na etapie deklaracji, czy muszę to robić naokoło dodając warunki do wszystkich części programu mających wpływ na wartość x?
  • 21
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@ZaQ_1: zrób funkcję która będzie wywoływana w trakcie pobierania wartości zmiennej i ta funkcja będzie ci ograniczać od 0-20. Robienie naokoło ale chyba lepiej niż warunki dla każdej czynności osobno.
  • Odpowiedz
@daczka92: z samego założenia projektu, nad którym pracuję, jestem ograniczony do atmegi328. Z tego co czytałem o micropythonie to on potrzebuje większych zasobów do działania
  • Odpowiedz
w C Chyba inaczej się nie da


@wytrzzeszcz: @radekrad: @ZaQ_1: Jak używasz arduino ide to piszesz w C++.
Najprościej za każdym razem jak chcesz zmienić stan zmiennej wywołaj odpowiednią funkcję, niezależnie czy to zaimplementujesz w C czy użyjesz klasy i przeciążania operatorów czy może jeszcze typu szablonowego. Każda zmiana wartości zmiennej musi zostać poddana sprawdzeniu, czy PO zmianie zmienna nie wyjdzie poza zakres. Od ciebie zależy
  • Odpowiedz
Zrobiłem dodatkową funkcję, tak jak radziliście. Wywołuję ją wszędzie gdzie jest modyfikowana zmienna. Po testach stwierdzam, że działa wystarczająco dobrze jak na moje potrzeby. Ale jeśli coś jest bardzo źle to chętnie ją poprawię.

void limitx()

{

if(x<0){x=0;}

if(x>30){x=30;}
  • Odpowiedz
@ZaQ_1: ja się na programowaniu szczerze mocno nie znam, taki po prostu wpadł mi pomysł z tą funkcją na moim poziomie wiedzy ¯\_(ツ)_/¯ wygląda ok, z tym że średniki chyba po nawiasach wąsatych
  • Odpowiedz
@ZaQ_1: @FLAC: średnik stawia się po instrukcji, czyli np po x+=1; Klamra {} oznacza blok instrukcji ale jako tako sama nią nie jest, bo cóż miałaby oznaczać? Nie jest za to błędem postawić średnik za tą klamrą.
Można za to nie stawiać klamry za if() jeśli miałaby się tam znaleźć jedna instrukcja.

  • Odpowiedz