Esempio n. 1
0
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
}
Esempio n. 2
0
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();

}
Esempio n. 3
0
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);
}