Rui Watanabe
/
encoder_board
Mbed基板エンコーダ読み取り基板
main.cpp@0:e2d42e66534c, 2018-08-22 (annotated)
- Committer:
- Waaaaat
- Date:
- Wed Aug 22 13:41:41 2018 +0000
- Revision:
- 0:e2d42e66534c
encoder board mbed;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Waaaaat | 0:e2d42e66534c | 1 | #include "mbed.h" |
Waaaaat | 0:e2d42e66534c | 2 | #include"QEI.h" |
Waaaaat | 0:e2d42e66534c | 3 | #include"I2CSlave.h" |
Waaaaat | 0:e2d42e66534c | 4 | |
Waaaaat | 0:e2d42e66534c | 5 | #define ROTATE_PER_REVOLUTIONS 2048 //エンコーダ分解能 |
Waaaaat | 0:e2d42e66534c | 6 | |
Waaaaat | 0:e2d42e66534c | 7 | // エンコーダ読み取りピン |
Waaaaat | 0:e2d42e66534c | 8 | #define CHANNNEL1_A D2 |
Waaaaat | 0:e2d42e66534c | 9 | #define CHANNNEL1_B D3 |
Waaaaat | 0:e2d42e66534c | 10 | |
Waaaaat | 0:e2d42e66534c | 11 | #define CHANNNEL2_A D7 |
Waaaaat | 0:e2d42e66534c | 12 | #define CHANNNEL2_B D6 |
Waaaaat | 0:e2d42e66534c | 13 | |
Waaaaat | 0:e2d42e66534c | 14 | #define CHANNNEL3_A D8 |
Waaaaat | 0:e2d42e66534c | 15 | #define CHANNNEL3_B D9 |
Waaaaat | 0:e2d42e66534c | 16 | |
Waaaaat | 0:e2d42e66534c | 17 | #define CHANNNEL4_A D10 |
Waaaaat | 0:e2d42e66534c | 18 | #define CHANNNEL4_B D11 |
Waaaaat | 0:e2d42e66534c | 19 | |
Waaaaat | 0:e2d42e66534c | 20 | //i2c |
Waaaaat | 0:e2d42e66534c | 21 | #define SDA D4 |
Waaaaat | 0:e2d42e66534c | 22 | #define SCL D5 |
Waaaaat | 0:e2d42e66534c | 23 | |
Waaaaat | 0:e2d42e66534c | 24 | #define ADDR 0x02 //i2cアドレス |
Waaaaat | 0:e2d42e66534c | 25 | |
Waaaaat | 0:e2d42e66534c | 26 | //inputにセット |
Waaaaat | 0:e2d42e66534c | 27 | DigitalIn Ch1A(CHANNNEL1_A),Ch1B(CHANNNEL1_B); |
Waaaaat | 0:e2d42e66534c | 28 | DigitalIn Ch2A(CHANNNEL2_A),Ch2B(CHANNNEL2_B); |
Waaaaat | 0:e2d42e66534c | 29 | DigitalIn Ch3A(CHANNNEL3_A),Ch3B(CHANNNEL3_B); |
Waaaaat | 0:e2d42e66534c | 30 | DigitalIn Ch4A(CHANNNEL4_A),Ch4B(CHANNNEL4_B); |
Waaaaat | 0:e2d42e66534c | 31 | |
Waaaaat | 0:e2d42e66534c | 32 | Serial pc(USBTX, USBRX); |
Waaaaat | 0:e2d42e66534c | 33 | I2CSlave slave(SDA,SCL); |
Waaaaat | 0:e2d42e66534c | 34 | |
Waaaaat | 0:e2d42e66534c | 35 | QEI enc1(CHANNNEL1_A,CHANNNEL1_B,NC,ROTATE_PER_REVOLUTIONS); |
Waaaaat | 0:e2d42e66534c | 36 | QEI enc2(CHANNNEL2_A,CHANNNEL2_B,NC,ROTATE_PER_REVOLUTIONS); |
Waaaaat | 0:e2d42e66534c | 37 | QEI enc3(CHANNNEL3_A,CHANNNEL3_B,NC,ROTATE_PER_REVOLUTIONS); |
Waaaaat | 0:e2d42e66534c | 38 | QEI enc4(CHANNNEL4_A,CHANNNEL4_B,NC,ROTATE_PER_REVOLUTIONS); |
Waaaaat | 0:e2d42e66534c | 39 | |
Waaaaat | 0:e2d42e66534c | 40 | void setup(){ |
Waaaaat | 0:e2d42e66534c | 41 | |
Waaaaat | 0:e2d42e66534c | 42 | enc1.reset(); |
Waaaaat | 0:e2d42e66534c | 43 | enc2.reset(); |
Waaaaat | 0:e2d42e66534c | 44 | enc3.reset(); |
Waaaaat | 0:e2d42e66534c | 45 | enc4.reset(); |
Waaaaat | 0:e2d42e66534c | 46 | |
Waaaaat | 0:e2d42e66534c | 47 | Ch1A.mode(PullUp); |
Waaaaat | 0:e2d42e66534c | 48 | Ch1B.mode(PullUp); |
Waaaaat | 0:e2d42e66534c | 49 | Ch2A.mode(PullUp); |
Waaaaat | 0:e2d42e66534c | 50 | Ch2B.mode(PullUp); |
Waaaaat | 0:e2d42e66534c | 51 | Ch3A.mode(PullUp); |
Waaaaat | 0:e2d42e66534c | 52 | Ch3B.mode(PullUp); |
Waaaaat | 0:e2d42e66534c | 53 | Ch4A.mode(PullUp); |
Waaaaat | 0:e2d42e66534c | 54 | Ch4B.mode(PullUp); |
Waaaaat | 0:e2d42e66534c | 55 | } |
Waaaaat | 0:e2d42e66534c | 56 | int main(){ |
Waaaaat | 0:e2d42e66534c | 57 | |
Waaaaat | 0:e2d42e66534c | 58 | setup(); |
Waaaaat | 0:e2d42e66534c | 59 | slave.frequency(400000); |
Waaaaat | 0:e2d42e66534c | 60 | slave.address(ADDR); |
Waaaaat | 0:e2d42e66534c | 61 | |
Waaaaat | 0:e2d42e66534c | 62 | static long enc1Data,enc2Data,enc3Data,enc4Data; |
Waaaaat | 0:e2d42e66534c | 63 | |
Waaaaat | 0:e2d42e66534c | 64 | char buf[16]; |
Waaaaat | 0:e2d42e66534c | 65 | |
Waaaaat | 0:e2d42e66534c | 66 | while(1) { |
Waaaaat | 0:e2d42e66534c | 67 | |
Waaaaat | 0:e2d42e66534c | 68 | int i=slave.receive(); |
Waaaaat | 0:e2d42e66534c | 69 | |
Waaaaat | 0:e2d42e66534c | 70 | enc1Data=enc1.getPulses(); |
Waaaaat | 0:e2d42e66534c | 71 | enc2Data=-enc2.getPulses(); |
Waaaaat | 0:e2d42e66534c | 72 | enc3Data=enc3.getPulses(); |
Waaaaat | 0:e2d42e66534c | 73 | enc4Data=enc4.getPulses(); |
Waaaaat | 0:e2d42e66534c | 74 | |
Waaaaat | 0:e2d42e66534c | 75 | buf[0]=enc1Data>>24 & 0x00ff; |
Waaaaat | 0:e2d42e66534c | 76 | buf[1]=enc1Data>>16 & 0x00ff; |
Waaaaat | 0:e2d42e66534c | 77 | buf[2]=enc1Data>>8 & 0x00ff; |
Waaaaat | 0:e2d42e66534c | 78 | buf[3]=enc1Data & 0x00ff; |
Waaaaat | 0:e2d42e66534c | 79 | |
Waaaaat | 0:e2d42e66534c | 80 | buf[4]=enc2Data>>24 & 0x00ff; |
Waaaaat | 0:e2d42e66534c | 81 | buf[5]=enc2Data>>16 & 0x00ff; |
Waaaaat | 0:e2d42e66534c | 82 | buf[6]=enc2Data>>8 & 0x00ff; |
Waaaaat | 0:e2d42e66534c | 83 | buf[7]=enc2Data & 0x00ff; |
Waaaaat | 0:e2d42e66534c | 84 | |
Waaaaat | 0:e2d42e66534c | 85 | buf[8]=enc3Data>>24 & 0x00ff; |
Waaaaat | 0:e2d42e66534c | 86 | buf[9]=enc3Data>>16 & 0x00ff; |
Waaaaat | 0:e2d42e66534c | 87 | buf[10]=enc3Data>>8 & 0x00ff; |
Waaaaat | 0:e2d42e66534c | 88 | buf[11]=enc3Data & 0x00ff; |
Waaaaat | 0:e2d42e66534c | 89 | |
Waaaaat | 0:e2d42e66534c | 90 | buf[12]=enc4Data>>24 & 0x00ff; |
Waaaaat | 0:e2d42e66534c | 91 | buf[13]=enc4Data>>16 & 0x00ff; |
Waaaaat | 0:e2d42e66534c | 92 | buf[14]=enc4Data>>8 & 0x00ff; |
Waaaaat | 0:e2d42e66534c | 93 | buf[15]=enc4Data & 0x00ff; |
Waaaaat | 0:e2d42e66534c | 94 | |
Waaaaat | 0:e2d42e66534c | 95 | pc.printf("%d %d %d %d\n",enc1Data,enc2Data,enc3Data,enc4Data); |
Waaaaat | 0:e2d42e66534c | 96 | |
Waaaaat | 0:e2d42e66534c | 97 | //マスターからのリクエストが来た際にデータを送信 |
Waaaaat | 0:e2d42e66534c | 98 | if(i==I2CSlave::ReadAddressed){ |
Waaaaat | 0:e2d42e66534c | 99 | slave.write(buf,16); |
Waaaaat | 0:e2d42e66534c | 100 | } |
Waaaaat | 0:e2d42e66534c | 101 | } |
Waaaaat | 0:e2d42e66534c | 102 | } |