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.
main.cpp@3:1bceed8a22d0, 2018-09-16 (annotated)
- Committer:
- yamaotoko
- Date:
- Sun Sep 16 15:17:43 2018 +0000
- Revision:
- 3:1bceed8a22d0
- Parent:
- 2:d19d83df0d15
???
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| yamaotoko | 0:4e684157ecca | 1 | #include "mbed.h" |
| yamaotoko | 0:4e684157ecca | 2 | #include "HX711.hpp" |
| yamaotoko | 0:4e684157ecca | 3 | #include "Dynamixel.h" |
| yamaotoko | 0:4e684157ecca | 4 | |
| yamaotoko | 2:d19d83df0d15 | 5 | HX711 hx711(p21, p22); //data, clk |
| yamaotoko | 0:4e684157ecca | 6 | Serial pc(USBTX, USBRX); |
| yamaotoko | 0:4e684157ecca | 7 | Dynamixel motor(p13,p14,p15,0xFE,57600); |
| yamaotoko | 1:f43ebe88228e | 8 | Timer timeStamp; |
| yamaotoko | 2:d19d83df0d15 | 9 | int motorspeed = 0; |
| yamaotoko | 0:4e684157ecca | 10 | //--------------------HX711 |
| yamaotoko | 0:4e684157ecca | 11 | void calibrate(float gram){ |
| yamaotoko | 0:4e684157ecca | 12 | hx711.setScale(1.f); |
| yamaotoko | 0:4e684157ecca | 13 | hx711.tare(); |
| yamaotoko | 0:4e684157ecca | 14 | //この辺をProcessing用に組み替える |
| yamaotoko | 2:d19d83df0d15 | 15 | printf("place the weight and push any button\n"); |
| yamaotoko | 0:4e684157ecca | 16 | char c = pc.getc(); |
| yamaotoko | 0:4e684157ecca | 17 | |
| yamaotoko | 0:4e684157ecca | 18 | float natural = hx711.readGram(); |
| yamaotoko | 0:4e684157ecca | 19 | float calibVal = natural / gram; |
| yamaotoko | 0:4e684157ecca | 20 | hx711.setScale(calibVal); |
| yamaotoko | 2:d19d83df0d15 | 21 | printf("calibrated! %f %f %d\n", calibVal, natural, hx711.read()); |
| yamaotoko | 0:4e684157ecca | 22 | } |
| yamaotoko | 0:4e684157ecca | 23 | |
| yamaotoko | 0:4e684157ecca | 24 | |
| yamaotoko | 1:f43ebe88228e | 25 | //Dynamixel回転方向対応用 |
| yamaotoko | 1:f43ebe88228e | 26 | //多分11bitのうちMSBが符号,最上位で回転方向を指定している |
| yamaotoko | 1:f43ebe88228e | 27 | void move(int speed){ |
| yamaotoko | 3:1bceed8a22d0 | 28 | if(speed >= 0){ |
| yamaotoko | 3:1bceed8a22d0 | 29 | motor.setSpeed(speed); |
| yamaotoko | 3:1bceed8a22d0 | 30 | //pc.printf("debugmode: %d\n", speed);//debug |
| yamaotoko | 3:1bceed8a22d0 | 31 | } |
| yamaotoko | 1:f43ebe88228e | 32 | else{ |
| yamaotoko | 1:f43ebe88228e | 33 | motor.setSpeed(-1*speed+1024); //11bitのうちMSBが符号 |
| yamaotoko | 3:1bceed8a22d0 | 34 | //pc.printf("debugmode: %d\n", -1*speed+1024);//debug |
| yamaotoko | 1:f43ebe88228e | 35 | } |
| yamaotoko | 1:f43ebe88228e | 36 | } |
| yamaotoko | 1:f43ebe88228e | 37 | |
| yamaotoko | 1:f43ebe88228e | 38 | //シリアル受信時 |
| yamaotoko | 1:f43ebe88228e | 39 | void pc_rx(){ |
| yamaotoko | 1:f43ebe88228e | 40 | char c = pc.getc(); //P5からの入力 |
| yamaotoko | 1:f43ebe88228e | 41 | |
| yamaotoko | 1:f43ebe88228e | 42 | switch(c){ |
| yamaotoko | 1:f43ebe88228e | 43 | case 'c': //キャリブレーション |
| yamaotoko | 1:f43ebe88228e | 44 | calibrate(50.0); |
| yamaotoko | 1:f43ebe88228e | 45 | break; |
| yamaotoko | 1:f43ebe88228e | 46 | case 's': //計測開始 |
| yamaotoko | 1:f43ebe88228e | 47 | timeStamp.reset(); |
| yamaotoko | 3:1bceed8a22d0 | 48 | move(motorspeed); //(WIP) |
| yamaotoko | 1:f43ebe88228e | 49 | timeStamp.start(); |
| yamaotoko | 1:f43ebe88228e | 50 | break; |
| yamaotoko | 1:f43ebe88228e | 51 | case 'e': //計測終了 |
| yamaotoko | 1:f43ebe88228e | 52 | move(0); //(WIP) |
| yamaotoko | 1:f43ebe88228e | 53 | timeStamp.stop(); |
| yamaotoko | 1:f43ebe88228e | 54 | break; |
| yamaotoko | 1:f43ebe88228e | 55 | case 'z': //ゼロ点オフセット |
| yamaotoko | 1:f43ebe88228e | 56 | hx711.tare(); |
| yamaotoko | 1:f43ebe88228e | 57 | break; |
| yamaotoko | 1:f43ebe88228e | 58 | case 'l': //モータ左回転 |
| yamaotoko | 3:1bceed8a22d0 | 59 | move(-1 * motorspeed); //(WIP) |
| yamaotoko | 1:f43ebe88228e | 60 | break; |
| yamaotoko | 1:f43ebe88228e | 61 | case 'r': //モータ右回転 |
| yamaotoko | 3:1bceed8a22d0 | 62 | move(motorspeed); //(WIP) |
| yamaotoko | 1:f43ebe88228e | 63 | break; |
| yamaotoko | 1:f43ebe88228e | 64 | case 'q': //モータ停止 |
| yamaotoko | 1:f43ebe88228e | 65 | move(0); |
| yamaotoko | 1:f43ebe88228e | 66 | break; |
| yamaotoko | 1:f43ebe88228e | 67 | |
| yamaotoko | 1:f43ebe88228e | 68 | case 'm': //モータ速度設定 |
| yamaotoko | 1:f43ebe88228e | 69 | char val_buf[20]; //数値受信用バッファ |
| yamaotoko | 2:d19d83df0d15 | 70 | char rx_data; //シリアル受信 |
| yamaotoko | 2:d19d83df0d15 | 71 | motorspeed = 0; //モータ速度を一旦初期化 |
| yamaotoko | 2:d19d83df0d15 | 72 | int i=0; |
| yamaotoko | 2:d19d83df0d15 | 73 | do{ |
| yamaotoko | 2:d19d83df0d15 | 74 | rx_data = pc.getc(); //数値を取得 |
| yamaotoko | 2:d19d83df0d15 | 75 | val_buf[i] = rx_data; //1文字を文字列に格納 |
| yamaotoko | 2:d19d83df0d15 | 76 | i++; |
| yamaotoko | 2:d19d83df0d15 | 77 | }while(rx_data != ';'); //入力終了コマンド";"がきたら終了 |
| yamaotoko | 2:d19d83df0d15 | 78 | i=0; |
| yamaotoko | 2:d19d83df0d15 | 79 | while(val_buf[i] != ';'){ |
| yamaotoko | 2:d19d83df0d15 | 80 | //int型に変換 |
| yamaotoko | 2:d19d83df0d15 | 81 | motorspeed *= 10; |
| yamaotoko | 2:d19d83df0d15 | 82 | motorspeed += (val_buf[i] - '0'); |
| yamaotoko | 2:d19d83df0d15 | 83 | i++; |
| yamaotoko | 2:d19d83df0d15 | 84 | } |
| yamaotoko | 2:d19d83df0d15 | 85 | pc.printf("%d\n", motorspeed); |
| yamaotoko | 2:d19d83df0d15 | 86 | //WIP |
| yamaotoko | 1:f43ebe88228e | 87 | break; |
| yamaotoko | 1:f43ebe88228e | 88 | |
| yamaotoko | 1:f43ebe88228e | 89 | default: |
| yamaotoko | 2:d19d83df0d15 | 90 | pc.printf("fuck %c\n", c); |
| yamaotoko | 1:f43ebe88228e | 91 | break; |
| yamaotoko | 1:f43ebe88228e | 92 | } |
| yamaotoko | 1:f43ebe88228e | 93 | } |
| yamaotoko | 1:f43ebe88228e | 94 | |
| yamaotoko | 0:4e684157ecca | 95 | int main() { |
| yamaotoko | 2:d19d83df0d15 | 96 | pc.attach(pc_rx, Serial::RxIrq); |
| yamaotoko | 1:f43ebe88228e | 97 | pc.baud(115200); |
| yamaotoko | 0:4e684157ecca | 98 | //ホイールモードにするための設定 |
| yamaotoko | 0:4e684157ecca | 99 | motor.setAngleLimit(0, ADDRESS_CW_ANGLE_LIMIT); |
| yamaotoko | 0:4e684157ecca | 100 | motor.setAngleLimit(0, ADDRESS_CCW_ANGLE_LIMIT); |
| yamaotoko | 2:d19d83df0d15 | 101 | move(0); |
| yamaotoko | 1:f43ebe88228e | 102 | |
| yamaotoko | 1:f43ebe88228e | 103 | float gram = 0; |
| yamaotoko | 1:f43ebe88228e | 104 | hx711.setScale(1.f); |
| yamaotoko | 1:f43ebe88228e | 105 | hx711.tare(); |
| yamaotoko | 1:f43ebe88228e | 106 | |
| yamaotoko | 1:f43ebe88228e | 107 | timeStamp.reset(); |
| yamaotoko | 1:f43ebe88228e | 108 | |
| yamaotoko | 0:4e684157ecca | 109 | while(1) { |
| yamaotoko | 2:d19d83df0d15 | 110 | gram = hx711.readGram(1); //平均回数 |
| yamaotoko | 2:d19d83df0d15 | 111 | pc.printf(">%.4f,%.2f\n", gram, timeStamp.read()); //(WIP)Processingに送るデータ format: >(gram),(Time) |
| yamaotoko | 2:d19d83df0d15 | 112 | //wait_ms(10); |
| yamaotoko | 0:4e684157ecca | 113 | } |
| yamaotoko | 0:4e684157ecca | 114 | } |