void main (void) { USART_init(); USART_enable_rx_interrrupt(); stepper_init(); sei(); char *ptr=0; while(true) { _delay_ms(1000); stepx(300); stepy(200); stepz(STEPS_PER_SEC/4); ptr=USART_get_rx_buffer(); if(ptr) { USART_transmit_string(ptr); }else USART_enable_rx_interrrupt(); // USART_transmit(USART_receive()); /* char * ptr=rxBuffer; uint8_t flags=0; uint16_t number=0; for(;ptr<=rxPtr;ptr++) { if(!isdigit(*ptr)) { if(flags==1)break; continue; } flags=1; number=number*10+(ptr-'0'); //TODO wait for new data */ } // step(atoi(USART_receive())); // XXX make anything like that }
void CALLBACK Calc() { stepx(); p(cj,0)= (float)yy[2]; // Br- 2 p(cj,1)= (float)yy[5]; // Me 5 p(cj,2)= (float)yy[7]; // Br2 7 p(cj,3)= (float)yy[9]; // Br' 9 p(cj,0)=(p(cj,0)-minpx)/(maxpx-minpx)-0.5; p(cj,1)=(p(cj,1)-minpy)/(maxpy-minpy)-0.5; p(cj,2)=(p(cj,2)-minpz)/(maxpz-minpz)-0.5; p(cj,3)=(p(cj,3)-minpw)/(maxpw-minpw); cj++; if (cj==mj) cj=0; // printf("\r %6.2f %%",t*100/mmj); fflush(stdout); if (cj % 100000 == 0) display(); }
int main(int pn, char **ps){ int i,j,pxc,c; double sx,second[4]; FILE *ic; char ss[60]; puts(" ###############################################################################"); puts(" # BZPhaseFlow - Phase Portraits Builder of the Belousov-Zhabotinsky reaction #"); puts(" # Copyright (C) Andrew B. Ryzhkov and Arcady V. Antipin, 1997-2006. Ver. 2.00 #"); puts(" # Ufa, Institute of Organic Chemistry, Laboratory of Chemical Kinetics #"); puts(" # Montreal, McGill University, Department of Oceanic and Atmospheric Sciences #"); puts(" # E-Mail: [email protected] WWW: http://RedAndr.ca/bz #"); puts(" ###############################################################################"); SetConsoleTitle("BZPhaseFlow 2.00"); /* for Borland */ // _clear87(); // _control87(MCW_EM, MCW_EM); /* defined in float.h */ if(pn<2) { ic=fopen("BZPhase.dat","rt"); if(ic!=NULL) { ReadData: do fgets(ss,80,ic); while(ss[0]==';'); sscanf(ss,"%le",&BegRange); do fgets(ss,80,ic); while(ss[0]==';'); sscanf(ss,"%d" ,&NumPoints); do fgets(ss,80,ic); while(ss[0]==';'); sscanf(ss,"%le",&DeltaSolve); do fgets(ss,80,ic); while(ss[0]==';'); sscanf(ss,"%le",&ep); tor=ep; for(i=0;i<nk;i++) { do fgets(ss,80,ic); while(ss[0]==';'); sscanf(ss,"%le",&k[i]);} for(i=0;i<n ;i++) { do fgets(ss,80,ic); while(ss[0]==';'); sscanf(ss,"%le",&x[i]);} for(i=0;i<n ;i++) { do fgets(ss,80,ic); while(ss[0]==';'); sscanf(ss,"%le",&flowc0[i]);} printf("BegRange = %5.0f, NumPoints = %6d, DeltaSolve = %2.2f, Precision = %9.2E\n", BegRange,NumPoints,DeltaSolve,ep); for(i=0;i<n ;i++) printf("k[%2d] = %E, c0[%2d] = %E, flowc0[%2d] = %E\n", i+1, k[i], i+1, x[i], i+1, flowc0[i]); for(i=n;i<nk;i++) printf("k[%2d] = %E\n", i+1, k[i]); do fgets(ss,80,ic); while(ss[0]==';'); sscanf(ss,"%le",&xflow); // flow parametr printf("Flow parameter = %14.8E\n", xflow); fclose(ic); } else if(errno==2) { help(); return 1; } else { printf("Error opening file 'bzphase.dat' #%d\n",errno); return 2; } } else { if(pn>2) { puts("Opening file"); ic=fopen(ps[1],"rt"); if(ic==NULL) { printf("Error opening file '%s' #%d",ps[1],errno); return 2; } pm=malloc(pmax*sizeof(float)*4); if( pm == NULL ) { puts( "Unable to allocate memory\n" ); return -1; } puts("Reading file"); j=0; do { fscanf(ic,"%le %le %le %le",&t,&p(j,0),&p(j,1),&p(j,2)); j++; if (j%100==0) printf("\r %d",j); fflush(stdout); if (j==pmax) break; } while (!feof(ic)); fclose(ic); printf("\n%d points is readout\n",j-1); goto Show; } else { ic=fopen(ps[1],"rt"); if(ic!=NULL) goto ReadData; printf("Error opening file '%s' #%d\n",ps[1],errno); return 2; } } tor=ep; for(i=0;i<n;i++) yy[i]=x[i]; // begin concs printf("Calculate begining range: %10.2f",BegRange); fflush(stdout); Delta=BegRange; second[0]=(double)(GetTickCount())/1000; stepx(); second[1]=(double)(GetTickCount())/1000; printf("\n"); for(i=0;i<n ;i++) printf("c[%2d] = %20.12E\n",i+1,yy[i]); i=NumPoints*sizeof(float)*4; printf("Allocate %d bytes memory for %d points\n",i,NumPoints); pm=malloc(i); if( pm == NULL ) { puts( "Unable to allocate memory\n" ); return -1; } Delta=DeltaSolve; mj=NumPoints; mmj=(int)(t+mj*Delta); printf("Calculate until %d \n",mmj); second[2]=(double)(GetTickCount())/1000; for (j=0;j<mj;j++) { p(j,0)= (float)yy[2]; // Br- 2 p(j,1)= (float)yy[5]; // Me 5 p(j,2)= (float)yy[7]; // Br2 7 p(j,3)= (float)yy[9]; // Br' 9 //printf("%e %e %e %e\n",t,yy[2],yy[5],yy[7],yy[9]); if (j%1000==0) {printf("\r %6.2f %%",t*100/mmj); fflush(stdout);} stepx(); } second[3]=(double)(GetTickCount())/1000; printf("\nCalculation complete, elapsed time: %10.3f and %10.3f seconds\n",second[1]-second[0],second[3]-second[2]); stp=ms[6]; fun=ms[7]; jac=ms[8]; lum=ms[9]; slt=ms[10]; printf("Funs: %d Jacs: %d LUm: %d Slt: %d Steps: %d\n",fun,jac,lum,slt,stp); Show: pixcount=j-1; pxc=pixcount; puts("Search Max&Min"); maxpx=minpx=p(0,0); maxpy=minpy=p(0,1); maxpz=minpz=p(0,2); maxpw=minpw=p(0,3); for(c=1;c<pxc;c++) { sx=p(c,0); if(sx>maxpx) maxpx=sx; else if(sx<minpx) minpx=sx; sx=p(c,1); if(sx>maxpy) maxpy=sx; else if(sx<minpy) minpy=sx; sx=p(c,2); if(sx>maxpz) maxpz=sx; else if(sx<minpz) minpz=sx; sx=p(c,3); if(sx>maxpw) maxpw=sx; else if(sx<minpw) minpw=sx; } printf("Min[2]=%E Max[2]=%E\n",minpx,maxpx); printf("Min[5]=%E Max[5]=%E\n",minpy,maxpy); printf("Min[7]=%E Max[7]=%E\n",minpz,maxpz); printf("Min[9]=%E Max[9]=%E\n",minpw,maxpw); if(fabs(maxpx-minpx)<1e-10 && fabs(maxpy-minpy)<1e-10 && fabs(maxpz-minpz)<1e-10) { puts("I am sorry, but you have the attracting point only."); return 1; } puts("Stretching"); for(c=0;c<pxc;c++) { p(c,0)=(p(c,0)-minpx)/(maxpx-minpx)-0.5; p(c,1)=(p(c,1)-minpy)/(maxpy-minpy)-0.5; p(c,2)=(p(c,2)-minpz)/(maxpz-minpz)-0.5; p(c,3)=(p(c,3)-minpw)/(maxpw-minpw); } maxcor=1; puts("Go to graph"); help(); printf("Flow parameter = %14.8E\n", xflow); fflush(stdout); auxInitDisplayMode (AUX_DOUBLE | AUX_RGB | AUX_ACCUM | AUX_DEPTH24); auxInitPosition (0, 0, 700, 700); auxInitWindow ("BZPhase"); if (myinit()!=0) { puts("Error OpenGL initialization."); return 2; }; auxReshapeFunc (myReshape); auxKeyFunc (AUX_UP, rotx1); auxKeyFunc (AUX_DOWN, rotx2); auxKeyFunc (AUX_LEFT, roty1); auxKeyFunc (AUX_RIGHT, roty2); auxKeyFunc (AUX_SPACE, move0); auxKeyFunc (AUX_x, rotz1); auxKeyFunc (AUX_z, rotz2); auxKeyFunc (AUX_1, dis1); auxKeyFunc (AUX_2, dis2); auxKeyFunc (AUX_3, dis3); auxKeyFunc (AUX_4, glmodesw); auxKeyFunc (AUX_v, psize1); auxKeyFunc (AUX_c, psize2); auxKeyFunc (AUX_d, movex1); auxKeyFunc (AUX_a, movex2); auxKeyFunc (AUX_w, movey1); auxKeyFunc (AUX_s, movey2); auxKeyFunc (AUX_q, movez1); auxKeyFunc (AUX_e, movez2); auxKeyFunc (AUX_m, scale); auxKeyFunc (AUX_p, print); auxKeyFunc (AUX_r, par1); auxKeyFunc (AUX_t, par2); auxKeyFunc (AUX_y, par3); auxKeyFunc (AUX_u, par4); auxKeyFunc (AUX_i, par5); auxKeyFunc (AUX_o, par6); auxKeyFunc (AUX_f, par7); auxKeyFunc (AUX_g, par8); auxKeyFunc (AUX_h, par9); auxKeyFunc (AUX_j, para); auxKeyFunc (AUX_k, parb); auxKeyFunc (AUX_l, parc); auxMouseFunc (AUX_LEFTBUTTON , AUX_MOUSEUP, Mouse_leftup); auxMouseFunc (AUX_LEFTBUTTON , AUX_MOUSELOC, Mouse_move); auxIdleFunc (Calc); auxMainLoop(display); return(0); }