puma shijiao

Dependencies:   SDFileSystem mbed stepper

Fork of Nucleo_Ex05_SD by YX ZHANG

Committer:
AlpS1789
Date:
Fri Jul 27 06:20:54 2018 +0000
Revision:
2:676f5b6f9598
Parent:
1:d65338ce2e7c
puma shijiao

Who changed what in which revision?

UserRevisionLine numberNew contents of line
beaglescout007 0:b0a3ecd53c7d 1 #include "mbed.h"
AlpS1789 2:676f5b6f9598 2 #include "stepper.h"
beaglescout007 0:b0a3ecd53c7d 3 #include "SDFileSystem.h"
beaglescout007 0:b0a3ecd53c7d 4
zhangyx 1:d65338ce2e7c 5 // mosi, miso, sclk, name
AlpS1789 2:676f5b6f9598 6 SDFileSystem sd(PB_15, PB_14, PB_13, PB_12, "sd");
AlpS1789 2:676f5b6f9598 7
AlpS1789 2:676f5b6f9598 8
AlpS1789 2:676f5b6f9598 9 typedef enum {
AlpS1789 2:676f5b6f9598 10 PointerS,PointerW,PointerX,PointerY,PointerZ,PointerA,PointerL,PointerWW
AlpS1789 2:676f5b6f9598 11 } STATE; //定义结构体枚举类型STATE
AlpS1789 2:676f5b6f9598 12
AlpS1789 2:676f5b6f9598 13
AlpS1789 2:676f5b6f9598 14 Serial pc(PA_9, PA_10); //定义引脚
AlpS1789 2:676f5b6f9598 15 Serial bt(PB_10, PB_11);
AlpS1789 2:676f5b6f9598 16 stepperMotor motorX(PC_5, PC_4, PD_2, PC_8, 0.0002);
AlpS1789 2:676f5b6f9598 17 stepperMotor motorY(PA_5, PA_4, PA_2, PA_6, 0.0002);
AlpS1789 2:676f5b6f9598 18 stepperMotor motorZ(PC_3, PC_2, PC_13, PC_6, 0.0002);
AlpS1789 2:676f5b6f9598 19 //DigitalIn swX(PA_6);
AlpS1789 2:676f5b6f9598 20 //DigitalIn swY(PA_6);
AlpS1789 2:676f5b6f9598 21 //DigitalIn swZ(PA_6);
AlpS1789 2:676f5b6f9598 22 float X , Y , Z , A; // 定义浮点数值用以储存返回给机械臂的执行步数
AlpS1789 2:676f5b6f9598 23 const char* strX; //定义全局变量X,Y,Z,A字符串指针
AlpS1789 2:676f5b6f9598 24 const char* strY;
AlpS1789 2:676f5b6f9598 25 const char* strZ;
AlpS1789 2:676f5b6f9598 26 const char* strA;
AlpS1789 2:676f5b6f9598 27 //stringstream ss;
AlpS1789 2:676f5b6f9598 28 char buf[256];
AlpS1789 2:676f5b6f9598 29 int cur;
AlpS1789 2:676f5b6f9598 30 bool received,start;
AlpS1789 2:676f5b6f9598 31
AlpS1789 2:676f5b6f9598 32 void init() //复位函数
AlpS1789 2:676f5b6f9598 33 {
AlpS1789 2:676f5b6f9598 34 stepperMotor motorX(PC_5, PC_4, PD_2, PC_8, 0.0005);
AlpS1789 2:676f5b6f9598 35 stepperMotor motorY(PA_5, PA_4, PA_2, PA_6, 0.0005);
AlpS1789 2:676f5b6f9598 36 stepperMotor motorZ(PC_3, PC_2, PC_13, PC_6, 0.0005); //复位速度要变慢
AlpS1789 2:676f5b6f9598 37 int steps = -12000;
AlpS1789 2:676f5b6f9598 38 motorX.enable(steps);
AlpS1789 2:676f5b6f9598 39 while(motorX.remain != 0);
AlpS1789 2:676f5b6f9598 40 motorY.enable(steps);
AlpS1789 2:676f5b6f9598 41 while(motorY.remain != 0);
AlpS1789 2:676f5b6f9598 42 motorZ.enable(steps);
AlpS1789 2:676f5b6f9598 43 while(motorZ.remain != 0);
AlpS1789 2:676f5b6f9598 44 }
AlpS1789 2:676f5b6f9598 45
AlpS1789 2:676f5b6f9598 46
AlpS1789 2:676f5b6f9598 47
AlpS1789 2:676f5b6f9598 48 void btInterrupt() //中断接收函数
AlpS1789 2:676f5b6f9598 49 {
AlpS1789 2:676f5b6f9598 50 if(!bt.readable())
AlpS1789 2:676f5b6f9598 51 return;
AlpS1789 2:676f5b6f9598 52 char strRe1; //定义字符串
AlpS1789 2:676f5b6f9598 53 static STATE State = PointerS; // 初始状态待检查
AlpS1789 2:676f5b6f9598 54 strRe1 = bt.getc(); //读取一个byte数据
AlpS1789 2:676f5b6f9598 55
AlpS1789 2:676f5b6f9598 56 switch(State) {
AlpS1789 2:676f5b6f9598 57 case PointerS:
AlpS1789 2:676f5b6f9598 58 if (strRe1 == (char)'S') {
AlpS1789 2:676f5b6f9598 59 State = PointerW; //准备跳转至数据选择
AlpS1789 2:676f5b6f9598 60 cur = 0;
AlpS1789 2:676f5b6f9598 61 } else
AlpS1789 2:676f5b6f9598 62 State = PointerS;
AlpS1789 2:676f5b6f9598 63 break;
AlpS1789 2:676f5b6f9598 64 case PointerW:
AlpS1789 2:676f5b6f9598 65 switch (strRe1) {
AlpS1789 2:676f5b6f9598 66 case (char)'X':
AlpS1789 2:676f5b6f9598 67 State = PointerX;
AlpS1789 2:676f5b6f9598 68 break;
AlpS1789 2:676f5b6f9598 69 case (char)'Y':
AlpS1789 2:676f5b6f9598 70 State = PointerY;
AlpS1789 2:676f5b6f9598 71 break;
AlpS1789 2:676f5b6f9598 72 case (char)'Z':
AlpS1789 2:676f5b6f9598 73 State = PointerZ;
AlpS1789 2:676f5b6f9598 74 break;
AlpS1789 2:676f5b6f9598 75 case (char)'S':
AlpS1789 2:676f5b6f9598 76 State = PointerS;
AlpS1789 2:676f5b6f9598 77 break;
AlpS1789 2:676f5b6f9598 78 case (char)'L':
AlpS1789 2:676f5b6f9598 79 State = PointerL;
AlpS1789 2:676f5b6f9598 80 break;
AlpS1789 2:676f5b6f9598 81 case (char)'W':
AlpS1789 2:676f5b6f9598 82 State = PointerWW;
AlpS1789 2:676f5b6f9598 83 break;
AlpS1789 2:676f5b6f9598 84 case (char)'A':
AlpS1789 2:676f5b6f9598 85 State = PointerA;
AlpS1789 2:676f5b6f9598 86 break;
AlpS1789 2:676f5b6f9598 87 }
AlpS1789 2:676f5b6f9598 88 case PointerX:
AlpS1789 2:676f5b6f9598 89 if (strRe1 == (char)'\n') {
AlpS1789 2:676f5b6f9598 90 buf[cur]='\0';
AlpS1789 2:676f5b6f9598 91 pc.printf("%s\n",buf);
AlpS1789 2:676f5b6f9598 92 X = atof(buf+1);
AlpS1789 2:676f5b6f9598 93 State = PointerS;
AlpS1789 2:676f5b6f9598 94 pc.printf("%f\n",X);
AlpS1789 2:676f5b6f9598 95 } else {
AlpS1789 2:676f5b6f9598 96 buf[cur++]=strRe1;
AlpS1789 2:676f5b6f9598 97 }
AlpS1789 2:676f5b6f9598 98 break;
AlpS1789 2:676f5b6f9598 99 case PointerY:
AlpS1789 2:676f5b6f9598 100 if (strRe1 == (char)'\n') {
AlpS1789 2:676f5b6f9598 101 buf[cur]='\0';
AlpS1789 2:676f5b6f9598 102 pc.printf("%s\n",buf);
AlpS1789 2:676f5b6f9598 103 Y = atof(buf+1);
AlpS1789 2:676f5b6f9598 104 State = PointerS;
AlpS1789 2:676f5b6f9598 105 pc.printf("%f\n",Y);
AlpS1789 2:676f5b6f9598 106 } else {
AlpS1789 2:676f5b6f9598 107 buf[cur++]=strRe1;
AlpS1789 2:676f5b6f9598 108 }
AlpS1789 2:676f5b6f9598 109 break;
AlpS1789 2:676f5b6f9598 110 case PointerZ:
AlpS1789 2:676f5b6f9598 111 if (strRe1 == (char)'\n') {
AlpS1789 2:676f5b6f9598 112 buf[cur]='\0';
AlpS1789 2:676f5b6f9598 113 pc.printf("%s\n",buf);
AlpS1789 2:676f5b6f9598 114 Z = atof(buf+1);
AlpS1789 2:676f5b6f9598 115 State = PointerS;
AlpS1789 2:676f5b6f9598 116 pc.printf("%f\n",Z);
AlpS1789 2:676f5b6f9598 117 } else {
AlpS1789 2:676f5b6f9598 118 buf[cur++]=strRe1;
AlpS1789 2:676f5b6f9598 119 }
AlpS1789 2:676f5b6f9598 120 break;
AlpS1789 2:676f5b6f9598 121 case PointerA:
AlpS1789 2:676f5b6f9598 122 if (strRe1 == (char)'\n') {
AlpS1789 2:676f5b6f9598 123 buf[cur]='\0';
AlpS1789 2:676f5b6f9598 124 pc.printf("%s\n",buf);
AlpS1789 2:676f5b6f9598 125 A = atof(buf+1);
AlpS1789 2:676f5b6f9598 126 State = PointerS;
AlpS1789 2:676f5b6f9598 127 pc.printf("%f\n",A);
AlpS1789 2:676f5b6f9598 128 } else {
AlpS1789 2:676f5b6f9598 129 buf[cur++]=strRe1;
AlpS1789 2:676f5b6f9598 130 }
AlpS1789 2:676f5b6f9598 131 case PointerL:
AlpS1789 2:676f5b6f9598 132 if (strRe1 == (char)'\n') {
AlpS1789 2:676f5b6f9598 133 buf[cur]='\0';
AlpS1789 2:676f5b6f9598 134 State = PointerS;
AlpS1789 2:676f5b6f9598 135 received = true;
AlpS1789 2:676f5b6f9598 136 } else {
AlpS1789 2:676f5b6f9598 137 buf[cur++]=strRe1;
AlpS1789 2:676f5b6f9598 138 }
AlpS1789 2:676f5b6f9598 139 break;
AlpS1789 2:676f5b6f9598 140 case PointerWW:
AlpS1789 2:676f5b6f9598 141 if (strRe1 == (char)'\n') {
AlpS1789 2:676f5b6f9598 142 State = PointerS;
AlpS1789 2:676f5b6f9598 143 start = true;
AlpS1789 2:676f5b6f9598 144 } else {
AlpS1789 2:676f5b6f9598 145 }
AlpS1789 2:676f5b6f9598 146 break;
AlpS1789 2:676f5b6f9598 147 }
AlpS1789 2:676f5b6f9598 148 }
beaglescout007 0:b0a3ecd53c7d 149
beaglescout007 0:b0a3ecd53c7d 150 int main()
beaglescout007 0:b0a3ecd53c7d 151 {
AlpS1789 2:676f5b6f9598 152
AlpS1789 2:676f5b6f9598 153 // motorX.enable();
AlpS1789 2:676f5b6f9598 154 // motorY.enable();
AlpS1789 2:676f5b6f9598 155 // motorZ.enable();
AlpS1789 2:676f5b6f9598 156 // init();
AlpS1789 2:676f5b6f9598 157 pc.printf("Hello World !\n");
AlpS1789 2:676f5b6f9598 158 bt.attach(btInterrupt);
AlpS1789 2:676f5b6f9598 159 // int i = 1;
AlpS1789 2:676f5b6f9598 160
AlpS1789 2:676f5b6f9598 161
AlpS1789 2:676f5b6f9598 162 while(1) {
AlpS1789 2:676f5b6f9598 163
AlpS1789 2:676f5b6f9598 164
AlpS1789 2:676f5b6f9598 165 if(received) {
AlpS1789 2:676f5b6f9598 166 pc.printf("save %s to file\r\n",buf);
beaglescout007 0:b0a3ecd53c7d 167
AlpS1789 2:676f5b6f9598 168 // 写文件例子
AlpS1789 2:676f5b6f9598 169 FILE *fp2 = fopen("/sd/test.txt", "w");
AlpS1789 2:676f5b6f9598 170 if (fp2 == NULL)
AlpS1789 2:676f5b6f9598 171 {
AlpS1789 2:676f5b6f9598 172 printf("open error2!!\r\n");
AlpS1789 2:676f5b6f9598 173 return 1;
AlpS1789 2:676f5b6f9598 174 }
AlpS1789 2:676f5b6f9598 175 fprintf(fp2, "%s", buf);
AlpS1789 2:676f5b6f9598 176 fclose(fp2); //写完文件要记得关闭,不然可能没保存上
AlpS1789 2:676f5b6f9598 177 pc.printf("saved\r\n");
AlpS1789 2:676f5b6f9598 178 received = false;
AlpS1789 2:676f5b6f9598 179 }
AlpS1789 2:676f5b6f9598 180 if(start){
AlpS1789 2:676f5b6f9598 181
AlpS1789 2:676f5b6f9598 182
AlpS1789 2:676f5b6f9598 183 FILE *fp = fopen("/sd/test.txt", "r"); //打开文件,路径以“/sd/”开头
AlpS1789 2:676f5b6f9598 184
AlpS1789 2:676f5b6f9598 185 if (fp == NULL) //打开失败,原因可能是文件不存在,或卡没有连接好
AlpS1789 2:676f5b6f9598 186 {
AlpS1789 2:676f5b6f9598 187 printf("open error!!\r\n");
AlpS1789 2:676f5b6f9598 188 return 1;
AlpS1789 2:676f5b6f9598 189 }
AlpS1789 2:676f5b6f9598 190 fgets(buf, sizeof(buf), fp); //读入一行的C函数
AlpS1789 2:676f5b6f9598 191 pc.printf("read\r\n");
AlpS1789 2:676f5b6f9598 192 fclose(fp); //关闭文件,释放资源
zhangyx 1:d65338ce2e7c 193
AlpS1789 2:676f5b6f9598 194 pc.printf("%s\r\n",buf);
AlpS1789 2:676f5b6f9598 195 char *p = buf;
AlpS1789 2:676f5b6f9598 196 float a,x,y,z;
AlpS1789 2:676f5b6f9598 197 while(true) {
AlpS1789 2:676f5b6f9598 198 p = strchr(p, '(');
AlpS1789 2:676f5b6f9598 199 if(!p) break;
AlpS1789 2:676f5b6f9598 200 p++;
AlpS1789 2:676f5b6f9598 201 sscanf(p, "%f%f%f%f",&x,&y,&z,&a);
AlpS1789 2:676f5b6f9598 202 pc.printf("%f %f %f %f\r\n",x,y,z,a);
AlpS1789 2:676f5b6f9598 203 }
AlpS1789 2:676f5b6f9598 204 start = false;
AlpS1789 2:676f5b6f9598 205 }
zhangyx 1:d65338ce2e7c 206 }
zhangyx 1:d65338ce2e7c 207 return 0;
AlpS1789 2:676f5b6f9598 208 }