2号機

Dependencies:   HCSR04 mbed

Fork of Nucleo_SS2_No2 by Rui Kato

Committer:
ishi777
Date:
Mon Dec 04 05:11:53 2017 +0000
Revision:
2:f568ec2e6955
Parent:
1:aabe6887447c
Child:
3:dd3b7c3c327b
??????????????.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Morimoto448 0:7e3b7c017977 1 #include "mbed.h"
Morimoto448 0:7e3b7c017977 2
Morimoto448 0:7e3b7c017977 3 PwmOut mypwm4(D4);
Morimoto448 1:aabe6887447c 4 PwmOut mypwm6(D6);
Morimoto448 0:7e3b7c017977 5 PwmOut mypwm2(D2);
Morimoto448 0:7e3b7c017977 6 PwmOut mypwm3(D3);
Morimoto448 0:7e3b7c017977 7
Morimoto448 0:7e3b7c017977 8 Ticker flag;
Morimoto448 1:aabe6887447c 9 Timer t;
Morimoto448 0:7e3b7c017977 10
Morimoto448 0:7e3b7c017977 11 DigitalOut myled(LED1);
Morimoto448 0:7e3b7c017977 12
Morimoto448 0:7e3b7c017977 13
Morimoto448 0:7e3b7c017977 14 #define STATE_A (0)
Morimoto448 0:7e3b7c017977 15 #define STATE_B (1)
Morimoto448 0:7e3b7c017977 16 #define STATE_C (2)
Morimoto448 0:7e3b7c017977 17 #define STATE_D (3)
Morimoto448 0:7e3b7c017977 18 #define STATE_E (4)
ishi777 2:f568ec2e6955 19 #define STATE_A2 (5)
Morimoto448 0:7e3b7c017977 20
Morimoto448 0:7e3b7c017977 21 char mode;
Morimoto448 0:7e3b7c017977 22 int wait_flag;
Morimoto448 1:aabe6887447c 23 int timer;
Morimoto448 0:7e3b7c017977 24
Morimoto448 0:7e3b7c017977 25 void flg(){
Morimoto448 1:aabe6887447c 26 timer = t.read();
Morimoto448 0:7e3b7c017977 27 }
Morimoto448 0:7e3b7c017977 28
Morimoto448 0:7e3b7c017977 29 int main() {
Morimoto448 0:7e3b7c017977 30
Morimoto448 1:aabe6887447c 31 t.start();
Morimoto448 0:7e3b7c017977 32 mode = STATE_E;
Morimoto448 0:7e3b7c017977 33 wait_flag = 0;
Morimoto448 0:7e3b7c017977 34
Morimoto448 0:7e3b7c017977 35 mypwm4.period_ms(100);
Morimoto448 1:aabe6887447c 36 mypwm6.period_ms(100);
Morimoto448 0:7e3b7c017977 37 mypwm2.period_ms(100);
Morimoto448 0:7e3b7c017977 38 mypwm3.period_ms(100);
Morimoto448 0:7e3b7c017977 39
Morimoto448 1:aabe6887447c 40 flag.attach(&flg, 1.0);
Morimoto448 0:7e3b7c017977 41
Morimoto448 0:7e3b7c017977 42
Morimoto448 1:aabe6887447c 43
Morimoto448 1:aabe6887447c 44 while(1){
Morimoto448 1:aabe6887447c 45
Morimoto448 1:aabe6887447c 46 switch(timer)
Morimoto448 1:aabe6887447c 47 {
Morimoto448 1:aabe6887447c 48 case 8.0:
Morimoto448 1:aabe6887447c 49 wait_flag = 1;
Morimoto448 1:aabe6887447c 50 mode = STATE_A;
Morimoto448 1:aabe6887447c 51 break;
Morimoto448 1:aabe6887447c 52 case 13.0:
Morimoto448 1:aabe6887447c 53 wait_flag = 1;
Morimoto448 1:aabe6887447c 54 mode = STATE_B;
Morimoto448 1:aabe6887447c 55 break;
Morimoto448 1:aabe6887447c 56 case 17.0:
Morimoto448 1:aabe6887447c 57 wait_flag = 1;
ishi777 2:f568ec2e6955 58 mode = STATE_A2;
Morimoto448 1:aabe6887447c 59 break;
ishi777 2:f568ec2e6955 60 case 22.0:
Morimoto448 1:aabe6887447c 61 wait_flag = 1;
Morimoto448 1:aabe6887447c 62 mode = STATE_D;
Morimoto448 1:aabe6887447c 63 break;
ishi777 2:f568ec2e6955 64 case 30.0:
Morimoto448 1:aabe6887447c 65 wait_flag = 1;
Morimoto448 1:aabe6887447c 66 mode = STATE_A;
Morimoto448 1:aabe6887447c 67 break;
ishi777 2:f568ec2e6955 68 case 37.0:
Morimoto448 1:aabe6887447c 69 wait_flag = 1;
Morimoto448 1:aabe6887447c 70 mode = STATE_C;
Morimoto448 1:aabe6887447c 71 break;
ishi777 2:f568ec2e6955 72 case 42.0:
Morimoto448 1:aabe6887447c 73 wait_flag = 1;
Morimoto448 1:aabe6887447c 74 mode = STATE_A;
Morimoto448 1:aabe6887447c 75 break;
Morimoto448 1:aabe6887447c 76
Morimoto448 1:aabe6887447c 77 }
Morimoto448 1:aabe6887447c 78
Morimoto448 1:aabe6887447c 79 // 状態が切り替わるときは一時停止
Morimoto448 0:7e3b7c017977 80 if(wait_flag==1)
Morimoto448 0:7e3b7c017977 81 {
Morimoto448 0:7e3b7c017977 82 // フラグの初期化
Morimoto448 0:7e3b7c017977 83 wait_flag = 0;
Morimoto448 0:7e3b7c017977 84 myled = 0; // LED消灯
Morimoto448 0:7e3b7c017977 85 // 左モータの制御
Morimoto448 0:7e3b7c017977 86 mypwm4.pulsewidth_ms(80);
Morimoto448 1:aabe6887447c 87 mypwm6.pulsewidth_ms(80);
Morimoto448 0:7e3b7c017977 88 // 右モータの制御
Morimoto448 0:7e3b7c017977 89 mypwm2.pulsewidth_ms(80);
Morimoto448 0:7e3b7c017977 90 mypwm3.pulsewidth_ms(80);
Morimoto448 0:7e3b7c017977 91 // 500ms待機する
Morimoto448 1:aabe6887447c 92 wait(0.5);
Morimoto448 0:7e3b7c017977 93 }
Morimoto448 0:7e3b7c017977 94
Morimoto448 0:7e3b7c017977 95 switch (mode)
Morimoto448 0:7e3b7c017977 96 {
Morimoto448 0:7e3b7c017977 97 // STATE_A : 前進(左:正転 右:正転)
Morimoto448 0:7e3b7c017977 98 case STATE_A:
Morimoto448 0:7e3b7c017977 99 myled = 1; // LED点灯
Morimoto448 0:7e3b7c017977 100 // 左モータの制御
ishi777 2:f568ec2e6955 101 mypwm4.pulsewidth_ms(70);
Morimoto448 1:aabe6887447c 102 mypwm6.pulsewidth_ms(0);
Morimoto448 0:7e3b7c017977 103 // 右モータの制御
ishi777 2:f568ec2e6955 104 mypwm2.pulsewidth_ms(75);
ishi777 2:f568ec2e6955 105 mypwm3.pulsewidth_ms(0);
ishi777 2:f568ec2e6955 106 break;
ishi777 2:f568ec2e6955 107 // STATE_A : 前進(左:正転 右:正転)
ishi777 2:f568ec2e6955 108 case STATE_A2:
ishi777 2:f568ec2e6955 109 myled = 1; // LED点灯
ishi777 2:f568ec2e6955 110 // 左モータの制御
ishi777 2:f568ec2e6955 111 mypwm4.pulsewidth_ms(98);
ishi777 2:f568ec2e6955 112 mypwm6.pulsewidth_ms(0);
ishi777 2:f568ec2e6955 113 // 右モータの制御
ishi777 2:f568ec2e6955 114 mypwm2.pulsewidth_ms(100);
Morimoto448 0:7e3b7c017977 115 mypwm3.pulsewidth_ms(0);
Morimoto448 0:7e3b7c017977 116 break;
Morimoto448 0:7e3b7c017977 117
Morimoto448 0:7e3b7c017977 118 // STATE_B : 右旋回(左:正転 右:逆転)
Morimoto448 0:7e3b7c017977 119 case STATE_B:
Morimoto448 0:7e3b7c017977 120 myled = 1; // LED点灯
Morimoto448 0:7e3b7c017977 121 // 左モータの制御
Morimoto448 1:aabe6887447c 122 mypwm4.pulsewidth_ms(50);
Morimoto448 1:aabe6887447c 123 mypwm6.pulsewidth_ms(0);
Morimoto448 0:7e3b7c017977 124 // 右モータの制御
Morimoto448 0:7e3b7c017977 125 mypwm2.pulsewidth_ms(0);
Morimoto448 1:aabe6887447c 126 mypwm3.pulsewidth_ms(50);
Morimoto448 0:7e3b7c017977 127 break;
Morimoto448 0:7e3b7c017977 128
Morimoto448 0:7e3b7c017977 129 // STATE_C : 左旋回(左:逆転 右:正転)
Morimoto448 0:7e3b7c017977 130 case STATE_C:
Morimoto448 0:7e3b7c017977 131 myled = 1; // LED点灯
Morimoto448 0:7e3b7c017977 132 // 左モータの制御
Morimoto448 0:7e3b7c017977 133 mypwm4.pulsewidth_ms(0);
Morimoto448 1:aabe6887447c 134 mypwm6.pulsewidth_ms(50);
Morimoto448 0:7e3b7c017977 135 // 右モータの制御
Morimoto448 1:aabe6887447c 136 mypwm2.pulsewidth_ms(50);
Morimoto448 0:7e3b7c017977 137 mypwm3.pulsewidth_ms(0);
Morimoto448 0:7e3b7c017977 138 break;
Morimoto448 0:7e3b7c017977 139
Morimoto448 0:7e3b7c017977 140 // STATE_D : 後退(左:逆転 右:逆転)
Morimoto448 0:7e3b7c017977 141 case STATE_D:
Morimoto448 0:7e3b7c017977 142 myled = 1; // LED点灯
Morimoto448 0:7e3b7c017977 143 // 左モータの制御
Morimoto448 0:7e3b7c017977 144 mypwm4.pulsewidth_ms(0);
ishi777 2:f568ec2e6955 145 mypwm6.pulsewidth_ms(80);
Morimoto448 0:7e3b7c017977 146 // 右モータの制御
Morimoto448 0:7e3b7c017977 147 mypwm2.pulsewidth_ms(0);
ishi777 2:f568ec2e6955 148 mypwm3.pulsewidth_ms(83);
Morimoto448 0:7e3b7c017977 149 break;
Morimoto448 0:7e3b7c017977 150
Morimoto448 0:7e3b7c017977 151 // STATE_E : ブレーキ(左:ブレーキ 右:ブレーキ)
Morimoto448 0:7e3b7c017977 152 case STATE_E:
Morimoto448 0:7e3b7c017977 153 myled = 0; // LED消灯
Morimoto448 0:7e3b7c017977 154 // 左モータの制御
Morimoto448 0:7e3b7c017977 155 mypwm4.pulsewidth_ms(60);
Morimoto448 1:aabe6887447c 156 mypwm6.pulsewidth_ms(60);
Morimoto448 0:7e3b7c017977 157 // 右モータの制御
Morimoto448 0:7e3b7c017977 158 mypwm2.pulsewidth_ms(60);
Morimoto448 0:7e3b7c017977 159 mypwm3.pulsewidth_ms(60);
Morimoto448 0:7e3b7c017977 160 break;
Morimoto448 0:7e3b7c017977 161 }
Morimoto448 0:7e3b7c017977 162 }
Morimoto448 0:7e3b7c017977 163
Morimoto448 0:7e3b7c017977 164 }