Mbed基板エンコーダ読み取り基板

Dependencies:   mbed

Committer:
Waaaaat
Date:
Wed Aug 22 13:41:41 2018 +0000
Revision:
0:e2d42e66534c
encoder board mbed;

Who changed what in which revision?

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