📄 main.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 + -