MCP3204をSTM303K8T6で同時に6個使ってみた

Dependencies:   mbed 24LC1025 MCP3204

Committer:
sashida_h
Date:
Wed Aug 05 06:44:23 2020 +0000
Revision:
2:133b3bf22850
Parent:
1:717563cb9070
Child:
3:99c659d89698
/180deg /3axis

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sashida_h 0:c38491379a28 1 #include "mbed.h"
sashida_h 0:c38491379a28 2 #include "MCP3204.h"
sashida_h 0:c38491379a28 3
sashida_h 1:717563cb9070 4 Serial pc(PA_2, PA_3, 115200); //pin19,20 TX,RX
sashida_h 2:133b3bf22850 5 CAN can(PA_11, PA_12,100000); //pin21,22 rd,td
sashida_h 0:c38491379a28 6 SPI spi(PA_7, PA_6, PA_5);
sashida_h 2:133b3bf22850 7 MCP3204 mcp1(spi,PB_0); //下z-
sashida_h 2:133b3bf22850 8 MCP3204 mcp2(spi,PB_1); //右x+
sashida_h 2:133b3bf22850 9 MCP3204 mcp3(spi,PB_3); //左x-
sashida_h 2:133b3bf22850 10 MCP3204 mcp4(spi,PA_8); // 前y+
sashida_h 2:133b3bf22850 11 MCP3204 mcp5(spi,PA_10); //上z+
sashida_h 2:133b3bf22850 12 MCP3204 mcp6(spi,PF_0); //後y-
sashida_h 1:717563cb9070 13
sashida_h 2:133b3bf22850 14 CANMessage msg;
sashida_h 1:717563cb9070 15
sashida_h 1:717563cb9070 16 #define T 0.03
sashida_h 0:c38491379a28 17
sashida_h 2:133b3bf22850 18 union Float2Byte{
sashida_h 2:133b3bf22850 19 float _float;
sashida_h 2:133b3bf22850 20 char _byte[4];
sashida_h 2:133b3bf22850 21 };
sashida_h 2:133b3bf22850 22 typedef union Float2Byte Float2Byte;
sashida_h 2:133b3bf22850 23
sashida_h 2:133b3bf22850 24 void send(float senddata,int id){
sashida_h 2:133b3bf22850 25 //pc.printf("Master send()\n\r");
sashida_h 2:133b3bf22850 26
sashida_h 2:133b3bf22850 27 /*ID: 0x01*/
sashida_h 2:133b3bf22850 28 Float2Byte sendFloat;
sashida_h 2:133b3bf22850 29 sendFloat._float = senddata;
sashida_h 2:133b3bf22850 30 //ここに送りたい値を入れる.
sashida_h 2:133b3bf22850 31
sashida_h 2:133b3bf22850 32 char serialData[4];
sashida_h 2:133b3bf22850 33 for(int i=0;i<4;++i){
sashida_h 2:133b3bf22850 34 serialData[i] = sendFloat._byte[i];
sashida_h 2:133b3bf22850 35 //pc.printf("send_char: %d\n\r", serialData[i]);
sashida_h 2:133b3bf22850 36 }
sashida_h 2:133b3bf22850 37 //pc.printf("sendFloat: %f\n\r", sendFloat._float);
sashida_h 2:133b3bf22850 38 if(can.write(CANMessage(id, serialData, 4))){
sashida_h 2:133b3bf22850 39 //pc.printf("Send.\n\r");
sashida_h 2:133b3bf22850 40 }
sashida_h 2:133b3bf22850 41 }
sashida_h 2:133b3bf22850 42
sashida_h 2:133b3bf22850 43 void receive(){
sashida_h 2:133b3bf22850 44 Float2Byte getFloat;
sashida_h 2:133b3bf22850 45
sashida_h 2:133b3bf22850 46 if(can.read(msg)){
sashida_h 2:133b3bf22850 47 /*ID: 0x01*/
sashida_h 2:133b3bf22850 48 if(msg.id == 0x01){
sashida_h 2:133b3bf22850 49 //pc.printf("ID: 0x01\n\r");
sashida_h 2:133b3bf22850 50 for(int i=0;i<4;++i){
sashida_h 2:133b3bf22850 51 getFloat._byte[i] = msg.data[i];
sashida_h 2:133b3bf22850 52 //pc.printf("get_char: %d\n\r", getFloat._byte[i]);
sashida_h 2:133b3bf22850 53 }
sashida_h 2:133b3bf22850 54 pc.printf("world_time:%.2f\r\n", getFloat._float);
sashida_h 2:133b3bf22850 55 }
sashida_h 2:133b3bf22850 56
sashida_h 2:133b3bf22850 57 if(msg.id == 0x03){
sashida_h 2:133b3bf22850 58 //pc.printf("ID: 0x01\n\r");
sashida_h 2:133b3bf22850 59 for(int i=0;i<4;++i){
sashida_h 2:133b3bf22850 60 getFloat._byte[i] = msg.data[i];
sashida_h 2:133b3bf22850 61 //pc.printf("get_char: %d\n\r", getFloat._byte[i]);
sashida_h 2:133b3bf22850 62 }
sashida_h 2:133b3bf22850 63 pc.printf("ID0x03:%.2f\r\n", getFloat._float);
sashida_h 2:133b3bf22850 64 }
sashida_h 2:133b3bf22850 65 }
sashida_h 2:133b3bf22850 66
sashida_h 2:133b3bf22850 67 }
sashida_h 2:133b3bf22850 68
sashida_h 0:c38491379a28 69 int main(){
sashida_h 1:717563cb9070 70 int adc1[4],adc2[4],adc3[4],adc4[4],adc5[4],adc6[4];
sashida_h 2:133b3bf22850 71 int i,j,cnt;
sashida_h 2:133b3bf22850 72 float ave[6],buff;
sashida_h 0:c38491379a28 73
sashida_h 2:133b3bf22850 74 can.attach(receive, CAN::RxIrq);
sashida_h 0:c38491379a28 75 pc.printf("Hello world\r\n");
sashida_h 0:c38491379a28 76 wait(1.0);
sashida_h 0:c38491379a28 77
sashida_h 0:c38491379a28 78 while(1){
sashida_h 1:717563cb9070 79 adc1[0] = mcp1.sgl( CH0 );
sashida_h 1:717563cb9070 80 adc1[1] = mcp1.sgl( CH1 );
sashida_h 1:717563cb9070 81 adc1[2] = mcp1.sgl( CH2 );
sashida_h 1:717563cb9070 82 adc1[3] = mcp1.sgl( CH3 );
sashida_h 2:133b3bf22850 83 for(i=0;i<4-1;i++){
sashida_h 2:133b3bf22850 84 for(j=1;j<4-i;j++){
sashida_h 2:133b3bf22850 85 if(adc1[j-1] > adc1[j]){
sashida_h 2:133b3bf22850 86 buff = adc1[j-1];
sashida_h 2:133b3bf22850 87 adc1[j-1] = adc1[j];
sashida_h 2:133b3bf22850 88 adc1[j] = buff;
sashida_h 2:133b3bf22850 89 }
sashida_h 2:133b3bf22850 90 }
sashida_h 2:133b3bf22850 91 }
sashida_h 2:133b3bf22850 92 //pc.printf("%d,%d,%d,%d\r\n",adc1[0],adc1[1],adc1[2],adc1[3]);
sashida_h 2:133b3bf22850 93 ave[0] = (adc1[1] + adc1[2])/2.0 + 120.0;
sashida_h 1:717563cb9070 94
sashida_h 1:717563cb9070 95 adc2[0] = mcp2.sgl( CH0 );
sashida_h 1:717563cb9070 96 adc2[1] = mcp2.sgl( CH1 );
sashida_h 1:717563cb9070 97 adc2[2] = mcp2.sgl( CH2 );
sashida_h 1:717563cb9070 98 adc2[3] = mcp2.sgl( CH3 );
sashida_h 2:133b3bf22850 99 for(i=0;i<4-1;i++){
sashida_h 2:133b3bf22850 100 for(j=1;j<4-i;j++){
sashida_h 2:133b3bf22850 101 if(adc2[j-1] > adc2[j]){
sashida_h 2:133b3bf22850 102 buff = adc2[j-1];
sashida_h 2:133b3bf22850 103 adc2[j-1] = adc2[j];
sashida_h 2:133b3bf22850 104 adc2[j] = buff;
sashida_h 2:133b3bf22850 105 }
sashida_h 2:133b3bf22850 106 }
sashida_h 2:133b3bf22850 107 }
sashida_h 2:133b3bf22850 108 //pc.printf("%d,%d,%d,%d\r\n",adc1[0],adc1[1],adc1[2],adc1[3]);
sashida_h 2:133b3bf22850 109 ave[1] = (adc2[1] + adc2[2])/2.0;
sashida_h 1:717563cb9070 110
sashida_h 1:717563cb9070 111 adc3[0] = mcp3.sgl( CH0 );
sashida_h 1:717563cb9070 112 adc3[1] = mcp3.sgl( CH1 );
sashida_h 1:717563cb9070 113 adc3[2] = mcp3.sgl( CH2 );
sashida_h 1:717563cb9070 114 adc3[3] = mcp3.sgl( CH3 );
sashida_h 2:133b3bf22850 115 for(i=0;i<4-1;i++){
sashida_h 2:133b3bf22850 116 for(j=1;j<4-i;j++){
sashida_h 2:133b3bf22850 117 if(adc3[j-1] > adc3[j]){
sashida_h 2:133b3bf22850 118 buff = adc3[j-1];
sashida_h 2:133b3bf22850 119 adc3[j-1] = adc3[j];
sashida_h 2:133b3bf22850 120 adc3[j] = buff;
sashida_h 2:133b3bf22850 121 }
sashida_h 2:133b3bf22850 122 }
sashida_h 2:133b3bf22850 123 }
sashida_h 2:133b3bf22850 124 //pc.printf("%d,%d,%d,%d\r\n",adc1[0],adc1[1],adc1[2],adc1[3]);
sashida_h 2:133b3bf22850 125 ave[2] = (adc3[1] + adc3[2])/2.0 + 70.0;
sashida_h 1:717563cb9070 126
sashida_h 1:717563cb9070 127 adc4[0] = mcp4.sgl( CH0 );
sashida_h 1:717563cb9070 128 adc4[1] = mcp4.sgl( CH1 );
sashida_h 1:717563cb9070 129 adc4[2] = mcp4.sgl( CH2 );
sashida_h 1:717563cb9070 130 adc4[3] = mcp4.sgl( CH3 );
sashida_h 2:133b3bf22850 131 for(i=0;i<4-1;i++){
sashida_h 2:133b3bf22850 132 for(j=1;j<4-i;j++){
sashida_h 2:133b3bf22850 133 if(adc4[j-1] > adc4[j]){
sashida_h 2:133b3bf22850 134 buff = adc4[j-1];
sashida_h 2:133b3bf22850 135 adc4[j-1] = adc4[j];
sashida_h 2:133b3bf22850 136 adc4[j] = buff;
sashida_h 2:133b3bf22850 137 }
sashida_h 2:133b3bf22850 138 }
sashida_h 2:133b3bf22850 139 }
sashida_h 2:133b3bf22850 140 //pc.printf("%d,%d,%d,%d\r\n",adc1[0],adc1[1],adc1[2],adc1[3]);
sashida_h 2:133b3bf22850 141 ave[3] = (adc4[1] + adc4[2])/2.0 + 55.0;
sashida_h 1:717563cb9070 142
sashida_h 1:717563cb9070 143 adc5[0] = mcp5.sgl( CH0 );
sashida_h 1:717563cb9070 144 adc5[1] = mcp5.sgl( CH1 );
sashida_h 1:717563cb9070 145 adc5[2] = mcp5.sgl( CH2 );
sashida_h 1:717563cb9070 146 adc5[3] = mcp5.sgl( CH3 );
sashida_h 2:133b3bf22850 147 for(i=0;i<4-1;i++){
sashida_h 2:133b3bf22850 148 for(j=1;j<4-i;j++){
sashida_h 2:133b3bf22850 149 if(adc5[j-1] > adc5[j]){
sashida_h 2:133b3bf22850 150 buff = adc5[j-1];
sashida_h 2:133b3bf22850 151 adc5[j-1] = adc5[j];
sashida_h 2:133b3bf22850 152 adc5[j] = buff;
sashida_h 2:133b3bf22850 153 }
sashida_h 2:133b3bf22850 154 }
sashida_h 2:133b3bf22850 155 }
sashida_h 2:133b3bf22850 156 //pc.printf("%d,%d,%d,%d\r\n",adc1[0],adc1[1],adc1[2],adc1[3]);
sashida_h 2:133b3bf22850 157 ave[4] = (adc5[1] + adc5[2])/2.0;
sashida_h 1:717563cb9070 158
sashida_h 1:717563cb9070 159 adc6[0] = mcp6.sgl( CH0 );
sashida_h 1:717563cb9070 160 adc6[1] = mcp6.sgl( CH1 );
sashida_h 1:717563cb9070 161 adc6[2] = mcp6.sgl( CH2 );
sashida_h 1:717563cb9070 162 adc6[3] = mcp6.sgl( CH3 );
sashida_h 2:133b3bf22850 163 for(i=0;i<4-1;i++){
sashida_h 2:133b3bf22850 164 for(j=1;j<4-i;j++){
sashida_h 2:133b3bf22850 165 if(adc6[j-1] > adc6[j]){
sashida_h 2:133b3bf22850 166 buff = adc6[j-1];
sashida_h 2:133b3bf22850 167 adc6[j-1] = adc6[j];
sashida_h 2:133b3bf22850 168 adc6[j] = buff;
sashida_h 2:133b3bf22850 169 }
sashida_h 2:133b3bf22850 170 }
sashida_h 2:133b3bf22850 171 }
sashida_h 2:133b3bf22850 172 //pc.printf("%d,%d,%d,%d\r\n",adc1[0],adc1[1],adc1[2],adc1[3]);
sashida_h 2:133b3bf22850 173 ave[5] = (adc6[1] + adc6[2])/2.0 - 100.0;
sashida_h 1:717563cb9070 174
sashida_h 1:717563cb9070 175 /*
sashida_h 1:717563cb9070 176 pc.printf("1");
sashida_h 1:717563cb9070 177 for(i=0; i<4; i++){
sashida_h 1:717563cb9070 178 //pc.printf("CH%d:%d\r\n",i,adc1[i]);
sashida_h 1:717563cb9070 179 pc.printf(",%d",adc1[i]);
sashida_h 0:c38491379a28 180 }
sashida_h 1:717563cb9070 181 pc.printf(",%.1f\r\n", ave1);
sashida_h 1:717563cb9070 182
sashida_h 1:717563cb9070 183 pc.printf("2");
sashida_h 1:717563cb9070 184 for(i=0; i<4; i++){
sashida_h 1:717563cb9070 185 //pc.printf("CH%d:%d\r\n",i,adc1[i]);
sashida_h 1:717563cb9070 186 pc.printf(",%d",adc2[i]);
sashida_h 1:717563cb9070 187 }
sashida_h 1:717563cb9070 188 pc.printf(",%.1f\r\n", ave2);
sashida_h 1:717563cb9070 189
sashida_h 1:717563cb9070 190 pc.printf("3");
sashida_h 1:717563cb9070 191 for(i=0; i<4; i++){
sashida_h 1:717563cb9070 192 //pc.printf("CH%d:%d\r\n",i,adc1[i]);
sashida_h 1:717563cb9070 193 pc.printf(",%d",adc3[i]);
sashida_h 1:717563cb9070 194 }
sashida_h 1:717563cb9070 195 pc.printf(",%.1f\r\n", ave3);
sashida_h 1:717563cb9070 196
sashida_h 1:717563cb9070 197 pc.printf("4");
sashida_h 1:717563cb9070 198 for(i=0; i<4; i++){
sashida_h 1:717563cb9070 199 //pc.printf("CH%d:%d\r\n",i,adc1[i]);
sashida_h 1:717563cb9070 200 pc.printf(",%d",adc4[i]);
sashida_h 1:717563cb9070 201 }
sashida_h 1:717563cb9070 202 pc.printf(",%.1f\r\n", ave4);
sashida_h 1:717563cb9070 203
sashida_h 1:717563cb9070 204 pc.printf("5");
sashida_h 1:717563cb9070 205 for(i=0; i<4; i++){
sashida_h 1:717563cb9070 206 //pc.printf("CH%d:%d\r\n",i,adc1[i]);
sashida_h 1:717563cb9070 207 pc.printf(",%d",adc5[i]);
sashida_h 1:717563cb9070 208 }
sashida_h 1:717563cb9070 209 pc.printf(",%.1f\r\n", ave5);
sashida_h 1:717563cb9070 210
sashida_h 1:717563cb9070 211 pc.printf("6");
sashida_h 1:717563cb9070 212 for(i=0; i<4; i++){
sashida_h 1:717563cb9070 213 //pc.printf("CH%d:%d\r\n",i,adc1[i]);
sashida_h 1:717563cb9070 214 pc.printf(",%d",adc6[i]);
sashida_h 1:717563cb9070 215 }
sashida_h 1:717563cb9070 216 pc.printf(",%.1f\r\n", ave6);
sashida_h 1:717563cb9070 217 */
sashida_h 1:717563cb9070 218
sashida_h 2:133b3bf22850 219 cnt = 0;
sashida_h 2:133b3bf22850 220 if(ave[1] < ave[2] && ave[3] > ave[5] && ave[4] < ave[0])pc.printf("x:0,y:0,z:0\r\n");
sashida_h 2:133b3bf22850 221 //else if(ave[1] < ave[2] && ave[3] < ave[5] && ave[4] < ave[0])pc.printf("x:90,y:0,z:0\r\n");
sashida_h 2:133b3bf22850 222 else if(ave[1] < ave[2] && ave[3] < ave[5] && ave[4] > ave[0])pc.printf("x:180,y:0,z:0\r\n");
sashida_h 2:133b3bf22850 223 //else if(ave[1] < ave[2] && ave[3] > ave[5] && ave[4] > ave[0])pc.printf("x:270,y:0,z:0\r\n");
sashida_h 2:133b3bf22850 224
sashida_h 2:133b3bf22850 225 else if(ave[1] < ave[2] && ave[3] > ave[5] && ave[4] < ave[0])pc.printf("x:0,y:0,z:0\r\n");
sashida_h 2:133b3bf22850 226 //else if(ave[1] < ave[2] && ave[3] < ave[5] && ave[4] < ave[0])pc.printf("x:0,y:0,z:90\r\n");
sashida_h 2:133b3bf22850 227 else if(ave[1] > ave[2] && ave[3] < ave[5] && ave[4] < ave[0])pc.printf("x:0,y:0,z:180\r\n");
sashida_h 2:133b3bf22850 228 //else if(ave[1] > ave[2] && ave[3] > ave[5] && ave[4] < ave[0])pc.printf("x:0,y:0,z:270\r\n");
sashida_h 2:133b3bf22850 229
sashida_h 2:133b3bf22850 230 else if(ave[1] < ave[2] && ave[3] > ave[5] && ave[4] < ave[0])pc.printf("x:0,y:0,z:0\r\n");
sashida_h 2:133b3bf22850 231 //else if(ave[1] < ave[2] && ave[3] > ave[5] && ave[4] > ave[0])pc.printf("x:0,y:90,z:0\r\n");
sashida_h 2:133b3bf22850 232 else if(ave[1] > ave[2] && ave[3] > ave[5] && ave[4] > ave[0])pc.printf("x:0,y:180,z:0\r\n");
sashida_h 2:133b3bf22850 233 //else if(ave[1] > ave[2] && ave[3] > ave[5] && ave[4] > ave[0])pc.printf("x:0,y:270,z:0\r\n");
sashida_h 2:133b3bf22850 234
sashida_h 2:133b3bf22850 235 else pc.printf("none\r\n");
sashida_h 2:133b3bf22850 236
sashida_h 2:133b3bf22850 237
sashida_h 2:133b3bf22850 238
sashida_h 2:133b3bf22850 239 pc.printf("%.1f,%.1f,%.1f,%.1f,%.1f,%.1f\r\n",ave[1],ave[2],ave[3],ave[5],ave[4],ave[0]);
sashida_h 2:133b3bf22850 240
sashida_h 1:717563cb9070 241
sashida_h 0:c38491379a28 242 wait(0.5);
sashida_h 0:c38491379a28 243 }
sashida_h 1:717563cb9070 244
sashida_h 0:c38491379a28 245 }
sashida_h 0:c38491379a28 246
sashida_h 0:c38491379a28 247 /*
sashida_h 0:c38491379a28 248 int main(){
sashida_h 0:c38491379a28 249 int adc[4];
sashida_h 0:c38491379a28 250 int i;
sashida_h 0:c38491379a28 251
sashida_h 0:c38491379a28 252 pc.printf("Hello world\r\n");
sashida_h 0:c38491379a28 253 wait(1.0);
sashida_h 0:c38491379a28 254
sashida_h 0:c38491379a28 255 while(1){
sashida_h 0:c38491379a28 256 adc[0] = mcp.sgl( CH0 );
sashida_h 0:c38491379a28 257 adc[1] = mcp.sgl( CH1 );
sashida_h 0:c38491379a28 258 adc[2] = mcp.sgl( CH2 );
sashida_h 0:c38491379a28 259 adc[3] = mcp.sgl( CH3 );
sashida_h 0:c38491379a28 260 for(i=0; i<4; i++){
sashida_h 0:c38491379a28 261 pc.printf("CH%d:%d\r\n",i,adc[i]);
sashida_h 0:c38491379a28 262 }
sashida_h 0:c38491379a28 263 wait(0.5);
sashida_h 0:c38491379a28 264 }
sashida_h 0:c38491379a28 265
sashida_h 0:c38491379a28 266 }
sashida_h 0:c38491379a28 267 */