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@2:d19d83df0d15, 2018-09-15 (annotated)
- Committer:
- yamaotoko
- Date:
- Sat Sep 15 06:30:49 2018 +0000
- Revision:
- 2:d19d83df0d15
- Parent:
- 1:f43ebe88228e
- Child:
- 3:1bceed8a22d0
???alpha
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 | 1:f43ebe88228e | 28 | if(speed >= 0) |
| yamaotoko | 1:f43ebe88228e | 29 | motor.setSpeed(speed); |
| yamaotoko | 1:f43ebe88228e | 30 | else{ |
| yamaotoko | 1:f43ebe88228e | 31 | motor.setSpeed(-1*speed+1024); //11bitのうちMSBが符号 |
| yamaotoko | 1:f43ebe88228e | 32 | } |
| yamaotoko | 1:f43ebe88228e | 33 | } |
| yamaotoko | 1:f43ebe88228e | 34 | |
| yamaotoko | 1:f43ebe88228e | 35 | //シリアル受信時 |
| yamaotoko | 1:f43ebe88228e | 36 | void pc_rx(){ |
| yamaotoko | 1:f43ebe88228e | 37 | char c = pc.getc(); //P5からの入力 |
| yamaotoko | 1:f43ebe88228e | 38 | |
| yamaotoko | 1:f43ebe88228e | 39 | switch(c){ |
| yamaotoko | 1:f43ebe88228e | 40 | case 'c': //キャリブレーション |
| yamaotoko | 1:f43ebe88228e | 41 | calibrate(50.0); |
| yamaotoko | 1:f43ebe88228e | 42 | break; |
| yamaotoko | 1:f43ebe88228e | 43 | case 's': //計測開始 |
| yamaotoko | 1:f43ebe88228e | 44 | timeStamp.reset(); |
| yamaotoko | 1:f43ebe88228e | 45 | move(-20); //(WIP) |
| yamaotoko | 1:f43ebe88228e | 46 | timeStamp.start(); |
| yamaotoko | 1:f43ebe88228e | 47 | break; |
| yamaotoko | 1:f43ebe88228e | 48 | case 'e': //計測終了 |
| yamaotoko | 1:f43ebe88228e | 49 | move(0); //(WIP) |
| yamaotoko | 1:f43ebe88228e | 50 | timeStamp.stop(); |
| yamaotoko | 1:f43ebe88228e | 51 | break; |
| yamaotoko | 1:f43ebe88228e | 52 | case 'z': //ゼロ点オフセット |
| yamaotoko | 1:f43ebe88228e | 53 | hx711.tare(); |
| yamaotoko | 1:f43ebe88228e | 54 | break; |
| yamaotoko | 1:f43ebe88228e | 55 | case 'l': //モータ左回転 |
| yamaotoko | 1:f43ebe88228e | 56 | move(-20); //(WIP) |
| yamaotoko | 1:f43ebe88228e | 57 | break; |
| yamaotoko | 1:f43ebe88228e | 58 | case 'r': //モータ右回転 |
| yamaotoko | 1:f43ebe88228e | 59 | move(20); //(WIP) |
| yamaotoko | 1:f43ebe88228e | 60 | break; |
| yamaotoko | 1:f43ebe88228e | 61 | case 'q': //モータ停止 |
| yamaotoko | 1:f43ebe88228e | 62 | move(0); |
| yamaotoko | 1:f43ebe88228e | 63 | break; |
| yamaotoko | 1:f43ebe88228e | 64 | |
| yamaotoko | 1:f43ebe88228e | 65 | case 'm': //モータ速度設定 |
| yamaotoko | 1:f43ebe88228e | 66 | char val_buf[20]; //数値受信用バッファ |
| yamaotoko | 2:d19d83df0d15 | 67 | char rx_data; //シリアル受信 |
| yamaotoko | 2:d19d83df0d15 | 68 | motorspeed = 0; //モータ速度を一旦初期化 |
| yamaotoko | 2:d19d83df0d15 | 69 | int i=0; |
| yamaotoko | 2:d19d83df0d15 | 70 | do{ |
| yamaotoko | 2:d19d83df0d15 | 71 | rx_data = pc.getc(); //数値を取得 |
| yamaotoko | 2:d19d83df0d15 | 72 | val_buf[i] = rx_data; //1文字を文字列に格納 |
| yamaotoko | 2:d19d83df0d15 | 73 | i++; |
| yamaotoko | 2:d19d83df0d15 | 74 | }while(rx_data != ';'); //入力終了コマンド";"がきたら終了 |
| yamaotoko | 2:d19d83df0d15 | 75 | i=0; |
| yamaotoko | 2:d19d83df0d15 | 76 | while(val_buf[i] != ';'){ |
| yamaotoko | 2:d19d83df0d15 | 77 | //int型に変換 |
| yamaotoko | 2:d19d83df0d15 | 78 | motorspeed *= 10; |
| yamaotoko | 2:d19d83df0d15 | 79 | motorspeed += (val_buf[i] - '0'); |
| yamaotoko | 2:d19d83df0d15 | 80 | i++; |
| yamaotoko | 2:d19d83df0d15 | 81 | } |
| yamaotoko | 2:d19d83df0d15 | 82 | pc.printf("%d\n", motorspeed); |
| yamaotoko | 2:d19d83df0d15 | 83 | //WIP |
| yamaotoko | 1:f43ebe88228e | 84 | break; |
| yamaotoko | 1:f43ebe88228e | 85 | |
| yamaotoko | 1:f43ebe88228e | 86 | default: |
| yamaotoko | 2:d19d83df0d15 | 87 | pc.printf("fuck %c\n", c); |
| yamaotoko | 1:f43ebe88228e | 88 | break; |
| yamaotoko | 1:f43ebe88228e | 89 | } |
| yamaotoko | 1:f43ebe88228e | 90 | } |
| yamaotoko | 1:f43ebe88228e | 91 | |
| yamaotoko | 0:4e684157ecca | 92 | int main() { |
| yamaotoko | 2:d19d83df0d15 | 93 | pc.attach(pc_rx, Serial::RxIrq); |
| yamaotoko | 1:f43ebe88228e | 94 | pc.baud(115200); |
| yamaotoko | 0:4e684157ecca | 95 | //ホイールモードにするための設定 |
| yamaotoko | 0:4e684157ecca | 96 | motor.setAngleLimit(0, ADDRESS_CW_ANGLE_LIMIT); |
| yamaotoko | 0:4e684157ecca | 97 | motor.setAngleLimit(0, ADDRESS_CCW_ANGLE_LIMIT); |
| yamaotoko | 2:d19d83df0d15 | 98 | move(0); |
| yamaotoko | 1:f43ebe88228e | 99 | |
| yamaotoko | 1:f43ebe88228e | 100 | float gram = 0; |
| yamaotoko | 1:f43ebe88228e | 101 | hx711.setScale(1.f); |
| yamaotoko | 1:f43ebe88228e | 102 | hx711.tare(); |
| yamaotoko | 1:f43ebe88228e | 103 | |
| yamaotoko | 1:f43ebe88228e | 104 | timeStamp.reset(); |
| yamaotoko | 1:f43ebe88228e | 105 | |
| yamaotoko | 0:4e684157ecca | 106 | while(1) { |
| yamaotoko | 2:d19d83df0d15 | 107 | gram = hx711.readGram(1); //平均回数 |
| yamaotoko | 2:d19d83df0d15 | 108 | pc.printf(">%.4f,%.2f\n", gram, timeStamp.read()); //(WIP)Processingに送るデータ format: >(gram),(Time) |
| yamaotoko | 2:d19d83df0d15 | 109 | //wait_ms(10); |
| yamaotoko | 0:4e684157ecca | 110 | } |
| yamaotoko | 0:4e684157ecca | 111 | } |