ในส่วนนี้เป็น การสร้างแอพโดยที่ไม่ต้องเขียนโปรแกรม แต่ความสามารถก็ไม่น้อยหน้าในการเขียนโปรแกรม เป็นลักษณะของการลาก วาง Blocks ชุดคำสั่งคล้ายกับการต่อจิกซอว์ เรียกให้เป็นทางการว่า Block Programming
เมื่อเรารู้จักส่วนของ Designer แล้ว เราจะมาทำความรู้จักส่วนของ Blocks ซึ่งจะเป็นส่วนของการที่จะบอกให้แอพของที่เราจะสร้างนั้น มีกระบวนการทำงานอย่างไร เช่นหลักจากที่ กดคลิกที่ปุ่มแล้วให้ทำอะไร แล้วแสดงผลหน้าจออย่างไร เป็นต้น
เริ่มต้นด้วยการ คลิกที่ ปุ่ม Blocks ด้านบนสุด ขวามือ
คลิกที่ ListPicker1 ลากบล็อก when ListPicker1.BeforePicking ไปวางไว้ที่ Viewer


คลิกที่ Text เลือกเครื่องหมายคำพูด
เมื่อเรารู้จักส่วนของ Designer แล้ว เราจะมาทำความรู้จักส่วนของ Blocks ซึ่งจะเป็นส่วนของการที่จะบอกให้แอพของที่เราจะสร้างนั้น มีกระบวนการทำงานอย่างไร เช่นหลักจากที่ กดคลิกที่ปุ่มแล้วให้ทำอะไร แล้วแสดงผลหน้าจออย่างไร เป็นต้น
เริ่มต้นด้วยการ คลิกที่ ปุ่ม Blocks ด้านบนสุด ขวามือ

.
ลากบล็อก set ListPicker1.Elements ไปวางไว้ที่ Viewer
ลากบล็อก set ListPicker1.Elements ไปวางไว้ที่ Viewer
คลิกที่ BluetoothClient1 ลากบล็อก when BluetoothClient1.AddressAndName ไปวางต่อท้ายกับ when ListPicker1.BeforePicking

ต่อเพิ่มเติมตามรูป
คลิกที่ Text เลือกเครื่องหมายคำพูด
ต่อเพิ่มเติมตามรูป


หรือ ดาวน์โหลด ไฟล์: RC_Car.apk

จะแสดง Bluetooth ให้เลือก

เลือก HC-05

เมื่อทดลอง บังคับ
อธิบายการทำงานของโปรแกรมได้ดังนี้
เมื่อคลิก But_Forward แอนดรอยด์ จะส่ง อักษร "F" ออกไป
รถบังคับ Arduino รับคำสั่ง "F" มอเตอร์ทั้งด้านซ้าย-ขวา จะหมุน
case 'F':
analogWrite(speedPinA, 500);
analogWrite(speedPinB, 500);
digitalWrite(dir1PinA, LOW);
digitalWrite(dir1PinB, HIGH);
digitalWrite(dir2PinA, HIGH);
digitalWrite(dir2PinB, LOW);
Serial.println("Motor 1 Forward");
Serial.println("Motor 2 Forward");
เมื่อคลิก But_Stop แอนดรอยด์ จะส่ง อักษร "S" ออกไป
รถบังคับ Arduino รับคำสั่ง "S" มอเตอร์ทั้งด้านซ้าย-ขวา จะหยุด
case 'S':
analogWrite(speedPinA, 0);
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
Serial.println("Motor 1 Stop");
analogWrite(speedPinB, 0);
digitalWrite(dir1PinB, LOW);
digitalWrite(dir2PinB, HIGH);
Serial.println("Motor 2 Stop");
เมื่อคลิก But_Back แอนดรอยด์ จะส่ง อักษร "B" ออกไป
รถบังคับ Arduino รับคำสั่ง "B" มอเตอร์ทั้งด้านซ้าย-ขวา จะหมุนกลับหลัง
case 'B':
analogWrite(speedPinA, 500);
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
Serial.println("Motor 1 Back");
analogWrite(speedPinB, 500);
digitalWrite(dir1PinB, LOW);
digitalWrite(dir2PinB, HIGH);
Serial.println("Motor 2 Back");
เมื่อคลิก But_Left แอนดรอยด์ จะส่ง อักษร "L" ออกไป
รถบังคับ Arduino รับคำสั่ง "L" มอเตอร์ด้านซ้าย จะหมุน ข้างเดียว
case 'L':
analogWrite(speedPinA, 0);
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
Serial.println("Motor 1 Left");
analogWrite(speedPinB, 500);
digitalWrite(dir1PinB, HIGH);
digitalWrite(dir2PinB, LOW);
Serial.println("Motor 2 Left");
เมื่อคลิก But_Right แอนดรอยด์ จะส่ง อักษร "R" ออกไป
รถบังคับ Arduino รับคำสั่ง "R" มอเตอร์ด้านขวา จะหมุน ข้างเดียว
analogWrite(speedPinA, 500);
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
Serial.println("Motor 1 Right");
analogWrite(speedPinB, 0);
digitalWrite(dir1PinB, LOW);
digitalWrite(dir2PinB, HIGH);
Serial.println("Motor 2 Right");
หมายเหตุ : สังเกตุ แอพ RC_Car ของเรา ควบคุมรถบังคับ ได้ไม่สมบูรณ์ เพราะออกแบบมาเพื่อเรียนรู้และ ทำความเข้าใจการทำงาน ระหว่าง แอพแอนดรอยด์ กับ รถบังคับ Arduino ของเราเท่านั้น

เสร็จแล้วครับ สำหรับ แอพแอนดรอยด์ ควบคุมรถบังคับ RC_Car ของเรา

จากนั้น ไปที่ Build -> App (provide) QR code for .apk) จะได้ QR code ของโปรแกรม RC_Car
ให้ใช้ สมาร์ทโฟน ของเรา สแกน QR code เพื่อ ดาวน์โหลด โปรแกรม RC_Car เข้าสู่ สมาร์ทโฟน ของเรา
ให้ใช้ สมาร์ทโฟน ของเรา สแกน QR code เพื่อ ดาวน์โหลด โปรแกรม RC_Car เข้าสู่ สมาร์ทโฟน ของเรา
ติดตั้งให้เรียบร้อย เราจะมาทดสอบ กับ โปรเจครถบังคับ ขับเคลื่อน 2 ล้อ Arduino กับ แอพแอนดรอยด์ ของเรา ที่ได้สร้างมาก่อนหน้านี้
ลิงค์ http://robotsiam.blogspot.com/2016/08/l298n-arduino-uno-r3-car-with-android.html
สมมติฐาน ว่า รถบังคับเราพร้อมทำงานแล้ว ให้เปิดโปรแกรม RC_Car แล้ว คลิกที่ Bluetooth Search
ลิงค์ http://robotsiam.blogspot.com/2016/08/l298n-arduino-uno-r3-car-with-android.html
สมมติฐาน ว่า รถบังคับเราพร้อมทำงานแล้ว ให้เปิดโปรแกรม RC_Car แล้ว คลิกที่ Bluetooth Search

จะแสดง Bluetooth ให้เลือก

เลือก HC-05

เมื่อทดลอง บังคับ
อธิบายการทำงานของโปรแกรมได้ดังนี้
เมื่อคลิก But_Forward แอนดรอยด์ จะส่ง อักษร "F" ออกไป
รถบังคับ Arduino รับคำสั่ง "F" มอเตอร์ทั้งด้านซ้าย-ขวา จะหมุน
case 'F':
analogWrite(speedPinA, 500);
analogWrite(speedPinB, 500);
digitalWrite(dir1PinA, LOW);
digitalWrite(dir1PinB, HIGH);
digitalWrite(dir2PinA, HIGH);
digitalWrite(dir2PinB, LOW);
Serial.println("Motor 1 Forward");
Serial.println("Motor 2 Forward");
เมื่อคลิก But_Stop แอนดรอยด์ จะส่ง อักษร "S" ออกไป
รถบังคับ Arduino รับคำสั่ง "S" มอเตอร์ทั้งด้านซ้าย-ขวา จะหยุด
case 'S':
analogWrite(speedPinA, 0);
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
Serial.println("Motor 1 Stop");
analogWrite(speedPinB, 0);
digitalWrite(dir1PinB, LOW);
digitalWrite(dir2PinB, HIGH);
Serial.println("Motor 2 Stop");
เมื่อคลิก But_Back แอนดรอยด์ จะส่ง อักษร "B" ออกไป
รถบังคับ Arduino รับคำสั่ง "B" มอเตอร์ทั้งด้านซ้าย-ขวา จะหมุนกลับหลัง
case 'B':
analogWrite(speedPinA, 500);
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
Serial.println("Motor 1 Back");
analogWrite(speedPinB, 500);
digitalWrite(dir1PinB, LOW);
digitalWrite(dir2PinB, HIGH);
Serial.println("Motor 2 Back");
เมื่อคลิก But_Left แอนดรอยด์ จะส่ง อักษร "L" ออกไป
รถบังคับ Arduino รับคำสั่ง "L" มอเตอร์ด้านซ้าย จะหมุน ข้างเดียว
case 'L':
analogWrite(speedPinA, 0);
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
Serial.println("Motor 1 Left");
analogWrite(speedPinB, 500);
digitalWrite(dir1PinB, HIGH);
digitalWrite(dir2PinB, LOW);
Serial.println("Motor 2 Left");
เมื่อคลิก But_Right แอนดรอยด์ จะส่ง อักษร "R" ออกไป
รถบังคับ Arduino รับคำสั่ง "R" มอเตอร์ด้านขวา จะหมุน ข้างเดียว
analogWrite(speedPinA, 500);
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
Serial.println("Motor 1 Right");
analogWrite(speedPinB, 0);
digitalWrite(dir1PinB, LOW);
digitalWrite(dir2PinB, HIGH);
Serial.println("Motor 2 Right");
หมายเหตุ : สังเกตุ แอพ RC_Car ของเรา ควบคุมรถบังคับ ได้ไม่สมบูรณ์ เพราะออกแบบมาเพื่อเรียนรู้และ ทำความเข้าใจการทำงาน ระหว่าง แอพแอนดรอยด์ กับ รถบังคับ Arduino ของเราเท่านั้น