Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
main.cpp@1:1b3526a1ae3f, 2019-12-11 (annotated)
- Committer:
- maenoshin
- Date:
- Wed Dec 11 08:16:26 2019 +0000
- Revision:
- 1:1b3526a1ae3f
- Parent:
- 0:ef944a0446ee
1;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
komachiangel72 | 0:ef944a0446ee | 1 | #include "mbed.h" |
komachiangel72 | 0:ef944a0446ee | 2 | |
komachiangel72 | 0:ef944a0446ee | 3 | |
komachiangel72 | 0:ef944a0446ee | 4 | PwmOut AIN1(D6); |
komachiangel72 | 0:ef944a0446ee | 5 | PwmOut AIN2(D5); |
komachiangel72 | 0:ef944a0446ee | 6 | PwmOut BIN1(D9); |
komachiangel72 | 0:ef944a0446ee | 7 | PwmOut BIN2(D10); |
komachiangel72 | 0:ef944a0446ee | 8 | |
komachiangel72 | 0:ef944a0446ee | 9 | |
komachiangel72 | 0:ef944a0446ee | 10 | //ブレーキ |
komachiangel72 | 0:ef944a0446ee | 11 | void motorStop(PwmOut IN1,PwmOut IN2) { |
komachiangel72 | 0:ef944a0446ee | 12 | IN1 = 1; |
komachiangel72 | 0:ef944a0446ee | 13 | IN2 = 1; |
komachiangel72 | 0:ef944a0446ee | 14 | } |
komachiangel72 | 0:ef944a0446ee | 15 | |
komachiangel72 | 0:ef944a0446ee | 16 | //逆転 |
komachiangel72 | 0:ef944a0446ee | 17 | void motorReverse(PwmOut IN1,PwmOut IN2,float duty) { |
komachiangel72 | 0:ef944a0446ee | 18 | IN1 = 0; |
komachiangel72 | 0:ef944a0446ee | 19 | IN2 = duty; |
komachiangel72 | 0:ef944a0446ee | 20 | } |
komachiangel72 | 0:ef944a0446ee | 21 | |
komachiangel72 | 0:ef944a0446ee | 22 | InterruptIn enc_R(D12);//フォトインタラプタ右 |
komachiangel72 | 0:ef944a0446ee | 23 | InterruptIn enc_L(D11);//フォトインタラプタ左 |
komachiangel72 | 0:ef944a0446ee | 24 | |
komachiangel72 | 0:ef944a0446ee | 25 | |
komachiangel72 | 0:ef944a0446ee | 26 | float counter_R =0; |
komachiangel72 | 0:ef944a0446ee | 27 | float pre_counter_R = 0; //左右の回転数変化量を読み取るための前値 |
komachiangel72 | 0:ef944a0446ee | 28 | void event_handler_R(void){ |
komachiangel72 | 0:ef944a0446ee | 29 | counter_R++; |
komachiangel72 | 0:ef944a0446ee | 30 | } |
komachiangel72 | 0:ef944a0446ee | 31 | |
komachiangel72 | 0:ef944a0446ee | 32 | float counter_L =0; |
komachiangel72 | 0:ef944a0446ee | 33 | float pre_counter_L = 0; |
komachiangel72 | 0:ef944a0446ee | 34 | void event_handler_L(void){//左モーター |
komachiangel72 | 0:ef944a0446ee | 35 | counter_L++; |
komachiangel72 | 0:ef944a0446ee | 36 | } |
komachiangel72 | 0:ef944a0446ee | 37 | //AnalogIn photo(A0); |
komachiangel72 | 0:ef944a0446ee | 38 | //AnalogIn schmitt(A5); |
komachiangel72 | 0:ef944a0446ee | 39 | int main() { |
komachiangel72 | 0:ef944a0446ee | 40 | |
maenoshin | 1:1b3526a1ae3f | 41 | |
komachiangel72 | 0:ef944a0446ee | 42 | motorStop(AIN1,AIN2); |
komachiangel72 | 0:ef944a0446ee | 43 | motorStop(BIN1,BIN2); |
komachiangel72 | 0:ef944a0446ee | 44 | float pre_counter_R = 0; |
komachiangel72 | 0:ef944a0446ee | 45 | float pre_counter_L = 0; |
maenoshin | 1:1b3526a1ae3f | 46 | |
komachiangel72 | 0:ef944a0446ee | 47 | |
komachiangel72 | 0:ef944a0446ee | 48 | while(1) {//組み込み型のプログラムは無限ループになるようにする。(終わってはいけない) |
maenoshin | 1:1b3526a1ae3f | 49 | float duty = 0.50; |
maenoshin | 1:1b3526a1ae3f | 50 | |
maenoshin | 1:1b3526a1ae3f | 51 | motorReverse(AIN1,AIN2,duty);//逆転のほうが制御しやすいので前進時は逆転を使用 |
maenoshin | 1:1b3526a1ae3f | 52 | motorReverse(BIN1,BIN2,duty); |
maenoshin | 1:1b3526a1ae3f | 53 | printf("ready\n"); |
maenoshin | 1:1b3526a1ae3f | 54 | wait(3); |
maenoshin | 1:1b3526a1ae3f | 55 | printf("go\n"); |
maenoshin | 1:1b3526a1ae3f | 56 | for(duty;duty>0.0;duty-=0.01){ |
maenoshin | 1:1b3526a1ae3f | 57 | enc_R.rise(&event_handler_R); |
maenoshin | 1:1b3526a1ae3f | 58 | enc_R.fall(&event_handler_R); |
maenoshin | 1:1b3526a1ae3f | 59 | enc_L.rise(&event_handler_L); |
maenoshin | 1:1b3526a1ae3f | 60 | enc_L.fall(&event_handler_L); |
komachiangel72 | 0:ef944a0446ee | 61 | motorReverse(AIN1,AIN2,duty);//逆転のほうが制御しやすいので前進時は逆転を使用 |
komachiangel72 | 0:ef944a0446ee | 62 | motorReverse(BIN1,BIN2,duty); |
komachiangel72 | 0:ef944a0446ee | 63 | wait(2);//回転が安定するまで待つ |
komachiangel72 | 0:ef944a0446ee | 64 | printf("duty value:%f\n",duty); |
komachiangel72 | 0:ef944a0446ee | 65 | printf("rotations per second(R_tire):%f\n",(counter_R-pre_counter_R)/24.0/38.2);//1秒間あたりのタイヤの回転数 |
komachiangel72 | 0:ef944a0446ee | 66 | printf("rotations per second(L_tire):%f\n",(counter_L-pre_counter_L)/24.0/38.2); |
maenoshin | 1:1b3526a1ae3f | 67 | pre_counter_R = counter_R; |
maenoshin | 1:1b3526a1ae3f | 68 | pre_counter_L = counter_L; |
komachiangel72 | 0:ef944a0446ee | 69 | } |
komachiangel72 | 0:ef944a0446ee | 70 | |
komachiangel72 | 0:ef944a0446ee | 71 | } |
komachiangel72 | 0:ef944a0446ee | 72 | } |