Kazyoshi Morita / Mbed 2 deprecated friction_measure

Dependencies:   Dynamixel mbed

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?

UserRevisionLine numberNew 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 }