1. #include "SerialBT.h"
  2. int FR_MotorIN1 = 6;
  3. int FR_MotorIN2 = 7;
  4. int RR_MotorIN3 = 8;
  5. int RR_MotorIN4 = 9;
  6. int FL_MotorIN1 = 18;
  7. int FL_MotorIN2 = 19;
  8. int RL_MotorIN3 = 20;
  9. int RL_MotorIN4 = 21;
  10. char key_val;
  11. int PWM = 127; // 起動時のスピードを設定
  12. int PWM_T = 110; // 旋回時のスピードを設定
  13. void setup() {
  14.   Serial.begin(115200);
  15.   SerialBT.begin();
  16.   pinMode(LED_BUILTIN, OUTPUT);
  17.   pinMode(FR_MotorIN1, OUTPUT); analogWrite(FR_MotorIN1, 0);
  18.   pinMode(FR_MotorIN2, OUTPUT); analogWrite(FR_MotorIN2, 0);
  19.   pinMode(RR_MotorIN3, OUTPUT); analogWrite(RR_MotorIN3, 0);
  20.   pinMode(RR_MotorIN4, OUTPUT); analogWrite(RR_MotorIN4, 0);
  21.   pinMode(FL_MotorIN1, OUTPUT); analogWrite(FL_MotorIN1, 0);
  22.   pinMode(FL_MotorIN2, OUTPUT); analogWrite(FL_MotorIN2, 0);
  23.   pinMode(RL_MotorIN3, OUTPUT); analogWrite(RL_MotorIN3, 0);
  24.   pinMode(RL_MotorIN4, OUTPUT); analogWrite(RL_MotorIN4, 0);
  25. }
  26. void Received() {
  27.   while (SerialBT) {
  28.     while (SerialBT.available()) {
  29.       key_val = SerialBT.read();
  30.     }
  31.     //Serial.println(key_val);
  32.     switch (key_val) {
  33.       case '1':
  34.         MoveFrontLeft();
  35.         Serial.println("MoveLeftForward Button 1");
  36.         break;
  37.       case '2': //MoveForward Button 2
  38.         MoveForward();
  39.         Serial.println("MoveForward Button 2");
  40.         break;
  41.       case '3': //MoveFrontRight Button 3
  42.         MoveFrontRight();
  43.         Serial.println("MoveFrontRight Button 3");
  44.         break;
  45.       case '4': //Turnleft Botton 4
  46.         TurnLeft();
  47.         Serial.println("Turnleft Botton 4");
  48.         break;
  49.       case '5': //Stop Botton 5
  50.         Stop();
  51.         Serial.println("Stop Botton 5");
  52.         break;
  53.       case '6': //TurnRight Button 6
  54.         TurnRight();
  55.         Serial.println("TrunRight Button 6");
  56.         break;
  57.       case '7': //MoveRearleft Button 7
  58.         MoveRearLeft();
  59.         Serial.println("MoveRearleft Button 7");
  60.         break;
  61.       case '8': //MoveBackward Button 8
  62.         MoveBackward();
  63.         Serial.println("MoveBackward Button 8");
  64.         break;
  65.       case '9': //MoveRearRight Button 9
  66.         MoveRearRight();
  67.         Serial.println("MoveRearRight Button 9");
  68.         break;
  69.       case '*': //MoveLeft Button *
  70.         MoveLeft();
  71.         Serial.println("MoveLeft Button *");
  72.         break;
  73.       case '0':
  74.         Stop();
  75.         Serial.println("Stop Button 0");
  76.         break;
  77.       case '#': //MoveRight Button #
  78.         MoveRight();
  79.         Serial.println("MoveRight Button #");
  80.         break;
  81.       case 'S': //Auto Stop S
  82.         Stop();
  83.         Serial.println("Auto Stop S");
  84.         break;
  85.       case 'A': //Speed = 25%
  86.         PWM = 110;
  87.         Serial.println("110");
  88.         break;
  89.       case 'B': //Speed = 50%
  90.         PWM = 127;
  91.         Serial.println("127");
  92.         break;
  93.       case 'C': //Speed = 75%
  94.         PWM = 191;
  95.         Serial.println("191");
  96.         break;
  97.       case 'D': //Speed = 100%
  98.         PWM = 255;
  99.         Serial.println("255");
  100.         break;
  101.       default:
  102.         break;
  103.     }
  104.   }
  105. }
  106. void loop() {
  107.   Received();
  108. }
  109. void MoveForward() { // 前進
  110.   analogWrite(FR_MotorIN1, PWM);
  111.   analogWrite(FR_MotorIN2, 0);
  112.   analogWrite(RR_MotorIN3, PWM);
  113.   analogWrite(RR_MotorIN4, 0);
  114.   analogWrite(FL_MotorIN1, PWM);
  115.   analogWrite(FL_MotorIN2, 0);
  116.   analogWrite(RL_MotorIN3, PWM);
  117.   analogWrite(RL_MotorIN4, 0);
  118. }
  119. void MoveBackward() { // 後進
  120.   analogWrite(FR_MotorIN1, 0);
  121.   analogWrite(FR_MotorIN2, PWM);
  122.   analogWrite(RR_MotorIN3, 0);
  123.   analogWrite(RR_MotorIN4, PWM);
  124.   analogWrite(FL_MotorIN1, 0);
  125.   analogWrite(FL_MotorIN2, PWM);
  126.   analogWrite(RL_MotorIN3, 0);
  127.   analogWrite(RL_MotorIN4, PWM);
  128. }
  129. void MoveLeft() { // 左横へ移動
  130.   analogWrite(FR_MotorIN1, PWM);
  131.   analogWrite(FR_MotorIN2, 0);
  132.   analogWrite(RR_MotorIN3, 0);
  133.   analogWrite(RR_MotorIN4, PWM);
  134.   analogWrite(FL_MotorIN1, 0);
  135.   analogWrite(FL_MotorIN2, PWM);
  136.   analogWrite(RL_MotorIN3, PWM);
  137.   analogWrite(RL_MotorIN4, 0);
  138. }
  139. void MoveRight() { // 右横へ移動
  140.   analogWrite(FR_MotorIN1, 0);
  141.   analogWrite(FR_MotorIN2, PWM);
  142.   analogWrite(RR_MotorIN3, PWM);
  143.   analogWrite(RR_MotorIN4, 0);
  144.   analogWrite(FL_MotorIN1, PWM);
  145.   analogWrite(FL_MotorIN2, 0);
  146.   analogWrite(RL_MotorIN3, 0);
  147.   analogWrite(RL_MotorIN4, PWM);
  148. }
  149. void MoveFrontLeft() { // 左斜め前方へ移動
  150.   analogWrite(FR_MotorIN1, PWM);
  151.   analogWrite(FR_MotorIN2, 0);
  152.   analogWrite(RR_MotorIN3, 0);
  153.   analogWrite(RR_MotorIN4, 0);
  154.   analogWrite(FL_MotorIN1, 0);
  155.   analogWrite(FL_MotorIN2, 0);
  156.   analogWrite(RL_MotorIN3, PWM);
  157.   analogWrite(RL_MotorIN4, 0);
  158. }
  159. void MoveFrontRight() { // 右斜め前方へ移動
  160.   analogWrite(FR_MotorIN1, 0);
  161.   analogWrite(FR_MotorIN2, 0);
  162.   analogWrite(RR_MotorIN3, PWM);
  163.   analogWrite(RR_MotorIN4, 0);
  164.   analogWrite(FL_MotorIN1, PWM);
  165.   analogWrite(FL_MotorIN2, 0);
  166.   analogWrite(RL_MotorIN3, 0);
  167.   analogWrite(RL_MotorIN4, 0);
  168. }
  169. void MoveRearLeft() { // 左斜め後方へ移動
  170.   analogWrite(FR_MotorIN1, 0);
  171.   analogWrite(FR_MotorIN2, 0);
  172.   analogWrite(RR_MotorIN3, 0);
  173.   analogWrite(RR_MotorIN4, PWM);
  174.   analogWrite(FL_MotorIN1, 0);
  175.   analogWrite(FL_MotorIN2, PWM);
  176.   analogWrite(RL_MotorIN3, 0);
  177.   analogWrite(RL_MotorIN4, 0);
  178. }
  179. void MoveRearRight() { // 右斜め後方へ移動
  180.   analogWrite(FR_MotorIN1, 0);
  181.   analogWrite(FR_MotorIN2, PWM);
  182.   analogWrite(RR_MotorIN3, 0);
  183.   analogWrite(RR_MotorIN4, 0);
  184.   analogWrite(FL_MotorIN1, 0);
  185.   analogWrite(FL_MotorIN2, 0);
  186.   analogWrite(RL_MotorIN3, 0);
  187.   analogWrite(RL_MotorIN4, PWM);
  188. }
  189. void TurnRight() { // 左回り低速旋回
  190.   analogWrite(FR_MotorIN1, PWM_T);
  191.   analogWrite(FR_MotorIN2, 0);
  192.   analogWrite(RR_MotorIN3, PWM_T);
  193.   analogWrite(RR_MotorIN4, 0);
  194.   analogWrite(FL_MotorIN1, 0);
  195.   analogWrite(FL_MotorIN2, PWM_T);
  196.   analogWrite(RL_MotorIN3, 0);
  197.   analogWrite(RL_MotorIN4, PWM_T);
  198. }
  199. void TurnLeft() { // 右回り低速旋回
  200.   analogWrite(FR_MotorIN1, 0);
  201.   analogWrite(FR_MotorIN2, PWM_T);
  202.   analogWrite(RR_MotorIN3, 0);
  203.   analogWrite(RR_MotorIN4, PWM_T);
  204.   analogWrite(FL_MotorIN1, PWM_T);
  205.   analogWrite(FL_MotorIN2, 0);
  206.   analogWrite(RL_MotorIN3, PWM_T);
  207.   analogWrite(RL_MotorIN4, 0);
  208. }
  209. void Stop() { // 停止 全てを0に設定
  210.   analogWrite(FR_MotorIN1, 0);
  211.   analogWrite(FR_MotorIN2, 0);
  212.   analogWrite(RR_MotorIN3, 0);
  213.   analogWrite(RR_MotorIN4, 0);
  214.   analogWrite(FL_MotorIN1, 0);
  215.   analogWrite(FL_MotorIN2, 0);
  216.   analogWrite(RL_MotorIN3, 0);
  217.   analogWrite(RL_MotorIN4, 0);
  218. }