Rev 354 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 354 | Rev 356 | ||
|---|---|---|---|
| Line 11... | Line 11... | ||
| 11 | #include <math.h> |
11 | #include <math.h> |
| 12 | 12 | ||
| 13 | //stepping motor busheng --> declaration 1step=1.8degrees |
13 | //stepping motor busheng --> declaration 1step=1.8degrees |
| 14 | //experimantally: full rotation = 3200 steps (on setting 1step/mm ($100)) |
14 | //experimantally: full rotation = 3200 steps (on setting 1step/mm ($100)) |
| 15 | 15 | ||
| 16 | 16 | // PORTS |
|
| 17 | int pCOM1 = 6; |
17 | int pCOM1 = 6; |
| 18 | int pCOM2 = 7; |
18 | int pCOM2 = 7; |
| - | 19 | char GRBL[10] = "COM8"; //BE CAREFUL, IT'S IMPORTANT TO KNOW THE NAME OF THE PORTS |
|
| - | 20 | char ADC[10] = "COM7"; |
|
| 19 | 21 | ||
| 20 | int run, graph, |
22 | int run, graph, chart, ji, vi, run1; |
| 21 | int left_1, right_1; |
23 | int left_1, right_1; |
| 22 | 24 | ||
| 23 | static int panel, tfID, tfID1; |
25 | static int panel, tfID, tfID1; |
| 24 | static int poolHandle = 0; |
26 | static int poolHandle = 0; |
| 25 | 27 | ||
| Line 36... | Line 38... | ||
| 36 | 38 | ||
| 37 | 39 | ||
| 38 | void initialize() |
40 | void initialize() |
| 39 | { |
41 | { |
| 40 | // Open grbl serial port //("COM6",115200) |
42 | // Open grbl serial port //("COM6",115200) |
| 41 | OpenComConfig (pCOM1, |
43 | OpenComConfig (pCOM1, GRBL, 115200, 0, 8, 1, 512, 512); |
| 42 | 44 | ||
| 43 | /* Turn off Hardware handshaking (loopback test will not function with it on) */ |
45 | /* Turn off Hardware handshaking (loopback test will not function with it on) */ |
| 44 | SetCTSMode (pCOM1, LWRS_HWHANDSHAKE_OFF); |
46 | SetCTSMode (pCOM1, LWRS_HWHANDSHAKE_OFF); |
| 45 | 47 | ||
| 46 | ComWrt (pCOM1, "\r\n\r\n", 5); //Writing on Port |
48 | ComWrt (pCOM1, "\r\n\r\n", 5); //Writing on Port |
| Line 119... | Line 121... | ||
| 119 | } |
121 | } |
| 120 | 122 | ||
| 121 | 123 | ||
| 122 | void initialize_voltage() |
124 | void initialize_voltage() |
| 123 | { |
125 | { |
| 124 | // Open serial port for photodetector - reading is on chanel A1 |
126 | // Open serial port for ADC & photodetector - reading is on chanel A1 |
| 125 | OpenComConfig (pCOM2, |
127 | OpenComConfig (pCOM2, ADC, 115200, 0, 8, 1, 512, 512); |
| 126 | SetCTSMode (pCOM2, LWRS_HWHANDSHAKE_OFF); |
128 | SetCTSMode (pCOM2, LWRS_HWHANDSHAKE_OFF); |
| 127 | 129 | ||
| 128 | Delay(0.5); |
130 | Delay(0.5); |
| 129 | FlushInQ (pCOM2); |
131 | FlushInQ (pCOM2); |
| 130 | FlushOutQ (pCOM2); |
132 | FlushOutQ (pCOM2); |
| Line 173... | Line 175... | ||
| 173 | 175 | ||
| 174 | int strLen3 = GetInQLen (pCOM1); |
176 | int strLen3 = GetInQLen (pCOM1); |
| 175 | bytes_read3 = ComRd (pCOM1, read_data3, strLen3); |
177 | bytes_read3 = ComRd (pCOM1, read_data3, strLen3); |
| 176 | //printf(" :\n%s", read_data3); |
178 | //printf(" :\n%s", read_data3); |
| 177 | //printf("bytes_read = %d\n\n", bytes_read3); |
179 | //printf("bytes_read = %d\n\n", bytes_read3); |
| 178 | FlushInQ (pCOM1); |
180 | FlushInQ (pCOM1); |
| 179 | 181 | ||
| 180 | } |
182 | } |
| 181 | 183 | ||
| 182 | 184 | ||
| 183 | static int CVICALLBACK daq_run(void *functionData) |
185 | static int CVICALLBACK daq_run(void *functionData) |
| 184 | { |
186 | { |
| 185 | 187 | ||
| Line 293... | Line 295... | ||
| 293 | //for(int i=0;i<j;i++) printf("volt_g[%d] = %lf\n",i,volt_g[i]); |
295 | //for(int i=0;i<j;i++) printf("volt_g[%d] = %lf\n",i,volt_g[i]); |
| 294 | if (graph>0) DeleteGraphPlot (panel, p1_VOLTAGE_GRAPH, graph, VAL_DELAYED_DRAW); |
296 | if (graph>0) DeleteGraphPlot (panel, p1_VOLTAGE_GRAPH, graph, VAL_DELAYED_DRAW); |
| 295 | graph = PlotY (panel, p1_VOLTAGE_GRAPH, &volt_g[0], num_points, VAL_DOUBLE, |
297 | graph = PlotY (panel, p1_VOLTAGE_GRAPH, &volt_g[0], num_points, VAL_DOUBLE, |
| 296 | VAL_CONNECTED_POINTS, VAL_SIMPLE_DOT, VAL_SOLID, 1, VAL_WHITE); |
298 | VAL_CONNECTED_POINTS, VAL_SIMPLE_DOT, VAL_SOLID, 1, VAL_WHITE); |
| 297 | ji = num_points; |
299 | ji = num_points; |
| 298 | f_t = 1; |
- | |
| 299 | } |
300 | } |
| 300 | 301 | ||
| 301 | FlushInQ (pCOM1); |
302 | FlushInQ (pCOM1); |
| 302 | FlushOutQ (pCOM1); |
303 | FlushOutQ (pCOM1); |
| 303 | FlushInQ (pCOM2); |
304 | FlushInQ (pCOM2); |
| Line 308... | Line 309... | ||
| 308 | } |
309 | } |
| 309 | 310 | ||
| 310 | 311 | ||
| 311 | static int CVICALLBACK voltage_run(void *functionData) |
312 | static int CVICALLBACK voltage_run(void *functionData) |
| 312 | { |
313 | { |
| 313 | int fix_range; |
- | |
| 314 | double ymin,ymax,xmin,xmax; |
- | |
| 315 | double voltA |
314 | double voltA; |
| 316 | int time = 0; |
- | |
| 317 | //double volt1[TEXT_LENGTH]; |
- | |
| 318 | 315 | ||
| 319 | initialize_voltage(); |
316 | initialize_voltage(); |
| 320 | 317 | ||
| 321 |
|
318 | chart = NewCtrl (panel, CTRL_STRIP_CHART_LS, "RUN VOLTAGE", 100, 15); |
| 322 | SetCtrlAttribute(panel, chart, ATTR_HEIGHT, 600); |
319 | SetCtrlAttribute(panel, chart, ATTR_HEIGHT, 600); |
| 323 | SetCtrlAttribute(panel, chart, ATTR_WIDTH , 1300); |
320 | SetCtrlAttribute(panel, chart, ATTR_WIDTH , 1300); |
| - | 321 | SetAxisRange(panel, chart, VAL_NO_CHANGE, 0, 0, VAL_AUTOSCALE, 0, 0); |
|
| 324 | 322 | ||
| 325 | while(1) |
323 | while(1) |
| 326 | { |
324 | { |
| 327 | // Range |
- | |
| 328 | GetCtrlVal(panel, p1_RANGE, &fix_range); |
- | |
| 329 | if(fix_range) |
- | |
| 330 | { |
- | |
| 331 | GetAxisRange (panel, chart, VAL_MANUAL, &xmin, &xmax, VAL_MANUAL, &ymin, &ymax); |
- | |
| 332 | if (ymax<=2) SetAxisRange (panel, chart, VAL_NO_CHANGE, 0, 0, VAL_MANUAL, 0, 2); |
- | |
| 333 | else SetAxisRange (panel, chart, VAL_NO_CHANGE, 0, 0, VAL_MANUAL, 0, 5); |
- | |
| 334 | } |
- | |
| 335 | else SetAxisRange (panel, chart, VAL_NO_CHANGE, 0, 0, VAL_AUTOSCALE, 0, 0); |
- | |
| 336 | - | ||
| 337 | //volt1[time] = read_voltage(); |
- | |
| 338 | voltA = read_voltage(); |
325 | voltA = read_voltage(); |
| 339 | - | ||
| 340 | PlotPoint(panel, chart, time, voltA, VAL_SOLID_SQUARE, VAL_WHITE); |
- | |
| 341 |
|
326 | PlotStripChartPoint (panel, chart, voltA); |
| 342 | if (time>50) SetAxisRange (panel, chart, VAL_MANUAL, time-50, time, VAL_NO_CHANGE, 0, 0); |
- | |
| 343 | 327 | ||
| 344 | SetCtrlVal(panel, p1_VOLTAGE, voltA); |
328 | SetCtrlVal(panel, p1_VOLTAGE, voltA); |
| 345 | 329 | ||
| 346 | Delay(0.05); |
330 | Delay(0.05); |
| 347 | time++; |
- | |
| 348 | - | ||
| 349 | voltB = voltA; |
- | |
| 350 | - | ||
| 351 | //volt1[time] = voltA; |
- | |
| 352 | 331 | ||
| 353 | FlushInQ (pCOM2); |
332 | FlushInQ (pCOM2); |
| 354 | 333 | ||
| 355 | if (vi == 0) break; |
334 | if (vi == 0) break; |
| 356 | } |
335 | } |
| 357 | 336 | ||
| 358 | DiscardCtrl (panel, chart); |
337 | DiscardCtrl (panel, chart); |
| 359 | - | ||
| 360 | // After some time (~4000 points) it becomes slower in writing out data... |
- | |
| 361 | 338 | chart = 0; |
|
| 362 | //if (graph!=0) DeleteGraphPlot (panel, p1_VOLTAGE_GRAPH, graph, VAL_DELAYED_DRAW); |
- | |
| 363 | //graph = PlotY (panel, p1_VOLTAGE_GRAPH, &volt1[0], time+1, VAL_DOUBLE, |
- | |
| 364 | // VAL_CONNECTED_POINTS, VAL_SIMPLE_DOT, VAL_SOLID, 1, VAL_WHITE); |
- | |
| 365 | 339 | ||
| 366 | return 0; |
340 | return 0; |
| 367 | } |
341 | } |
| 368 | 342 | ||
| 369 | 343 | ||
| 370 | static int CVICALLBACK free_run(void *functionData) |
344 | static int CVICALLBACK free_run(void *functionData) |
| 371 | { |
345 | { |
| 372 | if (run == 1) return 0; |
346 | if (run == 1) return 0; |
| 373 | run1 = 1; |
347 | run1 = 1; |
| 374 | 348 | ||
| 375 | if (left_1) movement(-10000); |
349 | if (left_1) movement(-10000); |
| 376 | if (right_1) movement(10000); |
350 | if (right_1) movement(10000); |
| Line 392... | Line 366... | ||
| 392 | 366 | ||
| 393 | int strLen = GetInQLen (pCOM1); |
367 | int strLen = GetInQLen (pCOM1); |
| 394 | bytes_read0 = ComRd (pCOM1, read_data0, strLen); |
368 | bytes_read0 = ComRd (pCOM1, read_data0, strLen); |
| 395 | //printf(" : %s", read_data0); |
369 | //printf(" : %s", read_data0); |
| 396 | 370 | ||
| 397 |
|
371 | //printf("Stop run1\n"); |
| 398 | 372 | ||
| 399 | break; |
373 | break; |
| 400 | } |
374 | } |
| 401 | } |
375 | } |
| 402 | 376 | ||
| 403 | return 0; |
377 | return 0; |
| 404 | } |
378 | } |
| 405 | 379 | ||
| 406 | 380 | ||
| Line 436... | Line 410... | ||
| 436 | if (run == 1) break; |
410 | if (run == 1) break; |
| 437 | 411 | ||
| 438 | run = 1; |
412 | run = 1; |
| 439 | 413 | ||
| 440 | CmtScheduleThreadPoolFunction (poolHandle, daq_run, (void *)&dummy, &tfID); |
414 | CmtScheduleThreadPoolFunction (poolHandle, daq_run, (void *)&dummy, &tfID); |
| 441 | 415 | ||
| 442 | } |
416 | } |
| 443 | 417 | ||
| 444 | return 0; |
418 | return 0; |
| 445 | } |
419 | } |
| 446 | 420 | ||
| 447 | 421 | ||
| 448 | int CVICALLBACK StopCB (int panel, int control, int event, |
422 | int CVICALLBACK StopCB (int panel, int control, int event, |
| 449 | void *callbackData, int eventData1, int eventData2) |
423 | void *callbackData, int eventData1, int eventData2) |
| 450 | { |
424 | { |
| 451 | switch (event) |
425 | switch (event) |
| 452 | { |
426 | { |
| 453 | case EVENT_COMMIT: |
427 | case EVENT_COMMIT: |
| 454 | 428 | ||
| 455 | if (run == 0) break; |
429 | if (run == 0) break; |
| Line 459... | Line 433... | ||
| 459 | CmtWaitForThreadPoolFunctionCompletion (poolHandle, tfID, |
433 | CmtWaitForThreadPoolFunctionCompletion (poolHandle, tfID, |
| 460 | OPT_TP_PROCESS_EVENTS_WHILE_WAITING); |
434 | OPT_TP_PROCESS_EVENTS_WHILE_WAITING); |
| 461 | CmtReleaseThreadPoolFunctionID (poolHandle, tfID); |
435 | CmtReleaseThreadPoolFunctionID (poolHandle, tfID); |
| 462 | 436 | ||
| 463 | printf("Stop\n"); |
437 | printf("Stop\n"); |
| 464 | 438 | ||
| 465 | break; |
439 | break; |
| 466 | 440 | ||
| 467 | } |
441 | } |
| 468 | 442 | ||
| 469 | return 0; |
443 | return 0; |
| 470 | } |
444 | } |
| 471 | 445 | ||
| 472 | 446 | ||
| 473 | int CVICALLBACK ExitCB (int panel, int control, int event, |
447 | int CVICALLBACK ExitCB (int panel, int control, int event, |
| 474 | void *callbackData, int eventData1, int eventData2) |
448 | void *callbackData, int eventData1, int eventData2) |
| 475 | { |
449 | { |
| 476 | switch (event) |
450 | switch (event) |
| 477 | { |
451 | { |
| 478 | case EVENT_COMMIT: |
452 | case EVENT_COMMIT: |
| 479 | QuitUserInterface (0); |
453 | QuitUserInterface (0); |
| 480 | CloseCom(pCOM1); |
454 | CloseCom(pCOM1); |
| 481 | CloseCom(pCOM2); |
455 | CloseCom(pCOM2); |
| 482 | break; |
456 | break; |
| 483 | } |
457 | } |
| 484 | return 0; |
458 | return 0; |
| 485 | } |
459 | } |
| 486 | 460 | ||
| 487 | 461 | ||
| 488 | int CVICALLBACK Fourier_TransCB (int panel, int control, int event, |
462 | int CVICALLBACK Fourier_TransCB (int panel, int control, int event, |
| 489 | void *callbackData, int eventData1, int eventData2) |
463 | void *callbackData, int eventData1, int eventData2) |
| 490 | { |
464 | { |
| 491 | if (!ji) return 0; |
465 | if (!ji) return 0; |
| 492 | const int ii = ji; |
466 | const int ii = ji; |
| 493 | double fourier_t[ii], fourier_ti[ii]; |
467 | double fourier_t[ii], fourier_ti[ii]; |
| 494 | char window_fun; |
468 | char window_fun; |
| - | 469 | double voltmax=0, voltmin=5, voltavg; |
|
| 495 | 470 | ||
| 496 | switch (event) |
471 | switch (event) |
| 497 | { |
472 | { |
| 498 | case EVENT_COMMIT: |
473 | case EVENT_COMMIT: |
| 499 | 474 | ||
| 500 | for(int i=0; i<ii; i++) |
475 | for(int i=0; i<ii; i++) |
| 501 | { |
476 | { |
| 502 | fourier_t[i] = volt_g[i]; |
477 | fourier_t[i] = volt_g[i]; |
| 503 | fourier_ti[i] = 0; |
478 | fourier_ti[i] = 0; |
| - | 479 | ||
| - | 480 | if (fourier_t[i]>voltmax) voltmax = fourier_t[i]; |
|
| - | 481 | if (fourier_t[i]<voltmin) voltmin = fourier_t[i]; |
|
| 504 | } |
482 | } |
| 505 | 483 | ||
| - | 484 | voltavg = (voltmin+voltmax)/2.0; |
|
| 506 | GetCtrlVal(panel, p1_WIN_FUN, &window_fun); |
485 | GetCtrlVal(panel, p1_WIN_FUN, &window_fun); |
| 507 | //printf("window_fun = %d\n", window_fun); |
486 | //printf("window_fun = %d\n", window_fun); |
| - | 487 | //printf("max %f, min %f, avg %f\n", voltmax, voltmin, voltavg); |
|
| 508 | if (window_fun!=0) |
488 | if (window_fun!=0) |
| 509 | { |
489 | { |
| 510 | //do something with window functions |
490 | //do something with window functions (N=ii) |
| 511 | if(window_fun==1) for(int i=0; i<ii; i++) fourier_t[i] = ( |
491 | if(window_fun==1) for(int i=0; i<ii; i++) fourier_t[i] = (fourier_t[i] - voltavg)*(1 - fabs((i-(ii/2.0))/(ii/2))) + voltavg; //Bartlett |
| - | 492 | if(window_fun==2) for(int i=0; i<ii; i++) fourier_t[i] = (fourier_t[i] - voltavg)*(1 - ((i-(ii/2.0))/(ii/2))*((i-(ii/2.0))/(ii/2))) + voltavg; //Welch |
|
| 512 | if(window_fun== |
493 | if(window_fun==3) for(int i=0; i<ii; i++) fourier_t[i] = (fourier_t[i] - voltavg)*(0.5*(1 - cos(2*3.14159265359*i/ii))) + voltavg; //Hann |
| 513 | YGraphPopup ("HOW |
494 | YGraphPopup ("HOW voltage LOOKS NOW", fourier_t, ii, VAL_DOUBLE); |
| 514 | } |
495 | } |
| 515 | 496 | ||
| 516 | FFT (fourier_t, fourier_ti, ii); |
497 | FFT (fourier_t, fourier_ti, ii); |
| 517 | for (int i=0; i<ii; i++) fourier_t[i] = fabs(fourier_t[i]); |
498 | for (int i=0; i<ii; i++) fourier_t[i] = fabs(fourier_t[i]); |
| 518 | fourier_t[0]=0; |
499 | fourier_t[0]=0; |
| 519 | 500 | ||
| 520 | YGraphPopup ("FOURIER", fourier_t, ii/2+1, VAL_DOUBLE); |
501 | YGraphPopup ("FOURIER", fourier_t, ii/2+1, VAL_DOUBLE); |
| - | 502 | ||
| - | 503 | ||
| - | 504 | FILE *fp,*fp1; |
|
| - | 505 | ||
| - | 506 | //file name has to have file extension |
|
| - | 507 | char fname[50]; |
|
| - | 508 | GetCtrlVal(panel, p1_F_NAME, fname); |
|
| - | 509 | ||
| - | 510 | char fname0[100] = "C:/Users/"; |
|
| - | 511 | char *name; |
|
| - | 512 | name = getenv("USERNAME"); |
|
| - | 513 | strcat(fname0,name); |
|
| - | 514 | strcat(fname0,"/Desktop/"); |
|
| - | 515 | //char fname0[100] = "C:/Users/Student/Desktop/"; //Alternative way |
|
| - | 516 | strcat(fname0,fname); |
|
| - | 517 | fp = fopen(fname0, "w"); |
|
| - | 518 | ||
| - | 519 | char fname1[50]; |
|
| - | 520 | GetCtrlVal(panel, p1_F_NAME1, fname1); |
|
| - | 521 | char fname10[100] = "C:/Users/"; |
|
| - | 522 | strcat(fname10,name); |
|
| - | 523 | strcat(fname10,"/Desktop/"); |
|
| - | 524 | strcat(fname10,fname1); |
|
| - | 525 | fp1 = fopen(fname10, "w"); |
|
| - | 526 | ||
| - | 527 | fprintf(fp, "step\tvoltage\n"); |
|
| - | 528 | for(int i=0; i<ii; i++) |
|
| - | 529 | { |
|
| - | 530 | fprintf(fp, "%d\t%lf\n", i+1, volt_g[i]); |
|
| - | 531 | } |
|
| - | 532 | ||
| - | 533 | fprintf(fp1, "step\tfourier\n"); |
|
| - | 534 | for(int i=0; i<ii/2+1; i++) |
|
| - | 535 | { |
|
| - | 536 | fprintf(fp1, "%d\t%lf\n", i, fourier_t[i]); //0th component is from DC - background? YES |
|
| - | 537 | } |
|
| - | 538 | ||
| - | 539 | fclose(fp); |
|
| - | 540 | fclose(fp1); |
|
| - | 541 | printf("Files %s and %s created.\n", fname, fname1); |
|
| 521 | 542 | ||
| 522 | if (f_t == 1) |
- | |
| 523 | { |
- | |
| 524 | FILE *fp,*fp1; |
- | |
| 525 | - | ||
| 526 | //file name has to have file extension |
- | |
| 527 | char fname[50]; |
- | |
| 528 | GetCtrlVal(panel, p1_F_NAME, fname); |
- | |
| 529 | fp = fopen(fname, "w"); |
- | |
| 530 | - | ||
| 531 | char fname1[50]; |
- | |
| 532 | GetCtrlVal(panel, p1_F_NAME1, fname1); |
- | |
| 533 | fp1 = fopen(fname1, "w"); |
- | |
| 534 | - | ||
| 535 | fprintf(fp, "step\tvolt_g\n"); |
- | |
| 536 | for(int i=0; i<ii; i++) |
- | |
| 537 | { |
- | |
| 538 | fprintf(fp, "%d\t%lf\n", i+1, volt_g[i]); |
- | |
| 539 | } |
- | |
| 540 | - | ||
| 541 | fprintf(fp1, "step\tfourier_t\n"); |
- | |
| 542 | for(int i=0; i<ii/2+1; i++) |
- | |
| 543 | { |
- | |
| 544 | fprintf(fp1, "%d\t%lf\n", i, fourier_t[i]); //0th component is from DC - background? |
- | |
| 545 | } |
- | |
| 546 | - | ||
| 547 | fclose(fp); |
- | |
| 548 | fclose(fp1); |
- | |
| 549 | printf("Files %s and %s created.\n", fname, fname1); |
- | |
| 550 | } |
- | |
| 551 | - | ||
| 552 | f_t = 0; //so that we make only one file |
- | |
| 553 | break; |
543 | break; |
| 554 | 544 | ||
| 555 | } |
545 | } |
| 556 | 546 | ||
| 557 | return 0; |
547 | return 0; |
| 558 | } |
548 | } |
| 559 | 549 | ||
| 560 | 550 | ||
| 561 | int CVICALLBACK ExamplesCB (int panel, int control, int event, |
551 | int CVICALLBACK ExamplesCB (int panel, int control, int event, |
| 562 | void *callbackData, int eventData1, int eventData2) |
552 | void *callbackData, int eventData1, int eventData2) |
| 563 | { |
553 | { |
| 564 | const int ki=1024; |
554 | const int ki=1024; |
| 565 | double ret[ki], ret1[ki]; |
555 | double ret[ki], ret1[ki]; |
| 566 | double val = 3.14159265/180; |
556 | double val = 3.14159265/180; |
| 567 | int x1, x2, a1, a2; |
557 | int x1, x2, a1, a2; |
| - | 558 | char window_fun; |
|
| 568 | 559 | ||
| 569 | switch (event) |
560 | switch (event) |
| 570 | { |
561 | { |
| 571 | case EVENT_COMMIT: |
562 | case EVENT_COMMIT: |
| 572 | 563 | ||
| 573 | GetCtrlVal(panel, p1_FREQ1, &x1); |
564 | GetCtrlVal(panel, p1_FREQ1, &x1); |
| 574 | GetCtrlVal(panel, p1_FREQ2, &x2); |
565 | GetCtrlVal(panel, p1_FREQ2, &x2); |
| 575 | GetCtrlVal(panel, p1_AMPL1, &a1); |
566 | GetCtrlVal(panel, p1_AMPL1, &a1); |
| 576 | GetCtrlVal(panel, p1_AMPL2, &a2); |
567 | GetCtrlVal(panel, p1_AMPL2, &a2); |
| 577 | 568 | ||
| - | 569 | GetCtrlVal(panel, p1_WIN_FUN, &window_fun); |
|
| - | 570 | //printf("window_fun = %d\n", window_fun); |
|
| - | 571 | ||
| 578 | for (int i=0; i<ki; i++) |
572 | for (int i=0; i<ki; i++) |
| 579 | { |
573 | { |
| 580 | ret[i] = a1*sin(x1*i*val)+a2*sin(x2*i*val); |
574 | ret[i] = a1*sin(x1*i*val)+a2*sin(x2*i*val); |
| 581 | ret1[i] = 0; |
575 | ret1[i] = 0; |
| - | 576 | } |
|
| - | 577 | if (window_fun!=0) |
|
| - | 578 | { |
|
| - | 579 | //do something with window functions (N=ki) |
|
| - | 580 | if(window_fun==1) for(int i=0; i<ki; i++) ret[i] = ret[i]*(1 - fabs((i-(ki/2.0))/(ki/2))); //Bartlett |
|
| - | 581 | if(window_fun==2) for(int i=0; i<ki; i++) ret[i] = ret[i]*(1 - ((i-(ki/2.0))/(ki/2))*((i-(ki/2.0))/(ki/2))); //Welch |
|
| - | 582 | if(window_fun==3) for(int i=0; i<ki; i++) ret[i] = ret[i]*(0.5*(1 - cos(2*3.14159265359*i/ki))); //Hann |
|
| 582 | } |
583 | } |
| 583 | YGraphPopup ("example graph", ret, ki, VAL_DOUBLE); |
584 | YGraphPopup ("example graph", ret, ki, VAL_DOUBLE); |
| 584 | FFT (ret, ret1, ki); |
585 | FFT (ret, ret1, ki); |
| 585 | for (int i=0; i<ki; i++) ret[i] = fabs(ret[i]); |
586 | for (int i=0; i<ki; i++) ret[i] = fabs(ret[i]); |
| 586 | //for (int i=0;i<ki;i++) printf("basic: %lf, fourier: %lf\n", ret1[i], ret[i]); |
587 | //for (int i=0;i<ki;i++) printf("basic: %lf, fourier: %lf\n", ret1[i], ret[i]); |
| Line 632... | Line 633... | ||
| 632 | switch (event) |
633 | switch (event) |
| 633 | { |
634 | { |
| 634 | case EVENT_COMMIT: |
635 | case EVENT_COMMIT: |
| 635 | 636 | ||
| 636 | GetCtrlVal(panel, p1_RANGE, &fix_range); |
637 | GetCtrlVal(panel, p1_RANGE, &fix_range); |
| - | 638 | ||
| - | 639 | if(chart) |
|
| - | 640 | { |
|
| - | 641 | if(fix_range) |
|
| - | 642 | { |
|
| - | 643 | GetAxisRange (panel, chart, VAL_MANUAL, &xmin, &xmax, VAL_MANUAL, &ymin, &ymax); |
|
| - | 644 | if (ymax<=2) SetAxisRange (panel, chart, VAL_NO_CHANGE, 0, 0, VAL_MANUAL, 0, 2); |
|
| - | 645 | else SetAxisRange (panel, chart, VAL_NO_CHANGE, 0, 0, VAL_MANUAL, 0, 5); |
|
| - | 646 | } |
|
| - | 647 | else SetAxisRange(panel, chart, VAL_NO_CHANGE, 0, 0, VAL_AUTOSCALE, 0, 0); |
|
| - | 648 | } |
|
| - | 649 | ||
| 637 | if(fix_range) |
650 | if(fix_range) |
| 638 | { |
651 | { |
| 639 | GetAxisRange (panel, p1_VOLTAGE_GRAPH, VAL_MANUAL, &xmin, &xmax, VAL_MANUAL, &ymin, &ymax); |
652 | GetAxisRange (panel, p1_VOLTAGE_GRAPH, VAL_MANUAL, &xmin, &xmax, VAL_MANUAL, &ymin, &ymax); |
| 640 | if (ymax<=2) SetAxisRange (panel, p1_VOLTAGE_GRAPH, VAL_NO_CHANGE, 0, 0, VAL_MANUAL, 0, 2); |
653 | if (ymax<=2) SetAxisRange (panel, p1_VOLTAGE_GRAPH, VAL_NO_CHANGE, 0, 0, VAL_MANUAL, 0, 2); |
| 641 | else SetAxisRange (panel, p1_VOLTAGE_GRAPH, VAL_NO_CHANGE, 0, 0, VAL_MANUAL, 0, 5); |
654 | else SetAxisRange (panel, p1_VOLTAGE_GRAPH, VAL_NO_CHANGE, 0, 0, VAL_MANUAL, 0, 5); |
| 642 | } |
655 | } |
| 643 | else SetAxisRange (panel, p1_VOLTAGE_GRAPH, VAL_NO_CHANGE, 0, 0, VAL_AUTOSCALE, 0, 0); |
656 | else SetAxisRange (panel, p1_VOLTAGE_GRAPH, VAL_NO_CHANGE, 0, 0, VAL_AUTOSCALE, 0, 0); |
| 644 | 657 | ||
| 645 | break; |
658 | break; |
| 646 | 659 | ||
| 647 | } |
660 | } |
| 648 | 661 | ||
| 649 | return 0; |
662 | return 0; |
| 650 | } |
663 | } |
| 651 | 664 | ||
| 652 | 665 | ||
| 653 | int CVICALLBACK FreeMoveCB (int panel, int control, int event, |
666 | int CVICALLBACK FreeMoveCB (int panel, int control, int event, |
| 654 | void *callbackData, int eventData1, int eventData2) |
667 | void *callbackData, int eventData1, int eventData2) |
| 655 | { |
668 | { |
| 656 | int dummy; |
669 | int dummy; |
| 657 | - | ||
| 658 | switch (event) |
- | |
| 659 | { |
- | |
| 660 | case EVENT_COMMIT: |
- | |
| 661 | - | ||
| 662 | if (run == 1) break; |
- | |
| 663 | if (run1 == 1) break; |
- | |
| 664 | right_1 = 1; |
- | |
| 665 | - | ||
| 666 | CmtScheduleThreadPoolFunction (poolHandle, free_run, (void *)&dummy, &tfID1); |
- | |
| 667 | 670 | ||
| - | 671 | switch (event) |
|
| - | 672 | { |
|
| - | 673 | case EVENT_COMMIT: |
|
| - | 674 | ||
| - | 675 | if (run == 1) break; |
|
| - | 676 | if (run1 == 1) break; |
|
| - | 677 | right_1 = 1; |
|
| - | 678 | ||
| - | 679 | CmtScheduleThreadPoolFunction (poolHandle, free_run, (void *)&dummy, &tfID1); |
|
| - | 680 | ||
| 668 | break; |
681 | break; |
| 669 | 682 | ||
| 670 | } |
683 | } |
| 671 | 684 | ||
| 672 | return 0; |
685 | return 0; |
| 673 | } |
686 | } |
| 674 | 687 | ||
| 675 | int CVICALLBACK FreeMove1CB (int panel, int control, int event, |
688 | int CVICALLBACK FreeMove1CB (int panel, int control, int event, |
| 676 | void *callbackData, int eventData1, int eventData2) |
689 | void *callbackData, int eventData1, int eventData2) |
| 677 | { |
690 | { |
| 678 | int dummy; |
691 | int dummy; |
| 679 | 692 | ||
| 680 | switch (event) |
693 | switch (event) |
| 681 | { |
694 | { |
| 682 | case EVENT_COMMIT: |
695 | case EVENT_COMMIT: |
| 683 | 696 | ||
| 684 | if (run == 1) break; |
697 | if (run == 1) break; |
| 685 | if (run1 == 1) break; |
698 | if (run1 == 1) break; |
| 686 | left_1 = 1; |
699 | left_1 = 1; |
| 687 | 700 | ||
| 688 | CmtScheduleThreadPoolFunction (poolHandle, free_run, (void *)&dummy, &tfID1); |
701 | CmtScheduleThreadPoolFunction (poolHandle, free_run, (void *)&dummy, &tfID1); |
| 689 | 702 | ||
| 690 | break; |
703 | break; |
| 691 | 704 | ||
| 692 | } |
705 | } |
| 693 | 706 | ||
| 694 | return 0; |
707 | return 0; |
| Line 702... | Line 715... | ||
| 702 | case EVENT_COMMIT: |
715 | case EVENT_COMMIT: |
| 703 | 716 | ||
| 704 | if (run == 1) break; |
717 | if (run == 1) break; |
| 705 | if (run1 == 0) break; |
718 | if (run1 == 0) break; |
| 706 | run1 = 0; |
719 | run1 = 0; |
| - | 720 | ||
| - | 721 | if (run1 == 0) //Additionally here just to be sure |
|
| - | 722 | { |
|
| - | 723 | ComWrt (pCOM1, "!\n", 2); //stops grbl |
|
| - | 724 | ||
| - | 725 | Delay(0.01); |
|
| - | 726 | ||
| - | 727 | ComWrt (pCOM1, "~\n", 2); //releases grbl |
|
| - | 728 | ||
| - | 729 | Delay(0.01); |
|
| - | 730 | ||
| - | 731 | int strLen = GetInQLen (pCOM1); |
|
| - | 732 | bytes_read0 = ComRd (pCOM1, read_data0, strLen); |
|
| - | 733 | //printf(" : %s", read_data0); |
|
| - | 734 | ||
| - | 735 | printf("Stop run1\n"); |
|
| - | 736 | } |
|
| 707 | 737 | ||
| 708 | CmtWaitForThreadPoolFunctionCompletion (poolHandle, tfID1, |
738 | CmtWaitForThreadPoolFunctionCompletion (poolHandle, tfID1, |
| 709 | OPT_TP_PROCESS_EVENTS_WHILE_WAITING); |
739 | OPT_TP_PROCESS_EVENTS_WHILE_WAITING); |
| 710 | CmtReleaseThreadPoolFunctionID (poolHandle, tfID1); |
740 | CmtReleaseThreadPoolFunctionID (poolHandle, tfID1); |
| 711 | 741 | ||