Assignment II
Arduino String Stack
อุปกรณ์ในการทดลอง
- บอร์ดทดลอง 1 บอร์ด
- Arduino Uno R3 1 บอร์ด
- ตัวต้านทาน 10k โอห์ม 1 ตัว
- Push Button 1 ตัว
- สายไฟ
- เขียนโค้ดสาหรับบอร์ด Arduino โดยสร้างเป็น C++ Class ดังต่อไปนี้ => Class StringStack เป็นโครงสร้างข้อมูลแบบ Stack (กองซ้อน) สาหรับเก็บ String objects ( http://arduino.cc/en/Reference/StringObject ) และกาหนด API สาหรับคลาสดังกล่าว เป็นดังนี้
#include <String.h>
class StringStack {
public:
StringStack( int capacity=10 ); // constructor
boolean put( String s ); // put a String object on stack
boolean get( String &s ); // get a String object from stack
inline int size(); // return the number of String objects on the stack
inline boolean isEmpty(); // return true if stack is empty, otherwise false
inline boolean isFull(); // return true if stack is full, otherwise false
private:
int capacity; // the max. capacity of the stack
int count; // used to count the number of string objects stored
String *buf; // used to store String objects on stack
};
-
จงสร้างคลาส StringStack และทดสอบการทำงานโดยใช้โค้ดตัวอย่างต่อไปนี้และทดสอบโดยใช้ฮาร์ดแวร์จริง (ใช้บอร์ด Arduino และแสดงผลผ่าน Serial Monitor ของ Arduino IDE)int num = 10; // capacity
StringStack st( num );
void setup() {
Serial.begin(115200);
}
char buf[20];
String str;
void loop() {Serial.print( "\nPut strings: " );for ( int i=0; i < num; i++ ) {str = String( (i+1)*10 );if ( !st.put( str ) ) {Serial.println( "\nPut string error!" );break;} else {Serial.print( str );Serial.print( " " );}str = NULL;delay(50);}delay(500);Serial.print( "\nGet strings: " );for ( int i=0; i < num; i++ ) {if ( st.get( str ) ) {str.toCharArray( buf, 20 );Serial.print( buf );Serial.print( " " );} else {Serial.println( "\nGet string error!" );break;}delay(50);}delay(500);}
Class StringStack (StringStack.cpp)
Arduino Code
ผลการทดลอง
ข้อที่ 2
ใช้คลาส StringStack ในข้อแรก นำมาเขียนโค้ด Arduino เพื่อให้มีพฤติกรรมการทำงานดังนี้
- บอร์ด Arduino มีวงจรปุ่มกด Get ทำงานแบบ Active-Low (ใช้ตัวต้านทานแบบ Pull-up, 10k)
- ผู้ใช้สามารถส่งข้อความ (ภาษาอังกฤษ) ทีละบรรทัด (ไม่เกิน 20 ตัวอักขระต่อบรรทัด) จากคอมพิวเตอร์ โดยส่งผ่าน Serial Monitor ของ Arduino IDE ไปยังบอร์ด Arduino
- ข้อความแต่ละบรรทัดที่ถูกส่งไปยัง Arduino จะถูกจัดเก็บใน StringStack (เก็บบนกองซ้อน) ถ้าไม่เต็มความจุ แต่ถ้าเต็มความจุ ไม่สามารถเก็บข้อความใหม่ได้ Arduino จะต้องส่งข้อความ "Full" กลับมา
- เมื่อมีการกดปุ่ม Get แล้วปล่อยหนึ่งครั้ง ข้อความบนสุด (ถ้ามี) ของ StringStack จะถูกดึงออกมาแล้วส่งผ่าน Serial Monitor ไปยังคอมพิวเตอร์
- แต่ถ้าไม่ข้อความใดๆ Arduino จะต้องส่งข้อความ "Empty" กลับมา เมื่อกดปุ่มแล้วปล่อย
Arduino Code
- เมื่อรับอักขระมาเกิน 20 อักขระ ก็จะส่งข้อความมาแจ้งว่าเกิน 20 อักขระ แล้วทำการตัดเอาแค่ 20 ตัวแรกไปเก็บไว้ใน Stack เท่านั้น ที่เหลือตัดทิ้ง
- เมื่อเก็บจนเต็มก็จะแจ้งข้อความมาบอกว่า "Stack is Full!"
- เมื่อทำการกดปุ่มในขณะที่ไม่มีข้อความใน Stack เลย ก็จะส่งข้อความมาบอกว่า "Stack is Empty "
No comments:
Post a Comment