示教机械臂

Dependencies:   MQTT SDFileSystem WIZnet_Library mbed

Fork of wmx_laser_copy by w mx

Committer:
xmwmx
Date:
Tue Jul 31 12:51:28 2018 +0000
Revision:
10:acc53f50c9df
Parent:
9:a3f9faa9ca1f
Child:
11:568789ce1397
?????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
xmwmx 8:e76bebe9c45f 1 /************************************************************************************************
xmwmx 8:e76bebe9c45f 2 File name: main.cpp
xmwmx 8:e76bebe9c45f 3 Description: 项目激光部分客户端代码
xmwmx 8:e76bebe9c45f 4 Author: 秦智
xmwmx 8:e76bebe9c45f 5 Date: June 4, 2018
xmwmx 8:e76bebe9c45f 6 Others: 本程序编写在mbed平台(https://os.mbed.com/)上
xmwmx 8:e76bebe9c45f 7
xmwmx 8:e76bebe9c45f 8 *************************************************************************************************/
xmwmx 8:e76bebe9c45f 9
xmwmx 8:e76bebe9c45f 10 #include "mbed.h"
xmwmx 8:e76bebe9c45f 11 #include <math.h>
xmwmx 8:e76bebe9c45f 12 #include <cstring>
xmwmx 8:e76bebe9c45f 13 #include <stdlib.h>
xmwmx 8:e76bebe9c45f 14 #include "SDFileSystem.h"
xmwmx 8:e76bebe9c45f 15 #include "networking.h"
xmwmx 9:a3f9faa9ca1f 16
xmwmx 8:e76bebe9c45f 17
xmwmx 8:e76bebe9c45f 18
xmwmx 10:acc53f50c9df 19 typedef enum {
xmwmx 10:acc53f50c9df 20 PointerS,PointerW,PointerX,PointerY,PointerZ,PointerA,PointerL,PointerWW,PointerP
xmwmx 10:acc53f50c9df 21 } STATE; //定义结构体枚举类型STATE
xmwmx 8:e76bebe9c45f 22
xmwmx 8:e76bebe9c45f 23
xmwmx 10:acc53f50c9df 24 #define run 32000
xmwmx 10:acc53f50c9df 25 #define rad 360
xmwmx 10:acc53f50c9df 26 #define turn 1
xmwmx 10:acc53f50c9df 27
xmwmx 8:e76bebe9c45f 28 /////调试
xmwmx 8:e76bebe9c45f 29 Serial pc(PA_9, PA_10);
xmwmx 10:acc53f50c9df 30 Serial bt(PB_10, PB_11);
xmwmx 8:e76bebe9c45f 31 DigitalOut LED(PB_8);
xmwmx 8:e76bebe9c45f 32 /////
xmwmx 8:e76bebe9c45f 33
xmwmx 8:e76bebe9c45f 34 //硬件接口
xmwmx 8:e76bebe9c45f 35 // mosi, miso, sclk, cs, name
xmwmx 8:e76bebe9c45f 36 SDFileSystem sd(PB_15, PB_14, PB_13, PB_12, "sd");
xmwmx 8:e76bebe9c45f 37 //步进电机
xmwmx 10:acc53f50c9df 38 DigitalOut step[3] = {DigitalOut(PC_5), DigitalOut(PA_5),DigitalOut(PC_3)}; //0--x P9,1--y P17
xmwmx 10:acc53f50c9df 39 DigitalOut dir[3] = {DigitalOut(PC_4), DigitalOut(PA_4),DigitalOut(PC_2)}; //0--x,1--y
xmwmx 10:acc53f50c9df 40 DigitalOut en[3] = {DigitalOut(PD_2), DigitalOut(PA_2),DigitalOut(PC_13)}; //0--x,1--y
xmwmx 8:e76bebe9c45f 41 //电子开关,激光开关
xmwmx 8:e76bebe9c45f 42 DigitalOut switch_GS(PC_15);
xmwmx 8:e76bebe9c45f 43 //行程开关
xmwmx 10:acc53f50c9df 44 DigitalIn switch_pos1(PC_8); //P25
xmwmx 8:e76bebe9c45f 45 DigitalIn switch_pos2(PA_6); //P26
xmwmx 10:acc53f50c9df 46 DigitalIn switch_pos3(PC_6); //P27
xmwmx 8:e76bebe9c45f 47
xmwmx 8:e76bebe9c45f 48 //运行中的全局变量
xmwmx 8:e76bebe9c45f 49 volatile bool Working, Getawork, Isend, Dataused, Getdata;
xmwmx 10:acc53f50c9df 50 //FILE *fp_drawing;// 存储图案的文件
xmwmx 8:e76bebe9c45f 51 int status = 0; //0: 初始化; 1:建立通信; 2:等候任务; 3:等待数据 4:正在执行一个任务
xmwmx 10:acc53f50c9df 52 int now_x, now_y,now_z;
xmwmx 8:e76bebe9c45f 53 int Endoffile = 0;
xmwmx 8:e76bebe9c45f 54
xmwmx 8:e76bebe9c45f 55 // float thedata[50][3];
xmwmx 8:e76bebe9c45f 56 // char sdata[1024];
xmwmx 8:e76bebe9c45f 57 int Nofdata;
xmwmx 8:e76bebe9c45f 58 bool ifreceive;
xmwmx 8:e76bebe9c45f 59
xmwmx 8:e76bebe9c45f 60 //与实际有关参数
xmwmx 8:e76bebe9c45f 61 float Lenoflattice = 1 ;//mm 取1mm为xy单元 unit_xy/Lenoflattice=100
xmwmx 9:a3f9faa9ca1f 62 int unit_xy = 100; //单位长度(xy移动一格)对应unit_xy转 大约10cm/3圈/9600step 约96mm/9600step=0.1mm/10step
xmwmx 8:e76bebe9c45f 63 int unit_x = 103; //单位长度(xy移动一格)对应unit_x转 大约10cm/3圈/9600step 约96mm/9600step=0.1mm/10step
xmwmx 8:e76bebe9c45f 64 int unit_y = 103; //单位长度(xy移动一格)对应unit_y转 大约10cm/3圈/9600step 约96mm/9600step=0.1mm/10step
xmwmx 8:e76bebe9c45f 65 ///Ticker ticker_step;
xmwmx 8:e76bebe9c45f 66 float step_halfperiod = 0.0001;//0.0002;
xmwmx 8:e76bebe9c45f 67 int max_x, max_y;
xmwmx 8:e76bebe9c45f 68 int dir_x = 1;///调试时调整
xmwmx 8:e76bebe9c45f 69 int dir_y = 1;///调试时调整
xmwmx 10:acc53f50c9df 70 int dir_z = 1;///调试时调整
xmwmx 10:acc53f50c9df 71
xmwmx 10:acc53f50c9df 72 char buf[256];
xmwmx 10:acc53f50c9df 73 int cur;
xmwmx 10:acc53f50c9df 74 bool received;
xmwmx 10:acc53f50c9df 75 bool flagx, flagy , flagz , flaga , flagw , flagp;
xmwmx 10:acc53f50c9df 76 float X1 , X2 , Y1 , Y2 , Z , A; // 定义浮点数值用以储存返回给机械臂的执行步数
xmwmx 8:e76bebe9c45f 77
xmwmx 8:e76bebe9c45f 78 void rotate(int id ,int pix);
xmwmx 8:e76bebe9c45f 79
xmwmx 8:e76bebe9c45f 80
xmwmx 8:e76bebe9c45f 81
xmwmx 10:acc53f50c9df 82 void beginning()
xmwmx 8:e76bebe9c45f 83 {
xmwmx 10:acc53f50c9df 84 // x
xmwmx 10:acc53f50c9df 85 // ##
xmwmx 10:acc53f50c9df 86 pc.printf("y\n"); // ||
xmwmx 10:acc53f50c9df 87 while(switch_pos2.read()) // |====||=====|||#y
xmwmx 10:acc53f50c9df 88 { // ||
xmwmx 10:acc53f50c9df 89 rotate(1,-5); // ##
xmwmx 10:acc53f50c9df 90 } // z
xmwmx 10:acc53f50c9df 91 //
xmwmx 10:acc53f50c9df 92 pc.printf("z\n"); //
xmwmx 10:acc53f50c9df 93 while(switch_pos3.read()) //
xmwmx 10:acc53f50c9df 94 { //
xmwmx 10:acc53f50c9df 95 rotate(2,-5); //
xmwmx 8:e76bebe9c45f 96 } //
xmwmx 10:acc53f50c9df 97 //
xmwmx 10:acc53f50c9df 98 pc.printf("x\n"); //
xmwmx 10:acc53f50c9df 99 while(switch_pos1.read()) //
xmwmx 10:acc53f50c9df 100 { //
xmwmx 10:acc53f50c9df 101 rotate(0,-5); //
xmwmx 10:acc53f50c9df 102 }
xmwmx 10:acc53f50c9df 103
xmwmx 8:e76bebe9c45f 104 }
xmwmx 8:e76bebe9c45f 105
xmwmx 10:acc53f50c9df 106 void init_zero()
xmwmx 8:e76bebe9c45f 107 {
xmwmx 8:e76bebe9c45f 108 now_x = 0;
xmwmx 8:e76bebe9c45f 109 now_y = 0;
xmwmx 10:acc53f50c9df 110 now_z = 0;
xmwmx 10:acc53f50c9df 111 strcpy(buf,"");
xmwmx 10:acc53f50c9df 112 // step[0] = 0;
xmwmx 10:acc53f50c9df 113 // step[1] = 0;
xmwmx 10:acc53f50c9df 114 // step[2] = 0;
xmwmx 8:e76bebe9c45f 115
xmwmx 8:e76bebe9c45f 116 }
xmwmx 8:e76bebe9c45f 117 void rotate(int id, int pix) //id= 0--x,1--y pix=3200为一圈
xmwmx 8:e76bebe9c45f 118 {
xmwmx 8:e76bebe9c45f 119 if (pix >= 0) {
xmwmx 8:e76bebe9c45f 120 dir[0] = dir_x;
xmwmx 8:e76bebe9c45f 121 dir[1] = dir_y;
xmwmx 10:acc53f50c9df 122 dir[2] = dir_z;
xmwmx 8:e76bebe9c45f 123 } else {
xmwmx 8:e76bebe9c45f 124 pix = -pix;
xmwmx 8:e76bebe9c45f 125 dir[0] = 1 - dir_x;
xmwmx 8:e76bebe9c45f 126 dir[1] = 1 - dir_y;
xmwmx 10:acc53f50c9df 127 dir[2] = 1 - dir_z;
xmwmx 8:e76bebe9c45f 128 }
xmwmx 8:e76bebe9c45f 129 for (int i = 0; i < pix; i++) {
xmwmx 8:e76bebe9c45f 130 step[id] = 1;
xmwmx 8:e76bebe9c45f 131 wait(step_halfperiod);
xmwmx 8:e76bebe9c45f 132 step[id] = 0;
xmwmx 8:e76bebe9c45f 133 wait(step_halfperiod);
xmwmx 8:e76bebe9c45f 134 }
xmwmx 8:e76bebe9c45f 135 }
xmwmx 8:e76bebe9c45f 136
xmwmx 10:acc53f50c9df 137 void moveto(float x, float y,float z)
xmwmx 8:e76bebe9c45f 138 {
xmwmx 10:acc53f50c9df 139 rotate(0, (x - now_x)*run/rad);
xmwmx 10:acc53f50c9df 140 rotate(1, (y - now_y)*run/rad);
xmwmx 10:acc53f50c9df 141 rotate(2, (z - now_z)*run/rad);
xmwmx 8:e76bebe9c45f 142 now_x = x;
xmwmx 8:e76bebe9c45f 143 now_y = y;
xmwmx 10:acc53f50c9df 144 now_z = z;
xmwmx 8:e76bebe9c45f 145 }
xmwmx 10:acc53f50c9df 146
xmwmx 10:acc53f50c9df 147
xmwmx 8:e76bebe9c45f 148
xmwmx 8:e76bebe9c45f 149 void draw()
xmwmx 8:e76bebe9c45f 150 {
xmwmx 10:acc53f50c9df 151 //unit_xy=unit_xy*k;
xmwmx 10:acc53f50c9df 152 float x, y, z,a;
xmwmx 10:acc53f50c9df 153 FILE *fp_drawing = fopen("/sd/write.txt", "r");
xmwmx 8:e76bebe9c45f 154 pc.printf("reading\r\n");
xmwmx 10:acc53f50c9df 155 flagp=0;
xmwmx 10:acc53f50c9df 156 for (int i = 0; fscanf(fp_drawing, "(%f %f %f %f)", &x, &y, &z,&a) == 4&&flagp==0; i++)
xmwmx 8:e76bebe9c45f 157 {
xmwmx 10:acc53f50c9df 158 pc.printf("(%f,%f,%f)|%d\r\n", x, y, z,i);
xmwmx 10:acc53f50c9df 159 moveto(x, y,z);
xmwmx 8:e76bebe9c45f 160 // moveto(thedata[i][0],thedata[i][1]);
xmwmx 8:e76bebe9c45f 161 // markd??>ot(thedata[i][2]);
xmwmx 8:e76bebe9c45f 162 }
xmwmx 8:e76bebe9c45f 163 fclose(fp_drawing);
xmwmx 10:acc53f50c9df 164 flagw = false;
xmwmx 10:acc53f50c9df 165 flagp = false;
xmwmx 10:acc53f50c9df 166 pc.printf("Here4!\r\n");
xmwmx 8:e76bebe9c45f 167 }
xmwmx 8:e76bebe9c45f 168
xmwmx 10:acc53f50c9df 169 void btInterrupt() //中断接收函数
xmwmx 8:e76bebe9c45f 170 {
xmwmx 10:acc53f50c9df 171 if(!bt.readable())
xmwmx 10:acc53f50c9df 172 return;
xmwmx 10:acc53f50c9df 173 char strRe1; //定义字符串
xmwmx 10:acc53f50c9df 174 static STATE State = PointerS; // 初始状态待检查
xmwmx 10:acc53f50c9df 175 strRe1 = bt.getc(); //读取一个byte数据
xmwmx 10:acc53f50c9df 176
xmwmx 10:acc53f50c9df 177 switch(State)
xmwmx 10:acc53f50c9df 178 {
xmwmx 10:acc53f50c9df 179 case PointerS:
xmwmx 10:acc53f50c9df 180 if (strRe1 == (char)'S')
xmwmx 10:acc53f50c9df 181 {
xmwmx 10:acc53f50c9df 182 State = PointerW; //准备跳转至数据选择
xmwmx 10:acc53f50c9df 183 cur = 0;
xmwmx 10:acc53f50c9df 184 }
xmwmx 10:acc53f50c9df 185 else
xmwmx 10:acc53f50c9df 186 State = PointerS;
xmwmx 10:acc53f50c9df 187 break;
xmwmx 10:acc53f50c9df 188 case PointerW:
xmwmx 10:acc53f50c9df 189 switch (strRe1)
xmwmx 8:e76bebe9c45f 190 {
xmwmx 10:acc53f50c9df 191 case (char)'X':
xmwmx 10:acc53f50c9df 192 State = PointerX;
xmwmx 10:acc53f50c9df 193 break;
xmwmx 10:acc53f50c9df 194 case (char)'Y':
xmwmx 10:acc53f50c9df 195 State = PointerY;
xmwmx 10:acc53f50c9df 196 break;
xmwmx 10:acc53f50c9df 197 case (char)'Z':
xmwmx 10:acc53f50c9df 198 State = PointerZ;
xmwmx 10:acc53f50c9df 199 break;
xmwmx 10:acc53f50c9df 200 case (char)'S':
xmwmx 10:acc53f50c9df 201 State = PointerS;
xmwmx 10:acc53f50c9df 202 break;
xmwmx 10:acc53f50c9df 203 case (char)'L':
xmwmx 10:acc53f50c9df 204 State = PointerL;
xmwmx 10:acc53f50c9df 205 break;
xmwmx 10:acc53f50c9df 206 case (char)'A':
xmwmx 10:acc53f50c9df 207 State = PointerA;
xmwmx 10:acc53f50c9df 208 break;
xmwmx 10:acc53f50c9df 209 case (char)'W':
xmwmx 10:acc53f50c9df 210 State = PointerWW;
xmwmx 10:acc53f50c9df 211 break;
xmwmx 10:acc53f50c9df 212 case (char)'P':
xmwmx 10:acc53f50c9df 213 State = PointerP;
xmwmx 10:acc53f50c9df 214 break;
xmwmx 10:acc53f50c9df 215 case (char)'K':
xmwmx 10:acc53f50c9df 216 State = PointerS;
xmwmx 10:acc53f50c9df 217 pc.printf("beginning\r\n");
xmwmx 10:acc53f50c9df 218 beginning();
xmwmx 10:acc53f50c9df 219 break;
xmwmx 10:acc53f50c9df 220
xmwmx 8:e76bebe9c45f 221 }
xmwmx 10:acc53f50c9df 222 //case PointerX:
xmwmx 10:acc53f50c9df 223 // if (strRe1 == (char)'\n') {
xmwmx 10:acc53f50c9df 224 // buf[cur]='\0';
xmwmx 10:acc53f50c9df 225 // pc.printf("%s\n",buf);
xmwmx 10:acc53f50c9df 226 // X = atof(buf+1);
xmwmx 10:acc53f50c9df 227 // State = PointerS;
xmwmx 10:acc53f50c9df 228 // pc.printf("%f\n",X);
xmwmx 10:acc53f50c9df 229 // } else {
xmwmx 10:acc53f50c9df 230 // buf[cur++]=strRe1;
xmwmx 10:acc53f50c9df 231 // }
xmwmx 10:acc53f50c9df 232 // break;
xmwmx 10:acc53f50c9df 233 // case PointerY:
xmwmx 10:acc53f50c9df 234 // if (strRe1 == (char)'\n') {
xmwmx 10:acc53f50c9df 235 // buf[cur]='\0';
xmwmx 10:acc53f50c9df 236 // pc.printf("%s\n",buf);
xmwmx 10:acc53f50c9df 237 // Y = atof(buf+1);
xmwmx 10:acc53f50c9df 238 // State = PointerS;
xmwmx 10:acc53f50c9df 239 // pc.printf("%f\n",Y);
xmwmx 10:acc53f50c9df 240 // } else {
xmwmx 10:acc53f50c9df 241 // buf[cur++]=strRe1;
xmwmx 10:acc53f50c9df 242 // }
xmwmx 10:acc53f50c9df 243 // break;
xmwmx 10:acc53f50c9df 244 // case PointerZ:
xmwmx 10:acc53f50c9df 245 // if (strRe1 == (char)'\n') {
xmwmx 10:acc53f50c9df 246 // buf[cur]='\0';
xmwmx 10:acc53f50c9df 247 // pc.printf("%s\n",buf);
xmwmx 10:acc53f50c9df 248 // Z = atof(buf+1);
xmwmx 10:acc53f50c9df 249 // State = PointerS;
xmwmx 10:acc53f50c9df 250 // pc.printf("%f\n",Z);
xmwmx 10:acc53f50c9df 251 // } else {
xmwmx 10:acc53f50c9df 252 // buf[cur++]=strRe1;
xmwmx 10:acc53f50c9df 253 // }
xmwmx 10:acc53f50c9df 254 // break;
xmwmx 10:acc53f50c9df 255 case PointerX:
xmwmx 10:acc53f50c9df 256 if (strRe1 == (char)'\n')
xmwmx 10:acc53f50c9df 257 {
xmwmx 10:acc53f50c9df 258 buf[cur]='\0';
xmwmx 10:acc53f50c9df 259 pc.printf("%s\r\n",buf);
xmwmx 10:acc53f50c9df 260 X1 = atof(buf+1);
xmwmx 10:acc53f50c9df 261 State = PointerS;
xmwmx 10:acc53f50c9df 262 pc.printf("%f\r\n",X1); //32000bu = 360du
xmwmx 10:acc53f50c9df 263 flagx = true;
xmwmx 10:acc53f50c9df 264 }
xmwmx 10:acc53f50c9df 265 else
xmwmx 10:acc53f50c9df 266 {
xmwmx 10:acc53f50c9df 267 buf[cur++]=strRe1;
xmwmx 10:acc53f50c9df 268 }
xmwmx 10:acc53f50c9df 269 break;
xmwmx 10:acc53f50c9df 270 case PointerY:
xmwmx 10:acc53f50c9df 271 if (strRe1 == (char)'\n')
xmwmx 10:acc53f50c9df 272 {
xmwmx 10:acc53f50c9df 273 buf[cur]='\0';
xmwmx 10:acc53f50c9df 274 pc.printf("%s\r\n",buf);
xmwmx 10:acc53f50c9df 275 Y1 = atof(buf+1);
xmwmx 10:acc53f50c9df 276 //Y2 = Y1;
xmwmx 10:acc53f50c9df 277 // Y1 = Y2 - Y1;
xmwmx 10:acc53f50c9df 278 State = PointerS;
xmwmx 10:acc53f50c9df 279 pc.printf("%f\r\n",Y1);
xmwmx 10:acc53f50c9df 280 flagy = true;
xmwmx 10:acc53f50c9df 281 }
xmwmx 10:acc53f50c9df 282 else
xmwmx 10:acc53f50c9df 283 {
xmwmx 10:acc53f50c9df 284 buf[cur++]=strRe1;
xmwmx 10:acc53f50c9df 285 }
xmwmx 10:acc53f50c9df 286 break;
xmwmx 10:acc53f50c9df 287 case PointerZ:
xmwmx 10:acc53f50c9df 288 if (strRe1 == (char)'\n')
xmwmx 10:acc53f50c9df 289 {
xmwmx 10:acc53f50c9df 290 buf[cur]='\0';
xmwmx 10:acc53f50c9df 291 pc.printf("%s\r\n",buf);
xmwmx 10:acc53f50c9df 292 Z = atof(buf+1);
xmwmx 10:acc53f50c9df 293 State = PointerS;
xmwmx 10:acc53f50c9df 294 pc.printf("%f\r\n",Z);
xmwmx 10:acc53f50c9df 295 flagz = true;
xmwmx 10:acc53f50c9df 296 }
xmwmx 10:acc53f50c9df 297 else
xmwmx 10:acc53f50c9df 298 {
xmwmx 10:acc53f50c9df 299 buf[cur++]=strRe1;
xmwmx 10:acc53f50c9df 300 }
xmwmx 10:acc53f50c9df 301 break;
xmwmx 10:acc53f50c9df 302 case PointerA:
xmwmx 10:acc53f50c9df 303 if (strRe1 == (char)'\n')
xmwmx 10:acc53f50c9df 304 {
xmwmx 10:acc53f50c9df 305 buf[cur]='\0';
xmwmx 10:acc53f50c9df 306 pc.printf("%s\n",buf);
xmwmx 10:acc53f50c9df 307 A = atof(buf+1);
xmwmx 10:acc53f50c9df 308 State = PointerS;
xmwmx 10:acc53f50c9df 309 pc.printf("%f\n",A);
xmwmx 10:acc53f50c9df 310 }
xmwmx 10:acc53f50c9df 311 else
xmwmx 10:acc53f50c9df 312 {
xmwmx 10:acc53f50c9df 313 buf[cur++]=strRe1;
xmwmx 10:acc53f50c9df 314 }
xmwmx 10:acc53f50c9df 315 break;
xmwmx 10:acc53f50c9df 316 case PointerL:
xmwmx 10:acc53f50c9df 317 if (strRe1 == (char)'\n')
xmwmx 10:acc53f50c9df 318 {
xmwmx 10:acc53f50c9df 319 buf[cur]='\0';
xmwmx 10:acc53f50c9df 320 State = PointerS;
xmwmx 10:acc53f50c9df 321 received = true;
xmwmx 10:acc53f50c9df 322 pc.printf("received\r\n");
xmwmx 10:acc53f50c9df 323 }
xmwmx 10:acc53f50c9df 324 else
xmwmx 10:acc53f50c9df 325 {
xmwmx 10:acc53f50c9df 326 buf[cur++]=strRe1;
xmwmx 10:acc53f50c9df 327 }
xmwmx 10:acc53f50c9df 328 break;
xmwmx 10:acc53f50c9df 329 case PointerWW:
xmwmx 10:acc53f50c9df 330 flagw = true;
xmwmx 10:acc53f50c9df 331 State = PointerS;
xmwmx 10:acc53f50c9df 332 break;
xmwmx 10:acc53f50c9df 333 case PointerP:
xmwmx 10:acc53f50c9df 334 flagp = true;
xmwmx 10:acc53f50c9df 335 State = PointerS;
xmwmx 10:acc53f50c9df 336 break;
xmwmx 8:e76bebe9c45f 337 }
xmwmx 8:e76bebe9c45f 338 }
xmwmx 8:e76bebe9c45f 339
xmwmx 8:e76bebe9c45f 340 int main()
xmwmx 8:e76bebe9c45f 341 {
xmwmx 10:acc53f50c9df 342 init_zero(); //初始化
xmwmx 10:acc53f50c9df 343 bt.attach(btInterrupt);
xmwmx 10:acc53f50c9df 344 pc.printf("beginning\r\n");
xmwmx 10:acc53f50c9df 345 beginning();
xmwmx 8:e76bebe9c45f 346 pc.printf("finish\r\n");
xmwmx 10:acc53f50c9df 347 while(1) {
xmwmx 10:acc53f50c9df 348 // btInterrupt();
xmwmx 10:acc53f50c9df 349 //wait(0.1);
xmwmx 10:acc53f50c9df 350 //if (sw.read() == 0)
xmwmx 10:acc53f50c9df 351 //{
xmwmx 10:acc53f50c9df 352 // pc.printf("%s.\r\n", strX);
xmwmx 10:acc53f50c9df 353 // pc.printf("%s.\r\n", strY);
xmwmx 10:acc53f50c9df 354 // pc.printf("%s.\r\n", strZ);
xmwmx 10:acc53f50c9df 355 // pc.printf("%s.\r\n", strA);
xmwmx 10:acc53f50c9df 356 //}
xmwmx 10:acc53f50c9df 357
xmwmx 10:acc53f50c9df 358 if (flagx)
xmwmx 9:a3f9faa9ca1f 359 {
xmwmx 10:acc53f50c9df 360 moveto(X1,now_y,now_z);
xmwmx 10:acc53f50c9df 361 flagx = false;
xmwmx 9:a3f9faa9ca1f 362 }
xmwmx 10:acc53f50c9df 363 if (flagy)
xmwmx 10:acc53f50c9df 364 {
xmwmx 10:acc53f50c9df 365 moveto(now_x,Y1,now_z);
xmwmx 10:acc53f50c9df 366 flagy = false;
xmwmx 10:acc53f50c9df 367 }
xmwmx 10:acc53f50c9df 368 if (flagz)
xmwmx 10:acc53f50c9df 369 {
xmwmx 10:acc53f50c9df 370 moveto(now_x,now_y,Z);
xmwmx 10:acc53f50c9df 371 flagz = false;
xmwmx 10:acc53f50c9df 372 }
xmwmx 10:acc53f50c9df 373 if(flagw)
xmwmx 9:a3f9faa9ca1f 374 {
xmwmx 10:acc53f50c9df 375
xmwmx 10:acc53f50c9df 376
xmwmx 10:acc53f50c9df 377 FILE *fp = fopen("/sd/write.txt", "r"); //打开文件,路径以“/sd/”开头
xmwmx 10:acc53f50c9df 378
xmwmx 10:acc53f50c9df 379 if (fp == NULL) //打开失败,原因可能是文件不存在,或卡没有连接好
xmwmx 10:acc53f50c9df 380 {
xmwmx 10:acc53f50c9df 381 printf("open error!!\r\n");
xmwmx 10:acc53f50c9df 382 return 1;
xmwmx 8:e76bebe9c45f 383 }
xmwmx 10:acc53f50c9df 384 fgets(buf, sizeof(buf), fp); //读入一行的C函数
xmwmx 10:acc53f50c9df 385 pc.printf("read\r\n");
xmwmx 10:acc53f50c9df 386 fclose(fp); //关闭文件,释放资源
xmwmx 10:acc53f50c9df 387
xmwmx 10:acc53f50c9df 388 pc.printf("%s\r\n",buf);
xmwmx 10:acc53f50c9df 389 char *p = buf;
xmwmx 10:acc53f50c9df 390 float a,x,y,z;
xmwmx 10:acc53f50c9df 391 while(true)
xmwmx 9:a3f9faa9ca1f 392 {
xmwmx 10:acc53f50c9df 393 p = strchr(p, '(');
xmwmx 10:acc53f50c9df 394 if(!p) break;
xmwmx 10:acc53f50c9df 395 p++;
xmwmx 10:acc53f50c9df 396 sscanf(p, "%f%f%f%f",&x,&y,&z,&a);
xmwmx 10:acc53f50c9df 397 pc.printf("%f %f %f %f\r\n",x,y,z,a);
xmwmx 10:acc53f50c9df 398 moveto(x,y,z);
xmwmx 10:acc53f50c9df 399 wait(0.5);
xmwmx 9:a3f9faa9ca1f 400 }
xmwmx 10:acc53f50c9df 401 flagw = false;
xmwmx 10:acc53f50c9df 402 pc.printf("%d\r\n",flagw);
xmwmx 10:acc53f50c9df 403 }
xmwmx 10:acc53f50c9df 404 /*if (flagw)
xmwmx 10:acc53f50c9df 405 {
xmwmx 10:acc53f50c9df 406 //if (Arr[][] !=
xmwmx 10:acc53f50c9df 407 //{
xmwmx 10:acc53f50c9df 408 pc.printf("Here1!\r\n");
xmwmx 10:acc53f50c9df 409
xmwmx 10:acc53f50c9df 410 pc.printf("Here2!\r\n");
xmwmx 10:acc53f50c9df 411 init_zero();
xmwmx 10:acc53f50c9df 412 beginning();
xmwmx 10:acc53f50c9df 413 draw();
xmwmx 10:acc53f50c9df 414 pc.printf("Here3!\r\n");
xmwmx 10:acc53f50c9df 415 //}
xmwmx 10:acc53f50c9df 416 } */
xmwmx 10:acc53f50c9df 417 if(received)
xmwmx 8:e76bebe9c45f 418 {
xmwmx 10:acc53f50c9df 419 pc.printf("%s\r\n",buf);
xmwmx 10:acc53f50c9df 420 FILE *fp_drawing = fopen("/sd/write.txt", "w");
xmwmx 10:acc53f50c9df 421 pc.printf("opening\r\n");
xmwmx 10:acc53f50c9df 422 if (fp_drawing == NULL)
xmwmx 10:acc53f50c9df 423 {
xmwmx 10:acc53f50c9df 424 printf("open error2!!\r\n");
xmwmx 10:acc53f50c9df 425 return 1;
xmwmx 10:acc53f50c9df 426 }
xmwmx 10:acc53f50c9df 427 fprintf(fp_drawing, "%s",buf);
xmwmx 10:acc53f50c9df 428 pc.printf("close\r\n");
xmwmx 10:acc53f50c9df 429 fclose(fp_drawing);
xmwmx 10:acc53f50c9df 430 pc.printf("write end");
xmwmx 10:acc53f50c9df 431 received = false;
xmwmx 8:e76bebe9c45f 432 }
xmwmx 8:e76bebe9c45f 433 }
xmwmx 10:acc53f50c9df 434
xmwmx 8:e76bebe9c45f 435 }