нужна помощь с арифметической функцией
- Войдите на сайт для отправки комментариев
Здравствуйте читатели и Помогатели
для Начала Ноздравляю Вас с Наступающим Новым Годом!
Теперь к теме;
Писал я код который двигает серво привод по таймеру реального времени (качелька серво должна отклониться 6 раз через каждые 25 мин но во мой недочет (переменная interval в неё загружается время с таймера) время первого отклонения определяется кнопкой butt.
Вот что я бы хотел понять как сделать переменную (interval) не бездонной а не более значения 60
Да еще притом что к переменой каждый раз должно прибавляться 25 и не переполняться больше 60
P.S. мне очень сложно такое объяснить даже людям посмотрите код пожалуйста!
Он должен прояснить взгляд на ситуацыю!
#include <stdio.h> #include <DS1302.h> #include <Servo.h> namespace { const int kCePin = 8; // Chip Enable const int kIoPin = 9; // Input/Output const int kSclkPin = 10; // Serial Clock int butt = 0; int interval = 110; Servo myservo; DS1302 rtc(kCePin, kIoPin, kSclkPin); String dayAsString(const Time::Day day) { switch (day) { case Time::kSunday: return "Sunday"; case Time::kMonday: return "Monday"; case Time::kTuesday: return "Tuesday"; case Time::kWednesday: return "Wednesday"; case Time::kThursday: return "Thursday"; case Time::kFriday: return "Friday"; case Time::kSaturday: return "Saturday"; } return "(unknown day)"; } } void setup() { Serial.begin(9600); myservo.attach(3); pinMode(11,OUTPUT); pinMode(12,OUTPUT); pinMode(22,INPUT); pinMode(24,OUTPUT); pinMode(28,OUTPUT); digitalWrite(28,LOW); digitalWrite(11,LOW); digitalWrite(12,HIGH); rtc.writeProtect(false); rtc.halt(false); } void printTime() { digitalWrite(24,HIGH); delay(1000); for(int i = 0 ; i < 6; i++){ for(int pos = 20; pos < 180; pos += 1) { myservo.write(pos); delay(1); } for(int pos = 180; pos>=20; pos-=1) { myservo.write(pos); delay(1); myservo.write(20); } } } void loop() { Time t = rtc.time(); const String day = dayAsString(t.day); char buf[50]; snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d", day.c_str(), t.yr, t.mon, t.date, t.hr, t.min, t.sec); Serial.println(buf); butt = digitalRead(22); if(butt == LOW){interval = t.sec; }; if(t.sec == interval){ printTime(); interval = interval + 25; Serial.println(interval);} digitalWrite(24,LOW); if(interval > 60){digitalWrite(28,HIGH);}else{digitalWrite(28,LOW);} delay(1000); }
и у меня стоят сикунды в коде для наглядности
Чтобы переменная не переполнялась можно использовать if . В чем проблема его использовать?
Тут не все так просто ! если в (interval)было помешено таймером 55 функция в программе прибавляет 25 получается (80) функцией if я сброшу (interval) на ноль а должно не обнуляться а получаться (20) так то можно но тут начинается одна проблема она в том что в (interval) я помещаю значение с таймера и предугадать что получиться функцией if будит очень сложно!!!
вот представте
это только кусок и представьте сколько это памяти и придется код писать не накаждые 5 мин а на каждую мин!
если интервал больше 60 отнять 60. повторить.
я вам очень благодарен спасибо элементарно просто а я дойти сам не мог
я вам очень благодарен спасибо элементарно просто а я дойти сам не мог
А если интервал будет 61? Тут нужно if (interval >= 60 ) ну или просто (interval >60) в зависимости какую максимальную цифру вам надо, 60 или 59