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);
}
เมื่อวันที่ 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);
}
ความคิดเห็น
แสดงความคิดเห็น