SubString สำคัญมากๆๆ Arduino มีให้

ผู้เขียน: Prajin Palangsantikul (www.appsofttech.com)


เมื่อวันที่ 12/12/2014 นักศึกษาให้สอนการรับข้อมูลจากพอร์ตอนุกรมแล้วควบคุมความเร็วในการหมุนของมอเตอร์ โดยมีรูปแบบการส่งข้อมูลดังนี้

m speed1 speed2 ตัวอย่างเช่น

m 100 150 //M1=100, M2=150

// มอเตอร์ตัวที่1 หมุนด้วยสัญญาณ PWM เท่ากับ 100
// มอเตอร์ตัวที่2 หมุนด้วยสัญญาณ PWM เท่ากับ 150

จากนั้นก็เริ่มบรรยายตั้งแต่เริ่มต้น ว่า...... (ยาวครับ ไม่ข้อกล่าว) เอาเป็นว่าหลังจากบรรยายไปเขียนโค้ดไปด้วย
ก็ได้โค้ดตามตัวอย่างที่นำมาแสดงนี่แหละครับ

จบท้ายด้วยว่าที่อาจารย์สอนนี้เป็นแนวทางและแนวความคิด เพื่อให้เข้าใจหลักการ โค้ดโปรแกรม
ก็ต้องนำไปปรับหรือประยุกต์ต่อไปนะครับ

*** นักศึกษาทำโปรเจ็คควบคุมหุ่นยนต์โดยการสั่งงานด้วยเสียงให้หุ่นยนต์เดินทางไปยังเป้าหมายที่กำหนดได้



โค้ดโปรแกรม

/ Program: SubString.ino
/ Purpose: Sub String (String-Object)

*/

#define m1PWM 3
#define m2PWM 5

char cmdByte[12];
int cmdCnt = 0;
int cmdHook = 0;

void setup()
{
     Serial.begin(9600);
     pinMode(m1PWM, OUTPUT);
     pinMode(m2PWM, OUTPUT);
}

void loop()
{
     // send data only when you receive data:
     if (Serial.available() > 0)
     {
          // read the incom byte:
          char incom = Serial.read();

          if (incom == 'm')
          {
               cmdHook = 1;
               cmdCnt = 0;
          } else if (incom == 13)
          {
               cmdHook = 0;
               checkCmd();
          }

          if (cmdHook == 1)
          {
               cmdByte[cmdCnt++] = incom;
          }
     }
}

void checkCmd()
{
     int sp[2];
     int spCnt = 0;
     String dataStr;
     String tmpStr;

     dataStr = String(cmdByte);

     for(int i=0; i
     {
          if (dataStr[i] == 32)
          {
               sp[spCnt++] = i;
          }
     }
     tmpStr = dataStr.substring(sp[0], sp[1]);
     tmpStr.trim();
     int m1 = tmpStr.toInt();
     tmpStr = dataStr.substring(sp[1], cmdCnt);
     tmpStr.trim();
     int m2 = tmpStr.toInt();
     m_drive(m1, m2);
}

void m_drive(int m1, int m2)
{
     Serial.print("Speed Motor A:B= ");
     Serial.print(m1, DEC);
     Serial.print(":");
     Serial.println(m2, DEC);

     analogWrite(m1PWM, m1);
     analogWrite(m2PWM, m2);
}

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

สร้างต้นคริสต์มาสด้วย JAVA

ฟังก์ชัน SerialEvent กับ Arduino

การใช้งาน PIC18Fxxxx กับ MPLAB X + XC8 ด้วย Peripheral Libraries (PLIBS)