
puma shijiao
Dependencies: SDFileSystem mbed stepper
Fork of Nucleo_Ex05_SD by
main.cpp@2:676f5b6f9598, 2018-07-27 (annotated)
- 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?
User | Revision | Line number | New 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 | } |