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 }