Friday, September 12, 2014

Assignment II String Stack

Assignment II
Arduino String Stack

อุปกรณ์ในการทดลอง
  1. บอร์ดทดลอง 1 บอร์ด
  2. Arduino Uno R3 1 บอร์ด
  3. ตัวต้านทาน 10k โอห์ม 1 ตัว
  4. Push Button 1 ตัว
  5. สายไฟ
ข้อที่ 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.h) 


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" กลับมา เมื่อกดปุ่มแล้วปล่อย
 รูปวงจรในข้อที่ 2



Arduino Code




  • เมื่อรับอักขระมาเกิน 20 อักขระ ก็จะส่งข้อความมาแจ้งว่าเกิน 20 อักขระ แล้วทำการตัดเอาแค่ 20 ตัวแรกไปเก็บไว้ใน Stack เท่านั้น ที่เหลือตัดทิ้ง
  • เมื่อเก็บจนเต็มก็จะแจ้งข้อความมาบอกว่า "Stack is Full!"
  • เมื่อทำการกดปุ่มในขณะที่ไม่มีข้อความใน Stack เลย ก็จะส่งข้อความมาบอกว่า "Stack is Empty "
ผลการทดลอง


No comments:

Post a Comment