uni

Thing1's amazing uni repo
Log | Files | Refs

lab3.ino (1303B)


      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 
     41   return total;
     42 }
     43 
     44 void 
     45 setup() {
     46   int secs[3] = {0}, mins[3] = {0}, hours[3] = {0}, res[3] = {0};
     47   char *sports[] = {
     48     "swim",
     49     "run",
     50     "cycle",
     51   };
     52 
     53   Serial.begin(9600);
     54 
     55   for (int i = 0; i < SIZE(sports); i++) 
     56     readtime(sports[i], secs, mins, hours, i);
     57 
     58   res[0] = sum(secs);
     59   res[1] = sum(mins);
     60   res[2] = sum(hours);
     61 
     62   for (int i = 0; i <= 3; i++) {
     63     res[i + 1] += res[i] / 60;
     64     res[i] = res[i] % 60;
     65   }
     66 
     67   SEprintf("Total time: %dhr %dmin %dsec.\n", res[2], res[1], res[0]);
     68 }
     69 
     70 void loop() {}