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() {}