class jzSerial { public: jzSerial() { } String readString(char terminalChar = '\n') { char rcv='\0'; String str=""; while (rcv!=terminalChar) { while (Serial.available()>0) { rcv=Serial.read(); str+=rcv; } } return str; } int readInteger(char terminalChar='\n') { char * value; String s; s=readString(terminalChar); value = &s[0]; return atoi(value); } void printString(String value) { int len; char c; len= value.length(); for (int i=0; i<len; i++) { c=value[i]; Serial.print(char(c)); } } void printLineString (String value) { printString(value); Serial.println(""); } void printInteger(int value) { int bufSize = 20; char buf[bufSize]; itoa(value,buf,10); char c; int i=0; c=buf[i]; while (c!='\0') { Serial.print(char(c)); i++; c=buf[i]; } } void printLineInteger(int value) { printInteger(value); Serial.println(""); } float readFloat(char terminalChar='\n') { String str=""; char * buf; str=readString(terminalChar); buf=&str[0]; return (atof(buf)); } void printFloat(float value) { Serial.print(value); } void printLineFloat(float value) { Serial.println(value); } }; //测试 jzSerial newSerial; int i; String s; void setup() { Serial.begin(9600); Serial.print(236545845); Serial.println("Read integer from keyboard"); i=newSerial.readInteger(); newSerial.printLineInteger(i); Serial.println("Read string from keyboard"); s=newSerial.readString(); newSerial.printLineString(s); } void loop() { Serial.println("Read float from keyboard"); Serial.println(newSerial.readFloat()); }
2012年1月25日星期三
将读取/发送字符的功能封装在类中间
由于HardwareSerial没有函数直接读取字符、整数等,而在实际应用中却常常会用到,因此把这部分功能封装到类中间去,便于今后调用。最好的方式是子类化HardwareSerial类,但是该类的构造函数比较复杂,因此先将读取或者发送字符的功能封装到普通的类,在实现过程中调用Serial实例。
订阅:
博文评论 (Atom)
没有评论:
发表评论