Здравствуйте! Помогите пожалуйста с расчётами!

im14ilya
Offline
Зарегистрирован: 25.01.2018

Здравствуйте! Помогите пожалуйста с расчётами!

Зная текущее время и зная расписание звонков, нужно узнать какой из массива ближайший звонок и сколько минут до него осталось.

Код написал, но он не работает (он должен узнать когда ближайший звонок). Массив NH содержит часы звонков, а NM минуты. Сразу говорю некоторые переменные в коде пока не используются

Код вот:

#include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS1302, 22, 24, 26);

String D;
String M;
String Y;
String H;
String I;
String S;
String N;

String Time;
String Out;

int NH[] {
  8, 9, 9, 10,
  10, 11, 11, 11,
  12, 12, 13, 13,
  13, 14
};

int NM[] {
  30, 10, 25, 05,
  20, 00, 15, 55,
  10, 50, 05, 45,
  50, 30
};

#include <LiquidCrystal.h>
LiquidCrystal lcd(9, 8, 7, 6, 5, 4);

void setup() {
  delay(300);
  time.begin();
  lcd.begin(16, 2);
}

void loop() {
  D = time.gettime("d");
  M = time.gettime("m");
  Y = time.gettime("Y");
  H = time.gettime("H");
  I = time.gettime("i");
  S = time.gettime("s");
  N = time.gettime("D");
  lcd.clear();
  Time = H + ":" + I + ":" + S;
  TiMe();
  lcd.setCursor(0, 0);
  lcd.print("Time: " + Time);
  lcd.setCursor(0, 1);
  lcd.print("Ring: " + Out);
  delay(900);
}

void TiMe() {
  int i = 0;
  int z = 13;
  int q = 0;
  while (q == 0 or i <= z) {
    if (H.toInt() * 60 + M.toInt() > NH[i - 1] * 60 + NM[i - 1]) {
      if (H.toInt() * 60 + M.toInt() < NH[i] * 60 + NM[i]) {
        Out = String(NH[i]) + ":" + String(NM[i]);
        q = 1;
      }
    }
    i++;
  }

}

 

b707
Offline
Зарегистрирован: 26.05.2017

im14ilya пишет:

Код написал, но он не работает (он должен узнать когда ближайший звонок). Массив NH содержит часы звонков, а NM минуты.

 

И охота себе проблемы создавать. Вот вам хинт - храните для каждого звонка не часы и минуты, а минуты с полуночи - будете высчитывать порядок звонков в одно действие.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Стесняюсь спросить, уважаемый, а что конкретно не работает?

- не считывает время из DS1302?

- не сравнивает его с заданными значениями?

- сама ардуинка перестала работать?

Что компилятор гутарит?

im14ilya
Offline
Зарегистрирован: 25.01.2018

Можно и так, но будет ли это работать?

im14ilya
Offline
Зарегистрирован: 25.01.2018

Не сравнивает! Я же вроде сказал.

SLKH
Offline
Зарегистрирован: 17.08.2015

b707 пишет:

im14ilya пишет:

Код написал, но он не работает (он должен узнать когда ближайший звонок). Массив NH содержит часы звонков, а NM минуты.

 

И охота себе проблемы создавать. Вот вам хинт - храните для каждого звонка не часы и минуты, а минуты с полуночи - будете высчитывать порядок звонков в одно действие.

или {830, 910, 925, 1005, 1020,    ........... }

im14ilya
Offline
Зарегистрирован: 25.01.2018

SLKH пишет:

b707 пишет:

im14ilya пишет:

Код написал, но он не работает (он должен узнать когда ближайший звонок). Массив NH содержит часы звонков, а NM минуты.

 

И охота себе проблемы создавать. Вот вам хинт - храните для каждого звонка не часы и минуты, а минуты с полуночи - будете высчитывать порядок звонков в одно действие.

или {830, 910, 925, 1005, 1020,    ........... }

Он вроде про это и имеет ввиду

b707
Offline
Зарегистрирован: 26.05.2017

im14ilya пишет:

Он вроде про это и имеет ввиду

если "он" - это я, то вовсе нет.

Попробуйте в обоих системах посчитать разницу между соседними звонками - ощутите разницу. Как предлагает SLKH - нагляднее, но в моем случае считать проще.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Ну выдайте на сериал перед строкой 61  (H.toInt() * 60 + M.toInt()), (NH[i - 1] * 60 + NM[i - 1]), (NH[i] * 60 + NM[i]), глазами посмотрите, чего там за цифры получаются.

Возможно это проблемы преобразования