void loop() { cmdlck = ""; cmd = rdata("?"); cmdlck = cmd; sprintln(funcparser(cmd)); }
void reply(String cst) { loopagain: if (int0 != 0) { sprintln("!INT0 ?"); int0 = 0; goto loopagain; } if (int1 != 0) { sprintln("!INT1 ?"); int1 = 0; goto loopagain; } sprintln(cst); while(Serial.available()<1) { } }
String rdata(String cstr) { readagain: if (dbg>0) { reply(cstr); }else{ reply("?"); } String cst = ""; while(Serial.available()>0) { cst += byte(Serial.read()); } if (cst.equalsIgnoreCase("!")) { sprintln("cmd = "+cmdlck); goto readagain; } return cst; }
BYTE sprintf(char *s, char *fmt, ...) { va_list ap; BYTE nb = 0; va_start(ap, fmt); for(; *fmt; fmt++) if(*fmt == '%') { switch(*++fmt) { case 'c': /* char */ *(s++) = va_arg(ap, char); break; case 'd': /* decimal int */ s += sprintn(s, va_arg(ap, BYTE), 10, SIGNED); break; case 'u': /* unsigned int */ s += sprintn(s, va_arg(ap, BYTE), 10, UNSIGNED); break; case 'o': /* octal int */ s += sprintn(s, va_arg(ap, BYTE), 8, UNSIGNED); break; case 'x': /* hexadecimal int */ s += sprintn(s, va_arg(ap, BYTE), 16, UNSIGNED); break; case 's': /* string */ s += sprint(s, va_arg(ap, char *)); break; case 'l': /* long */ switch(*++fmt) { case 'd': /* decimal long */ s += sprintln(s, va_arg(ap, WORD), 10, SIGNED); break; case 'u': /* unsigned long */ s += sprintln(s, va_arg(ap, WORD), 10, UNSIGNED); break; case 'o': /* octal long */ s += sprintln(s, va_arg(ap, WORD), 8, UNSIGNED); break; case 'x': /* hexadecimal long */ s += sprintln(s, va_arg(ap, WORD), 16, UNSIGNED); break; } break; case '%': /* % */ *(s++) = *fmt; break; default: *s = 0; return -1; } nb++; } else