收到xy自动缩放

Dependencies:   MQTT SDFileSystem WIZnet_Library mbed

Fork of wmx_laser by w mx

Committer:
xmwmx
Date:
Fri Aug 03 09:45:20 2018 +0000
Revision:
10:3c154d398def
Parent:
9:a3f9faa9ca1f
?????????

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 //#include <string>
xmwmx 9:a3f9faa9ca1f 17
xmwmx 8:e76bebe9c45f 18
xmwmx 8:e76bebe9c45f 19
xmwmx 9:a3f9faa9ca1f 20 #define edgex1 125 // 上x(正朝向开关)下y(负朝向开关)
xmwmx 9:a3f9faa9ca1f 21 #define edgex2 155 // __
xmwmx 9:a3f9faa9ca1f 22 #define edgey1 70 // ||
xmwmx 9:a3f9faa9ca1f 23 #define edgey2 100 // 125mm y2
xmwmx 9:a3f9faa9ca1f 24 #define widthx 30 // x2 || x1
xmwmx 9:a3f9faa9ca1f 25 #define widthy 30 // //=====210mm====//35mm/|开关
xmwmx 8:e76bebe9c45f 26 #define mm 100//100步1mm // ||
xmwmx 8:e76bebe9c45f 27 // ||
xmwmx 8:e76bebe9c45f 28 // ||
xmwmx 8:e76bebe9c45f 29 // __ y1
xmwmx 8:e76bebe9c45f 30 //
xmwmx 8:e76bebe9c45f 31 // -- 开关 15mm
xmwmx 8:e76bebe9c45f 32
xmwmx 8:e76bebe9c45f 33
xmwmx 8:e76bebe9c45f 34 /////调试
xmwmx 8:e76bebe9c45f 35 Serial pc(PA_9, PA_10);
xmwmx 8:e76bebe9c45f 36 DigitalOut LED(PB_8);
xmwmx 8:e76bebe9c45f 37 /////
xmwmx 8:e76bebe9c45f 38
xmwmx 8:e76bebe9c45f 39 //硬件接口
xmwmx 8:e76bebe9c45f 40 // mosi, miso, sclk, cs, name
xmwmx 8:e76bebe9c45f 41 SDFileSystem sd(PB_15, PB_14, PB_13, PB_12, "sd");
xmwmx 8:e76bebe9c45f 42 //步进电机
xmwmx 8:e76bebe9c45f 43 DigitalOut step[2] = {DigitalOut(PC_5), DigitalOut(PA_5)}; //0--x P9,1--y P17
xmwmx 8:e76bebe9c45f 44 DigitalOut dir[2] = {DigitalOut(PC_4), DigitalOut(PA_4)}; //0--x,1--y
xmwmx 8:e76bebe9c45f 45 DigitalOut en[2] = {DigitalOut(PD_2), DigitalOut(PA_2)}; //0--x,1--y
xmwmx 8:e76bebe9c45f 46 //电子开关,激光开关
xmwmx 8:e76bebe9c45f 47 DigitalOut switch_GS(PC_15);
xmwmx 8:e76bebe9c45f 48 //行程开关
xmwmx 8:e76bebe9c45f 49 DigitalIn switch_pos1(PC_8); //P25
xmwmx 8:e76bebe9c45f 50 DigitalIn switch_pos2(PA_6); //P26
xmwmx 8:e76bebe9c45f 51 DigitalIn switch_pos3(PA_11); //P27
xmwmx 8:e76bebe9c45f 52
xmwmx 8:e76bebe9c45f 53 //运行中的全局变量
xmwmx 8:e76bebe9c45f 54 volatile bool Working, Getawork, Isend, Dataused, Getdata;
xmwmx 8:e76bebe9c45f 55 FILE *fp_drawing; // 存储图案的文件
xmwmx 8:e76bebe9c45f 56 int status = 0; //0: 初始化; 1:建立通信; 2:等候任务; 3:等待数据 4:正在执行一个任务
xmwmx 8:e76bebe9c45f 57 int now_x, now_y;
xmwmx 8:e76bebe9c45f 58 int Endoffile = 0;
xmwmx 8:e76bebe9c45f 59
xmwmx 8:e76bebe9c45f 60 // float thedata[50][3];
xmwmx 8:e76bebe9c45f 61 // char sdata[1024];
xmwmx 8:e76bebe9c45f 62 int Nofdata;
xmwmx 8:e76bebe9c45f 63 bool ifreceive;
xmwmx 8:e76bebe9c45f 64
xmwmx 8:e76bebe9c45f 65 //与实际有关参数
xmwmx 8:e76bebe9c45f 66 float Lenoflattice = 1 ;//mm 取1mm为xy单元 unit_xy/Lenoflattice=100
xmwmx 9:a3f9faa9ca1f 67 int unit_xy = 100; //单位长度(xy移动一格)对应unit_xy转 大约10cm/3圈/9600step 约96mm/9600step=0.1mm/10step
xmwmx 8:e76bebe9c45f 68 int unit_x = 103; //单位长度(xy移动一格)对应unit_x转 大约10cm/3圈/9600step 约96mm/9600step=0.1mm/10step
xmwmx 8:e76bebe9c45f 69 int unit_y = 103; //单位长度(xy移动一格)对应unit_y转 大约10cm/3圈/9600step 约96mm/9600step=0.1mm/10step
xmwmx 8:e76bebe9c45f 70 ///Ticker ticker_step;
xmwmx 8:e76bebe9c45f 71 float step_halfperiod = 0.0001;//0.0002;
xmwmx 8:e76bebe9c45f 72 int max_x, max_y;
xmwmx 8:e76bebe9c45f 73 int dir_x = 1;///调试时调整
xmwmx 8:e76bebe9c45f 74 int dir_y = 1;///调试时调整
xmwmx 8:e76bebe9c45f 75 int dot_max = 30; //灰度最大值对应多少次激光点击
xmwmx 8:e76bebe9c45f 76 float dot_last = 0.005; //每次激光点击持续多久
xmwmx 8:e76bebe9c45f 77 int H_max = 255; //灰度值最大值
xmwmx 8:e76bebe9c45f 78 double k = 1.0; //缩放比例
xmwmx 8:e76bebe9c45f 79 double y=0;//图片y边长
xmwmx 8:e76bebe9c45f 80 double x=0;//图片x边长
xmwmx 8:e76bebe9c45f 81 int key=0;//判断变量
xmwmx 9:a3f9faa9ca1f 82 int dot=0;//点计数
xmwmx 9:a3f9faa9ca1f 83 int flag=0;
xmwmx 10:3c154d398def 84 int numbers[100][3];
xmwmx 10:3c154d398def 85 //char buf[100];
xmwmx 10:3c154d398def 86
xmwmx 8:e76bebe9c45f 87
xmwmx 8:e76bebe9c45f 88 void rotate(int id ,int pix);
xmwmx 8:e76bebe9c45f 89
xmwmx 8:e76bebe9c45f 90
xmwmx 8:e76bebe9c45f 91
xmwmx 8:e76bebe9c45f 92 void biginning()
xmwmx 8:e76bebe9c45f 93 {
xmwmx 8:e76bebe9c45f 94 pc.printf("x\n"); // 上x(正朝向开关)下y(负朝向开关)
xmwmx 8:e76bebe9c45f 95 while(!switch_pos1.read()) // __ y2
xmwmx 8:e76bebe9c45f 96 { // ||
xmwmx 8:e76bebe9c45f 97 rotate(0,5); // 115mm
xmwmx 8:e76bebe9c45f 98 } // x2 || x1
xmwmx 8:e76bebe9c45f 99 rotate(0,-mm*edgex2); // //=====200mm====//42mm/|开关
xmwmx 8:e76bebe9c45f 100 pc.printf("y\n"); // ||
xmwmx 8:e76bebe9c45f 101 while(!switch_pos2.read()) // ||
xmwmx 8:e76bebe9c45f 102 { // ||
xmwmx 8:e76bebe9c45f 103 rotate(1,-5); // __ y1
xmwmx 8:e76bebe9c45f 104 } //
xmwmx 8:e76bebe9c45f 105 rotate(1,mm*edgey1); // __ 开关 15mm
xmwmx 9:a3f9faa9ca1f 106 //定位
xmwmx 9:a3f9faa9ca1f 107 for (int i = 0; i < 500; i++)
xmwmx 9:a3f9faa9ca1f 108 {
xmwmx 9:a3f9faa9ca1f 109 switch_GS = 1;
xmwmx 9:a3f9faa9ca1f 110 wait(0.005);
xmwmx 9:a3f9faa9ca1f 111 switch_GS = 0;
xmwmx 9:a3f9faa9ca1f 112 wait(0.005);
xmwmx 9:a3f9faa9ca1f 113 }
xmwmx 8:e76bebe9c45f 114 //走轮廓
xmwmx 8:e76bebe9c45f 115 rotate(0,mm*widthx);
xmwmx 8:e76bebe9c45f 116 rotate(1,mm*widthy);
xmwmx 8:e76bebe9c45f 117 rotate(0,mm*-widthx);
xmwmx 8:e76bebe9c45f 118 rotate(1,mm*-widthy);
xmwmx 8:e76bebe9c45f 119 }
xmwmx 8:e76bebe9c45f 120
xmwmx 8:e76bebe9c45f 121 void report()
xmwmx 8:e76bebe9c45f 122 {
xmwmx 8:e76bebe9c45f 123 // ser2usb.printf("-1- status: %d \r\n", status);
xmwmx 8:e76bebe9c45f 124 // ser2usb.printf("-2- now_x: %d now_y: %d \r\n", now_x,now_y);
xmwmx 8:e76bebe9c45f 125 //ser2usb.printf("-3- switch_GS: %i \r\n", switch_GS.read());
xmwmx 8:e76bebe9c45f 126 //ser2usb.printf("-4- switch_pos1: %i switch_pos2: %i switch_pos3: %i \r\n", switch_pos1.read(),switch_pos2.read(),switch_pos3.read());
xmwmx 8:e76bebe9c45f 127 //ser2usb.printf("-5- en[0]: %i en[1]: %i \r\n", en[0].read(),en[1].read());
xmwmx 8:e76bebe9c45f 128 //ser2usb.printf("-6- dir[0]: %i dir[1]: %i \r\n", dir[0].read(),dir[1].read());
xmwmx 8:e76bebe9c45f 129 //ser2usb.printf("-7- step[0]: %i step[1]: %i \r\n", step[0].read(),step[1].read());
xmwmx 8:e76bebe9c45f 130 }
xmwmx 8:e76bebe9c45f 131
xmwmx 8:e76bebe9c45f 132 void init()
xmwmx 8:e76bebe9c45f 133 {
xmwmx 8:e76bebe9c45f 134 status = 0;
xmwmx 8:e76bebe9c45f 135 now_x = 0;
xmwmx 8:e76bebe9c45f 136 now_y = 0;
xmwmx 8:e76bebe9c45f 137 step[0] = 0;
xmwmx 8:e76bebe9c45f 138 step[1] = 0;
xmwmx 10:3c154d398def 139 //memset(buf,0,sizeof(buf)/sizeof(char));
xmwmx 8:e76bebe9c45f 140 //上x下y
xmwmx 8:e76bebe9c45f 141
xmwmx 8:e76bebe9c45f 142 }
xmwmx 8:e76bebe9c45f 143 void rotate(int id, int pix) //id= 0--x,1--y pix=3200为一圈
xmwmx 8:e76bebe9c45f 144 {
xmwmx 8:e76bebe9c45f 145 if (pix >= 0) {
xmwmx 8:e76bebe9c45f 146 dir[0] = dir_x;
xmwmx 8:e76bebe9c45f 147 dir[1] = dir_y;
xmwmx 8:e76bebe9c45f 148 } else {
xmwmx 8:e76bebe9c45f 149 pix = -pix;
xmwmx 8:e76bebe9c45f 150 dir[0] = 1 - dir_x;
xmwmx 8:e76bebe9c45f 151 dir[1] = 1 - dir_y;
xmwmx 8:e76bebe9c45f 152 }
xmwmx 8:e76bebe9c45f 153 for (int i = 0; i < pix; i++) {
xmwmx 8:e76bebe9c45f 154 step[id] = 1;
xmwmx 8:e76bebe9c45f 155 wait(step_halfperiod);
xmwmx 8:e76bebe9c45f 156 step[id] = 0;
xmwmx 8:e76bebe9c45f 157 wait(step_halfperiod);
xmwmx 8:e76bebe9c45f 158 }
xmwmx 8:e76bebe9c45f 159 }
xmwmx 8:e76bebe9c45f 160
xmwmx 8:e76bebe9c45f 161 void moveto(float x, float y)
xmwmx 8:e76bebe9c45f 162 {
xmwmx 8:e76bebe9c45f 163 rotate(0, (x - now_x)*unit_xy);
xmwmx 8:e76bebe9c45f 164 rotate(1, (y - now_y)*unit_xy);
xmwmx 8:e76bebe9c45f 165 now_x = x;
xmwmx 8:e76bebe9c45f 166 now_y = y;
xmwmx 8:e76bebe9c45f 167 }
xmwmx 8:e76bebe9c45f 168 void fuwei()
xmwmx 8:e76bebe9c45f 169 {
xmwmx 8:e76bebe9c45f 170 moveto(0, 0);
xmwmx 8:e76bebe9c45f 171 status = 1;
xmwmx 8:e76bebe9c45f 172 }
xmwmx 8:e76bebe9c45f 173 void markdot(float value)
xmwmx 8:e76bebe9c45f 174 {
xmwmx 8:e76bebe9c45f 175 //switch_GS=1;
xmwmx 8:e76bebe9c45f 176 int Ndot = floor(value * dot_max / H_max);
xmwmx 8:e76bebe9c45f 177 for (int i = 0; i < Ndot; i++) {
xmwmx 8:e76bebe9c45f 178 switch_GS = 1;
xmwmx 8:e76bebe9c45f 179 wait(dot_last);
xmwmx 8:e76bebe9c45f 180 switch_GS = 0;
xmwmx 8:e76bebe9c45f 181 }
xmwmx 8:e76bebe9c45f 182 }
xmwmx 8:e76bebe9c45f 183 /*
xmwmx 8:e76bebe9c45f 184 void dealdata(){
xmwmx 8:e76bebe9c45f 185 ser2usb.printf("getdata: %s \r\n",sdata);
xmwmx 8:e76bebe9c45f 186 int data_size = 0;//strlen(pch);
xmwmx 8:e76bebe9c45f 187 char * pch;
xmwmx 8:e76bebe9c45f 188 pch = strtok (sdata,"\r\n ,.-)(");
xmwmx 8:e76bebe9c45f 189 while (pch != NULL)
xmwmx 8:e76bebe9c45f 190 {
xmwmx 8:e76bebe9c45f 191 thedata[data_size/3][data_size%3]=atof(pch);
xmwmx 8:e76bebe9c45f 192 pch = strtok (NULL, "\r\n ,.-)(");
xmwmx 8:e76bebe9c45f 193 data_size++;
xmwmx 8:e76bebe9c45f 194 }
xmwmx 8:e76bebe9c45f 195 Nofdata = (data_size)/3;
xmwmx 8:e76bebe9c45f 196 }
xmwmx 8:e76bebe9c45f 197 void usbprintdata(){
xmwmx 8:e76bebe9c45f 198 ser2usb.printf("dealdata: \r\n <<<<<<<<<<<<<<<<");
xmwmx 8:e76bebe9c45f 199 for(int i=0;i<Nofdata;i++){
xmwmx 8:e76bebe9c45f 200 ser2usb.printf("<<< i: %i x: %f y: %f v: %f \r\n",i,thedata[i][0],thedata[i][1],thedata[i][2]);
xmwmx 8:e76bebe9c45f 201 }
xmwmx 8:e76bebe9c45f 202 ser2usb.printf("dealdata done! \r\n >>>>>>>>>>>>");
xmwmx 8:e76bebe9c45f 203 }
xmwmx 8:e76bebe9c45f 204 */
xmwmx 8:e76bebe9c45f 205
xmwmx 10:3c154d398def 206 void str2numbers(char buf[])
xmwmx 10:3c154d398def 207 {
xmwmx 10:3c154d398def 208 pc.printf("%s\r\n",buf);
xmwmx 10:3c154d398def 209 char *p = buf;
xmwmx 10:3c154d398def 210 int index = 0;
xmwmx 10:3c154d398def 211 int x,y,z;
xmwmx 10:3c154d398def 212 while(true)
xmwmx 10:3c154d398def 213 {
xmwmx 10:3c154d398def 214 p = strchr(p, '(');
xmwmx 10:3c154d398def 215 if(!p) break;
xmwmx 10:3c154d398def 216 p++;
xmwmx 10:3c154d398def 217 sscanf(p, "%d%d%d",&x,&y,&z);
xmwmx 10:3c154d398def 218 pc.printf("%d %d %d \r\n",x,y,z);
xmwmx 10:3c154d398def 219 numbers[index][0] = x;
xmwmx 10:3c154d398def 220 numbers[index][1] = y;
xmwmx 10:3c154d398def 221 numbers[index][2] = z;
xmwmx 10:3c154d398def 222 index++;
xmwmx 10:3c154d398def 223 }
xmwmx 10:3c154d398def 224 }
xmwmx 10:3c154d398def 225
xmwmx 8:e76bebe9c45f 226 void draw()
xmwmx 8:e76bebe9c45f 227 {
xmwmx 8:e76bebe9c45f 228 unit_xy=unit_xy*k;
xmwmx 8:e76bebe9c45f 229 float x, y, v;
xmwmx 8:e76bebe9c45f 230 fp_drawing = fopen("/sd/write.txt", "r");
xmwmx 8:e76bebe9c45f 231 pc.printf("reading\r\n");
xmwmx 8:e76bebe9c45f 232 for (int i = 0; fscanf(fp_drawing, "(%f,%f,%f)", &x, &y, &v) == 3; i++)
xmwmx 8:e76bebe9c45f 233 {
xmwmx 9:a3f9faa9ca1f 234 pc.printf("(%f,%f,%f)|%d|%d\r\n", x, y, v,i,dot);
xmwmx 8:e76bebe9c45f 235 moveto(x, y);
xmwmx 8:e76bebe9c45f 236 markdot(v);
xmwmx 8:e76bebe9c45f 237 // moveto(thedata[i][0],thedata[i][1]);
xmwmx 8:e76bebe9c45f 238 // markd??>ot(thedata[i][2]);
xmwmx 8:e76bebe9c45f 239 }
xmwmx 8:e76bebe9c45f 240 fclose(fp_drawing);
xmwmx 8:e76bebe9c45f 241 }
xmwmx 8:e76bebe9c45f 242
xmwmx 8:e76bebe9c45f 243 void on_control_cmd(const char* actuator_name, const char* control_value)
xmwmx 8:e76bebe9c45f 244 {
xmwmx 8:e76bebe9c45f 245 //pc.printf("Received [%s] [%s]\r\n", actuator_name, control_value);
xmwmx 9:a3f9faa9ca1f 246 if (strcmp(actuator_name, "dat") == 0) {
xmwmx 8:e76bebe9c45f 247 //接受到的坐标数据写入存储卡
xmwmx 10:3c154d398def 248 /*
xmwmx 10:3c154d398def 249 if(dot<10)
xmwmx 10:3c154d398def 250 {
xmwmx 10:3c154d398def 251 strcpy(buf,control_value);
xmwmx 10:3c154d398def 252 dot++;
xmwmx 10:3c154d398def 253 pc.printf("received %d|%d|%s\r\n",status,dot,buf);
xmwmx 10:3c154d398def 254 }
xmwmx 10:3c154d398def 255 else
xmwmx 10:3c154d398def 256 {
xmwmx 10:3c154d398def 257 fprintf(fp_drawing, "%s", buf);
xmwmx 10:3c154d398def 258 memset(buf,0,sizeof(buf)/sizeof(char));
xmwmx 10:3c154d398def 259 dot=0;
xmwmx 10:3c154d398def 260 strcpy(buf,control_value);
xmwmx 10:3c154d398def 261 dot++;
xmwmx 10:3c154d398def 262 flag=1;
xmwmx 10:3c154d398def 263 pc.printf("received. %d|%d|%s\r\n",status,dot,buf);
xmwmx 10:3c154d398def 264 }
xmwmx 10:3c154d398def 265 */
xmwmx 9:a3f9faa9ca1f 266 //fprintf(fp_drawing, "%s", control_value);
xmwmx 10:3c154d398def 267 //str2numbers(control_value);
xmwmx 10:3c154d398def 268 pc.printf("received %d|%d\r\n",status,dot);
xmwmx 8:e76bebe9c45f 269 fprintf(fp_drawing, "%s", control_value);
xmwmx 9:a3f9faa9ca1f 270 dot++;
xmwmx 10:3c154d398def 271 flag=1;
xmwmx 10:3c154d398def 272 pc.printf("received %d|%d\r\n",status,dot);
xmwmx 10:3c154d398def 273
xmwmx 8:e76bebe9c45f 274 }
xmwmx 10:3c154d398def 275 else if (strcmp(actuator_name, "command") == 0) {
xmwmx 8:e76bebe9c45f 276 int the_command = atoi(control_value);
xmwmx 8:e76bebe9c45f 277 //
xmwmx 8:e76bebe9c45f 278 if(key!=0)
xmwmx 8:e76bebe9c45f 279 {
xmwmx 8:e76bebe9c45f 280 if (key==1) {
xmwmx 8:e76bebe9c45f 281 k=the_command*0.1;
xmwmx 8:e76bebe9c45f 282 pc.printf("Received k %f\n",k);
xmwmx 8:e76bebe9c45f 283
xmwmx 8:e76bebe9c45f 284 }
xmwmx 8:e76bebe9c45f 285 if (key==2) {
xmwmx 8:e76bebe9c45f 286 x=the_command;
xmwmx 9:a3f9faa9ca1f 287 pc.printf("Received x %f\n",x);
xmwmx 8:e76bebe9c45f 288
xmwmx 8:e76bebe9c45f 289 }
xmwmx 8:e76bebe9c45f 290 if (key==3) {
xmwmx 8:e76bebe9c45f 291 y=the_command;
xmwmx 8:e76bebe9c45f 292 pc.printf("Received y %f\n",y);
xmwmx 8:e76bebe9c45f 293 }
xmwmx 8:e76bebe9c45f 294
xmwmx 8:e76bebe9c45f 295 key=0;
xmwmx 8:e76bebe9c45f 296 }
xmwmx 8:e76bebe9c45f 297 else
xmwmx 8:e76bebe9c45f 298 {
xmwmx 8:e76bebe9c45f 299 if (the_command == 1&&status==2&&key==0) {
xmwmx 8:e76bebe9c45f 300 Getawork = 1;
xmwmx 8:e76bebe9c45f 301 }
xmwmx 8:e76bebe9c45f 302 if (the_command == 2&&status==3&&key==0) {
xmwmx 8:e76bebe9c45f 303 Getdata = 1;
xmwmx 8:e76bebe9c45f 304 pc.printf("Received Getdata %d\n",Getdata);
xmwmx 8:e76bebe9c45f 305 }
xmwmx 9:a3f9faa9ca1f 306 /*else if (the_command == 3&&status==2&&key==0) {//传k
xmwmx 8:e76bebe9c45f 307 key=1;
xmwmx 9:a3f9faa9ca1f 308 }*/
xmwmx 8:e76bebe9c45f 309 else if (the_command == 4&&status==2&&key==0) {//传x
xmwmx 8:e76bebe9c45f 310 key=2;
xmwmx 8:e76bebe9c45f 311 }
xmwmx 8:e76bebe9c45f 312 else if (the_command == 5&&status==2&&key==0) {//传y
xmwmx 8:e76bebe9c45f 313 key=3;
xmwmx 8:e76bebe9c45f 314 }
xmwmx 8:e76bebe9c45f 315 }
xmwmx 8:e76bebe9c45f 316 //
xmwmx 8:e76bebe9c45f 317
xmwmx 8:e76bebe9c45f 318 }
xmwmx 8:e76bebe9c45f 319 }
xmwmx 8:e76bebe9c45f 320
xmwmx 8:e76bebe9c45f 321 int main()
xmwmx 8:e76bebe9c45f 322 {
xmwmx 8:e76bebe9c45f 323 init(); //初始化
xmwmx 8:e76bebe9c45f 324
xmwmx 8:e76bebe9c45f 325 //建立通信
xmwmx 8:e76bebe9c45f 326 status = 1;
xmwmx 8:e76bebe9c45f 327
xmwmx 8:e76bebe9c45f 328 pc.printf("starting\r\n");
xmwmx 8:e76bebe9c45f 329
xmwmx 8:e76bebe9c45f 330 MQTTSocket sock;
xmwmx 8:e76bebe9c45f 331 MClient client(sock);
xmwmx 8:e76bebe9c45f 332
xmwmx 8:e76bebe9c45f 333 //声明所有的传感器,每行一个,每个由名字、单位两部分组成,最后一行必须为空指针作为结尾
xmwmx 8:e76bebe9c45f 334 const char* sensors[][2] = {
xmwmx 8:e76bebe9c45f 335 "report", "",
xmwmx 8:e76bebe9c45f 336 NULL, NULL //最后一行以空指针作为结束标记
xmwmx 8:e76bebe9c45f 337 };
xmwmx 8:e76bebe9c45f 338
xmwmx 8:e76bebe9c45f 339 //声明所有的执行器,每行一个,每个由名字、参数类型两部分组成,最后一行必须为空指针作为结尾
xmwmx 8:e76bebe9c45f 340 const char* actuators[][2] = {
xmwmx 8:e76bebe9c45f 341 "dat", "",
xmwmx 10:3c154d398def 342 "command", "",
xmwmx 8:e76bebe9c45f 343 NULL, NULL //最后一行以空指针作为结束标记
xmwmx 8:e76bebe9c45f 344 };
xmwmx 8:e76bebe9c45f 345 pc.printf("connecting...\r\n");
xmwmx 8:e76bebe9c45f 346
xmwmx 8:e76bebe9c45f 347 networking_init(sock, client, "192.168.1.100", sensors, actuators, on_control_cmd);
xmwmx 8:e76bebe9c45f 348
xmwmx 8:e76bebe9c45f 349 pc.printf("Initialization done.\r\n");
xmwmx 8:e76bebe9c45f 350
xmwmx 8:e76bebe9c45f 351 status = 2;
xmwmx 8:e76bebe9c45f 352
xmwmx 8:e76bebe9c45f 353
xmwmx 8:e76bebe9c45f 354 pc.printf("laser printer send ready.haha\r\n");
xmwmx 8:e76bebe9c45f 355
xmwmx 8:e76bebe9c45f 356 Getawork = 0;
xmwmx 8:e76bebe9c45f 357 Getdata = 0;
xmwmx 8:e76bebe9c45f 358
xmwmx 9:a3f9faa9ca1f 359 //pc.printf("yes%f|%f|%f\r\n",y,k,y*k);
xmwmx 9:a3f9faa9ca1f 360 //pc.printf("ready.\r\n");
xmwmx 8:e76bebe9c45f 361
xmwmx 8:e76bebe9c45f 362
xmwmx 8:e76bebe9c45f 363 pc.printf("biginning\r\n");
xmwmx 8:e76bebe9c45f 364 biginning();
xmwmx 8:e76bebe9c45f 365 pc.printf("finish\r\n");
xmwmx 8:e76bebe9c45f 366
xmwmx 9:a3f9faa9ca1f 367 //draw();
xmwmx 9:a3f9faa9ca1f 368
xmwmx 8:e76bebe9c45f 369 while (true)
xmwmx 8:e76bebe9c45f 370 {
xmwmx 9:a3f9faa9ca1f 371 if(x==0||y==0&&status==2)
xmwmx 9:a3f9faa9ca1f 372 {
xmwmx 9:a3f9faa9ca1f 373 while(x==0&&status==2)
xmwmx 9:a3f9faa9ca1f 374 {
xmwmx 9:a3f9faa9ca1f 375 pc.printf("waiting x\r\n");
xmwmx 9:a3f9faa9ca1f 376 publish_value(client, "report", "input x:");
xmwmx 9:a3f9faa9ca1f 377 client.yield(5000);
xmwmx 9:a3f9faa9ca1f 378 }
xmwmx 9:a3f9faa9ca1f 379 while(y==0&&status==2)
xmwmx 9:a3f9faa9ca1f 380 {
xmwmx 9:a3f9faa9ca1f 381 pc.printf("waiting y\r\n");
xmwmx 9:a3f9faa9ca1f 382 publish_value(client, "report", "input y:");
xmwmx 9:a3f9faa9ca1f 383 client.yield(5000);
xmwmx 9:a3f9faa9ca1f 384 }
xmwmx 9:a3f9faa9ca1f 385 }
xmwmx 9:a3f9faa9ca1f 386 while(y*k>widthy&&status==2)
xmwmx 9:a3f9faa9ca1f 387 {
xmwmx 9:a3f9faa9ca1f 388 k-=0.01;
xmwmx 9:a3f9faa9ca1f 389 pc.printf("no%f|%f|%f\r\n",y,k,y*k);
xmwmx 9:a3f9faa9ca1f 390 wait(0.001);
xmwmx 9:a3f9faa9ca1f 391 }
xmwmx 8:e76bebe9c45f 392 if (status == 2)
xmwmx 8:e76bebe9c45f 393 {
xmwmx 9:a3f9faa9ca1f 394
xmwmx 8:e76bebe9c45f 395 if (Getawork)
xmwmx 8:e76bebe9c45f 396 { //收到新任务
xmwmx 8:e76bebe9c45f 397 Getawork = 0;
xmwmx 8:e76bebe9c45f 398 pc.printf("Begin receiving... %d\r\n",status);
xmwmx 8:e76bebe9c45f 399 // 打开文件,准备接受坐标数据
xmwmx 8:e76bebe9c45f 400 fp_drawing = fopen("/sd/write.txt", "w");
xmwmx 8:e76bebe9c45f 401 if (fp_drawing)
xmwmx 8:e76bebe9c45f 402 {
xmwmx 8:e76bebe9c45f 403 pc.printf("File opened\r\n");
xmwmx 8:e76bebe9c45f 404 status = 3;
xmwmx 8:e76bebe9c45f 405 publish_value(client, "report", "wait data.");
xmwmx 9:a3f9faa9ca1f 406 pc.printf("wait data.%d\r\n",status);
xmwmx 8:e76bebe9c45f 407 }
xmwmx 8:e76bebe9c45f 408 }
xmwmx 10:3c154d398def 409 else
xmwmx 10:3c154d398def 410 {
xmwmx 10:3c154d398def 411 publish_value(client, "report", "ready.");
xmwmx 10:3c154d398def 412 }
xmwmx 9:a3f9faa9ca1f 413
xmwmx 8:e76bebe9c45f 414 }
xmwmx 8:e76bebe9c45f 415
xmwmx 8:e76bebe9c45f 416
xmwmx 9:a3f9faa9ca1f 417 if (status == 3)
xmwmx 8:e76bebe9c45f 418 {
xmwmx 9:a3f9faa9ca1f 419 if(flag==1)
xmwmx 9:a3f9faa9ca1f 420 {
xmwmx 9:a3f9faa9ca1f 421 //wait(15);
xmwmx 9:a3f9faa9ca1f 422
xmwmx 10:3c154d398def 423 publish_value(client, "report", "received.");
xmwmx 10:3c154d398def 424 pc.printf("received. %d\r\n",status);
xmwmx 10:3c154d398def 425 flag=0;
xmwmx 9:a3f9faa9ca1f 426 }
xmwmx 8:e76bebe9c45f 427 if (Getdata)
xmwmx 8:e76bebe9c45f 428 { //数据接收完
xmwmx 8:e76bebe9c45f 429 Getdata = 0;
xmwmx 10:3c154d398def 430 /*
xmwmx 10:3c154d398def 431 fprintf(fp_drawing, "%s", buf);
xmwmx 10:3c154d398def 432 memset(buf,0,sizeof(buf)/sizeof(char));
xmwmx 10:3c154d398def 433 dot=0;
xmwmx 10:3c154d398def 434 */
xmwmx 8:e76bebe9c45f 435 pc.printf("End receiving... %d\r\n",status);
xmwmx 8:e76bebe9c45f 436 fclose(fp_drawing);
xmwmx 10:3c154d398def 437 publish_value(client, "report", "starting");
xmwmx 8:e76bebe9c45f 438 status = 4;
xmwmx 8:e76bebe9c45f 439 }
xmwmx 8:e76bebe9c45f 440 }
xmwmx 9:a3f9faa9ca1f 441 if (status == 4)
xmwmx 8:e76bebe9c45f 442 {
xmwmx 8:e76bebe9c45f 443 // pc.printf("debug4 \r\n");
xmwmx 8:e76bebe9c45f 444 // dealdata();
xmwmx 9:a3f9faa9ca1f 445 pc.printf("Drawing.. %d |%d\r\n",status,dot);
xmwmx 8:e76bebe9c45f 446 // usbprintdata();
xmwmx 8:e76bebe9c45f 447 draw();
xmwmx 8:e76bebe9c45f 448 publish_value(client, "report", "done.");
xmwmx 9:a3f9faa9ca1f 449 pc.printf("done. %d \r\n",status);
xmwmx 10:3c154d398def 450
xmwmx 8:e76bebe9c45f 451 status = 2;
xmwmx 9:a3f9faa9ca1f 452 x=0;
xmwmx 9:a3f9faa9ca1f 453 y=0;
xmwmx 9:a3f9faa9ca1f 454 Getawork = 0;
xmwmx 9:a3f9faa9ca1f 455 Getdata = 0;
xmwmx 9:a3f9faa9ca1f 456 unit_xy=200;
xmwmx 9:a3f9faa9ca1f 457 k=1.0;
xmwmx 9:a3f9faa9ca1f 458 flag=0;
xmwmx 9:a3f9faa9ca1f 459 dot=0;
xmwmx 10:3c154d398def 460 //memset(buf,0,sizeof(buf)/sizeof(char));
xmwmx 8:e76bebe9c45f 461 }
xmwmx 8:e76bebe9c45f 462 client.yield(1000);
xmwmx 8:e76bebe9c45f 463 }
xmwmx 9:a3f9faa9ca1f 464
xmwmx 8:e76bebe9c45f 465 }