การเขียน แอพแอนดรอยด์ ควบคุมรถบังคับ ด้วย App Inventor

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

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

เริ่มต้นด้วยการ คลิกที่ ปุ่ม Blocks ด้านบนสุด ขวามือ


คลิกที่ ListPicker1 ลากบล็อก when ListPicker1.BeforePicking ไปวางไว้ที่ Viewer





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




ต่อเพิ่มเติมตามรูป

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



ต่อเพิ่มเติมตามรูป



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


จากนั้น ไปที่ Build -> App (provide) QR code for .apk) จะได้ QR code ของโปรแกรม RC_Car

ให้ใช้ สมาร์ทโฟน ของเรา สแกน QR code เพื่อ ดาวน์โหลด โปรแกรม RC_Car เข้าสู่ สมาร์ทโฟน ของเรา
 



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

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

ลิงค์ 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 ของเราเท่านั้น