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@1:f43ebe88228e, 2018-09-07 (annotated)
- Committer:
- yamaotoko
- Date:
- Fri Sep 07 15:52:16 2018 +0000
- Revision:
- 1:f43ebe88228e
- Parent:
- 0:4e684157ecca
- Child:
- 2:d19d83df0d15
WIP0.2
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 | 0:4e684157ecca | 5 | HX711 hx711(p21, p22); |
| 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 | 0:4e684157ecca | 9 | |
| 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 | 0:4e684157ecca | 15 | printf("place the weight and put any key\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 | 0:4e684157ecca | 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 | 1:f43ebe88228e | 67 | char *p; |
| yamaotoko | 1:f43ebe88228e | 68 | break; |
| yamaotoko | 1:f43ebe88228e | 69 | |
| yamaotoko | 1:f43ebe88228e | 70 | default: |
| yamaotoko | 1:f43ebe88228e | 71 | break; |
| yamaotoko | 1:f43ebe88228e | 72 | } |
| yamaotoko | 1:f43ebe88228e | 73 | } |
| yamaotoko | 1:f43ebe88228e | 74 | |
| yamaotoko | 0:4e684157ecca | 75 | int main() { |
| yamaotoko | 1:f43ebe88228e | 76 | pc.baud(115200); |
| yamaotoko | 0:4e684157ecca | 77 | //ホイールモードにするための設定 |
| yamaotoko | 0:4e684157ecca | 78 | motor.setAngleLimit(0, ADDRESS_CW_ANGLE_LIMIT); |
| yamaotoko | 0:4e684157ecca | 79 | motor.setAngleLimit(0, ADDRESS_CCW_ANGLE_LIMIT); |
| yamaotoko | 1:f43ebe88228e | 80 | |
| yamaotoko | 1:f43ebe88228e | 81 | float gram = 0; |
| yamaotoko | 1:f43ebe88228e | 82 | hx711.setScale(1.f); |
| yamaotoko | 1:f43ebe88228e | 83 | hx711.tare(); |
| yamaotoko | 1:f43ebe88228e | 84 | |
| yamaotoko | 1:f43ebe88228e | 85 | timeStamp.reset(); |
| yamaotoko | 1:f43ebe88228e | 86 | |
| yamaotoko | 0:4e684157ecca | 87 | while(1) { |
| yamaotoko | 1:f43ebe88228e | 88 | gram = hx711.readGram(3); //平均回数 |
| yamaotoko | 1:f43ebe88228e | 89 | pc.printf(">%f,%f\n", gram, timeStamp.read()); //(WIP)Processingに送るデータ format: >(gram),(Time) |
| yamaotoko | 0:4e684157ecca | 90 | } |
| yamaotoko | 0:4e684157ecca | 91 | } |