| #include |
|
| // ピン定義 |
|
| const int motor1Pin1 = 6; |
|
| const int motor1Pin2 = 7; |
|
| const int motor2Pin1 = 4; |
|
| const int motor2Pin2 = 5; |
|
| const int speakerPin = 13; |
|
| const int redLED = 10; |
|
| const int greenLED = 9; |
|
| const int blueLED = 8; |
|
| const int irReceiverPin = 2; |
|
| // 赤外線受信オブジェクト |
|
| IRrecv irrecv(irReceiverPin); |
|
| decode_results results; |
|
| void setup() { |
|
| // モータ、LED、スピーカのピンを出力に設定 |
|
| pinMode(motor1Pin1, OUTPUT); |
|
| pinMode(motor1Pin2, OUTPUT); |
|
| pinMode(motor2Pin1, OUTPUT); |
|
| pinMode(motor2Pin2, OUTPUT); |
|
| pinMode(speakerPin, OUTPUT); |
|
| pinMode(redLED, OUTPUT); |
|
| pinMode(greenLED, OUTPUT); |
|
| pinMode(blueLED, OUTPUT); |
|
| // 赤外線受信開始 |
|
| irrecv.enableIRIn(); |
|
| } |
|
| void loop() { |
|
| if (irrecv.decode(&results)) { |
|
| unsigned long code = results.value; |
|
| irrecv.resume(); // 次の受信の準備 |
|
| switch (code) { |
|
| case 0xFF02FD: // 前 |
|
| ledOn(blueLED, 1000); |
|
| moveForward(1000); |
|
| break; |
|
| case 0xFF9867: // 後 |
|
| ledOn(greenLED, 1000); |
|
| moveBackward(1000); |
|
| break; |
|
| case 0xFF906F: // 右 |
|
| ledOn(redLED, 100); |
|
| turnRight(100); |
|
| moveForward(100); |
|
| break; |
|
| case 0xFFE01F: // 左 |
|
| ledOn(redLED, 100); |
|
| turnLeft(100); |
|
| moveForward(100); |
|
| break; |
|
| case 0xFF30CF: // 1 |
|
| ledOn(redLED, 1000); |
|
| break; |
|
| case 0xFF18E7: // 2 |
|
| ledOn(blueLED, 1000); |
|
| break; |
|
| case 0xFF7A85: // 3 |
|
| ledOn(greenLED, 1000); |
|
| break; |
|
| case 0xFF10EF: // 4 |
|
| ledOn(redLED, 1000); |
|
| ledOn(blueLED, 1000); |
|
| break; |
|
| case 0xFF38C7: // 5 |
|
| ledOn(greenLED, 1000); |
|
| ledOn(blueLED, 1000); |
|
| break; |
|
| case 0xFF5AA5: // 6 |
|
| ledOn(greenLED, 1000); |
|
| ledOn(redLED, 1000); |
|
| break; |
|
| case 0xFF42BD: // 7 |
|
| ledOn(redLED, 1000); |
|
| ledOn(greenLED, 1000); |
|
| ledOn(blueLED, 1000); |
|
| break; |
|
| case 0xFF52AD: // 9 |
|
| asm volatile ("jmp 0"); // Arduinoをリセット |
|
| break; |
|
| default: // その他のボタン |
|
| moveForward(300); |
|
| tone(speakerPin, 1000, 300); // スピーカ鳴らす |
|
| break; |
|
| } |
|
| } |
|
| } |
|
| // モータ制御関数 |
|
| void moveForward(int duration) { |
|
| digitalWrite(motor1Pin1, HIGH); |
|
| digitalWrite(motor1Pin2, LOW); |
|
| digitalWrite(motor2Pin1, HIGH); |
|
| digitalWrite(motor2Pin2, LOW); |
|
| delay(duration); |
|
| stopMotors(); |
|
| } |
|
| void moveBackward(int duration) { |
|
| digitalWrite(motor1Pin1, LOW); |
|
| digitalWrite(motor1Pin2, HIGH); |
|
| digitalWrite(motor2Pin1, LOW); |
|
| digitalWrite(motor2Pin2, HIGH); |
|
| delay(duration); |
|
| stopMotors(); |
|
| } |
|
| void turnRight(int duration) { |
|
| digitalWrite(motor1Pin1, HIGH); |
|
| digitalWrite(motor1Pin2, LOW); |
|
| digitalWrite(motor2Pin1, LOW); |
|
| digitalWrite(motor2Pin2, HIGH); |
|
| delay(duration); |
|
| stopMotors(); |
|
| } |
|
| void turnLeft(int duration) { |
|
| digitalWrite(motor1Pin1, LOW); |
|
| digitalWrite(motor1Pin2, HIGH); |
|
| digitalWrite(motor2Pin1, HIGH); |
|
| digitalWrite(motor2Pin2, LOW); |
|
| delay(duration); |
|
| stopMotors(); |
|
| } |
|
| void stopMotors() { |
|
| digitalWrite(motor1Pin1, LOW); |
|
| digitalWrite(motor1Pin2, LOW); |
|
| digitalWrite(motor2Pin1, LOW); |
|
| digitalWrite(motor2Pin2, LOW); |
|
| } |
|
| // LED制御関数 |
|
| void ledOn(int pin, int duration) { |
|
| digitalWrite(pin, HIGH); |
|
| delay(duration); |
|
| digitalWrite(pin, LOW); |
|
| } |