⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 用AVR单片机来控制数字摄像头
💻 C
字号:
/*
 * ----------------------------------------------------------------------------
 * Main Program of Digital Project 
 *
 * By I馻ki Navarro Oiza
 * Spring 2004
 * ----------------------------------------------------------------------------
 */
 
 #include "main.h"
 
 int main(void) {
  char *text1 = (char *)malloc(25);
  char *line = (char *)malloc(25); 
  char *command = (char *)malloc(25);
  char *header = (char *)malloc(14);
  char *infoheader = (char *)malloc(40);
  
  char *row = (char *)malloc(89);
  
  char help[] = "ACK\n\nHELP MENU-Commands:\n\nRR arg1\nWR arg1 arg2\nREADALL\nRESET\nMIRRORON\nMIRROROOFF\nPHOTO\nTESTBMP\nPANORAMIC\nSERVO arg1\nSCAN\nMOVESERVO\nTRACK\n";
  char intro[] = "\n....Control Camera Program....\nInaki Navarro Oiza (c)2004\nType HELP and return for help\n";
  int arg1;
  int arg2;
  int center = -1;
  int cont = 1;
  char key = ' ';
  
  i2c_init(SYSCLK);
  usart_init(USART_BAUDRATE(115200,SYSCLK));
  servo_init();
  camports_init();
  
  usart_puts("\n          ");
  usart_puts(__DATE__);
  usart_puts("  ");
  usart_puts(__TIME__);
  usart_puts(intro);
  
  write_register(0x12, read_register(0x12)|0X80);

  while(1){
  readline(line);
  sscanf(line,"%s",command);

   
  if(strcmp(command,"RR")==0){
  	  if(sscanf(line,"%s%i",command,&arg1)==2){
	    usart_puts("ACK\n");
	    readregandprint(arg1,text1);
	  } else usart_puts("NCK\n");
  
  } else if(strcmp(command,"WR")==0){
  
      if(sscanf(line,"%s%i%i",command,&arg1,&arg2)==3){
	    usart_puts("ACK\n");
	    write_register(arg1, arg2);
	  } else usart_puts("NCK\n");
  
  } else if(strcmp(command,"RESET")==0){
  	    usart_puts("ACK\n");		
		write_register(0x12, read_register(0x12)|0X80);
	    
  } else if(strcmp(command,"MIRRORON")==0){
  	    usart_puts("ACK\n");		
		write_register(0x12, read_register(0x12)|0X40);
	    
  } else if(strcmp(command,"MIRROROFF")==0){
  	    usart_puts("ACK\n");		
		write_register(0x12, read_register(0x12)&0XBF);
	    
  } else if(strcmp(command,"HELP")==0){
		usart_puts(help);
  }else if(strcmp(command,"READALL")==0){
		usart_puts("ACK\n");
		readall(text1);
  }else if(strcmp(command,"PHOTO")==0){
        createheader(header,352,244);
        createinfoheader(infoheader,352,244);
		usart_putnumchars(header, 14);
		usart_putnumchars(infoheader, 40);
		sendtable();
		write_register(0x11, 0X10);
		cli();
		photo();
		sei();
		write_register(0x11, 0X00);
	  
  }else if(strcmp(command,"TESTBMP")==0){
     createheader(header,352,244);
     createinfoheader(infoheader,352,244);
  	 usart_putnumchars(header, 14);
	 usart_putnumchars(infoheader, 40);
	 sendtable();
	 senddata();
  }else if(strcmp(command,"PANORAMIC")==0){
      set_servo_pos(950);
	  Delay_10ms(250);
      createheader(header,1901,244);
      createinfoheader(infoheader,1901,244);
  	  usart_putnumchars(header, 14);
	  usart_putnumchars(infoheader, 40);
	  sendtable();
	  write_register(0x11, 0X10);
  	  cli();
	  panoramic();
	  sei();
	  write_register(0x11, 0X00);
	  
  }else if(strcmp(command,"SERVO")==0){
  	  if(sscanf(line,"%s%i",command,&arg1)==2){
	    usart_puts("ACK\n");
	    set_servo_pos(arg1);
	  } else usart_puts("NCK\n");
  }else if(strcmp(command,"SCAN")==0){
      usart_puts("ACK\n");
  	  set_servo_pos(-950);
	  Delay_10ms(250);
	  for(int i=-950;i<950;i=i+1){
		Delay_1ms(30);
		set_servo_pos(i);
	  }
	  Delay_10ms(100);
	  for(int i=-950;i<950;i=i+1){
		Delay_1ms(30);
		set_servo_pos(-i);
	  }
	  set_servo_pos(0);
	  Delay_10ms(125);
    
  }else if(strcmp(command,"MOVESERVO")==0){
  	  usart_puts("ACK\n");
	  while(cont){
	   if (usart_unread_data()) {
	    key = usart_getc();
		if(key=='P') set_servo_pos(get_servo_pos()-10);
	    if(key=='O') set_servo_pos(get_servo_pos()+10);
		if(key==' ' || key == '\r') cont = 0;
	   }
	  }
	  cont = 1;
	  usart_puts("\nEND\n");
  }else if(strcmp(command,"TRACK")==0){
      usart_puts("ACK\n");
	  while(cont){
	   write_register(0x11, 0x3F);
	   cli();
	   center = getcenter(row);
	   sei();
	   write_register(0x11, 0x00);
	   if(center>49 && center<=54) set_servo_pos(get_servo_pos()-10);
	   if(center>54 && center<=59) set_servo_pos(get_servo_pos()-20);
	   if(center>59) set_servo_pos(get_servo_pos()-40);
	   if(center<39 && center>=34 && center!=-1) set_servo_pos(get_servo_pos()+10);
	   if(center<34 && center>=29 && center!=-1) set_servo_pos(get_servo_pos()+20);
	   if(center<29 && center!=-1) set_servo_pos(get_servo_pos()+40);
	   sprintf(text1,"Center = %i\n",center);
	   usart_puts(text1);
	   if (usart_unread_data()) {
	    if(usart_getc()==' ') cont =0;
	   }
	  }
	  cont = 1;
  }else {
      usart_puts("NCK\n");
	  if(strcmp(command,"a")>=0){   //
	    usart_puts("<CAPITAL LETTERS>\n");
	  }
	  
  
  }
 
  }
  return 0;
}

void readline(char *estr){
  int finnished = 0;
  int i = 0;
  char *p;
  p = estr;
  
  for (int j = 0;j<24;j++){
    *p = ' ';
  }
  
  p = estr;
  
  while((i<=40)&&(!finnished)){
     if (usart_unread_data()){ 
	   *p = usart_getc();       if(*p=='\r') finnished = 1;
	   i++;
	   p++;
	 }	
  }
  *p = '\0';
  
  return;
}

void readall(char *text){

  int data;
  for(int i=0;i<=0x50;i++){
    data = read_register(i);
    sprintf(text,"Register = %X  Value = %X  \n",i,data);
    usart_puts(text); 
  }

}

void readregandprint(int reg, char *text){
  int data;
  data = read_register(reg);
  sprintf(text,"Register = %X  Value = %X  \n",reg,data);
  usart_puts(text); 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -