uni

Thing1's amazing uni repo
Log | Files | Refs

2 (1298B)


      1 #define SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
      2 
      3 void
      4 SEprintf(const char *fmt, ...) {
      5   static char sbuf[64] = { 0 };
      6   va_list ap;
      7   va_start(ap, fmt);
      8   vsnprintf(sbuf, 64, fmt, ap);
      9   va_end(ap);
     10   Serial.print(sbuf);
     11 }
     12 
     13 int
     14 readint() {
     15   while (!Serial.available()) ; 
     16   return Serial.parseInt();
     17 }
     18 
     19 int
     20 input_time(const char *order, const char *sport)  {
     21   int i;
     22   SEprintf("How many %s did %s take: ", order, sport);
     23   i = readint();
     24   SEprintf("\n");
     25   return i;
     26 }
     27 
     28 void
     29 readtime(const char *sport, int secs[], int mins[], int hours[], int i) {
     30   secs[i] = input_time("secs", sport);
     31   mins[i] = input_time("mins", sport);
     32   hours[i] = input_time("hours", sport);
     33 }
     34 
     35 int
     36 sum(int arr[3]) {
     37   int total = 0;
     38   for (int i = 0; i < 3; i++) 
     39     total += arr[i];
     40   return total;
     41 }
     42 
     43 void 
     44 setup() {
     45   int secs[3] = {0}, mins[3] = {0}, hours[3] = {0}, res[3] = {0};
     46   char *sports[] = {
     47     "swim",
     48     "run",
     49     "cycle",
     50   };
     51 
     52   Serial.begin(9600);
     53 
     54   for (int i = 0; i < SIZE(sports); i++) 
     55     readtime(sports[i], secs, mins, hours, i);
     56 
     57   res[0] = sum(secs);
     58   res[1] = sum(mins);
     59   res[2] = sum(hours);
     60 
     61   for (int i = 0; i <= 3; i++) {
     62     res[i + 1] += res[i] / 60;
     63     res[i] = res[i] % 60;
     64   }
     65 
     66   SEprintf("Total time: %dhr %dmin %dsec.\n", res[2], res[1], res[0]);
     67 }
     68 void 
     69 loop() {
     70 }