Exemplo n.º 1
0
int selectc()
{
	int c, r;
	int ret;
	char h, l;
	unsigned int k_ch;
	
	c = (curchar / 16);
	r = (curchar % 16);

	for(;;)
	{
		dis_cmd("   Select Character");
		
		sel_mode();

		curchar = r + (c*16);

		display(curchar);

		h = ((mvwinch(set_win,(r+1),((c*2)+1))) & A_CHARTEXT);
		l = ((mvwinch(set_win,(r+1),((c*2)+2))) & A_CHARTEXT);
		wattron(set_win,A_REVERSE);
		mvwprintw(set_win,(r+1),((c*2)+1),"%c%c",h,l);
		wattroff(set_win,A_REVERSE);		
		wmove(set_win,(r+1),((c*2)+1));
		wrefresh(set_win);
		
		k_ch = wgetch(set_win);
		
		switch(k_ch)
		{
			case K_LEFT:
			case KEY_LEFT:
				if(c > 0)
				{
					normal_set(r,c);
					c--;
				}
				break;

			case K_DOWN:
			case KEY_DOWN:
				if(r < 15)
				{
					normal_set(r,c);
					r++;
				}
				break;

			case K_UP:
			case KEY_UP:
				if(r > 0)
				{
					normal_set(r,c);
					r--;
				}
				break;

			case K_RIGHT:
			case KEY_RIGHT:
				if(c < 15)
				{
					normal_set(r,c);
					c++;
				}
				break;

			case 'e':
			case 'E':			
				edit_mode();
				dis_cmd("   Edit Character");
				display(curchar);
				ret = edit();
				if(ret == 1)
					save_ch();
				break;

			case 'g':
			case 'G':
				dis_cmd("   Exchange: select Destination, then press RETURN or any other Key to ABORT");
				sr = r;
				sc = c;
				scurchar = curchar;
				if((curchar = sel_dest()) == -1)
				{ /* failsafe */
					r = sr;
					c = sc;
					curchar = scurchar;
				}
				else
				{ /* valid return */
					normal_set(r,c);
					c = (curchar / 16);
					r = (curchar % 16);
					xchg_ch(scurchar,curchar);
				}
				break;

			case 'm':
			case 'M':
				dis_cmd("   Move: select Destination, then press RETURN or any other Key to ABORT");
				sr = r;
				sc = c;
				scurchar = curchar;
				if((curchar = sel_dest()) == -1)
				{ /* failsafe */
					r = sr;
					c = sc;
					curchar = scurchar;
				}
				else
				{ /* valid return */
					normal_set(r,c);
					c = (curchar / 16);
					r = (curchar % 16);
					move_ch(scurchar,curchar);
				}
				break;

			case 'q':
			case 'Q':
				normal_set(r,c);
				wrefresh(set_win);			
				return(1);
				break;
			
			case 'x':
			case 'X':
				normal_set(r,c);
				wrefresh(set_win);			
				return(0);
				break;

			case 0x0c:
				wrefresh(curscr);
				break;
			
			default:
				beep();
				break;
				
		}
	}
}
Exemplo n.º 2
0
int main()
{
	init_MCU();
	sel_mode();
	
	while (1)
	{
		switch (pattern)
		{
			case 1:
			if ( check_crossline() ) //Be 90
			{
				pattern = 21;
				break;
			}
			if ( check_rightline() ) // Chuyen lan phai
			{
				pattern = 51;
				break;
			}
			if ( check_leftline() ) // Chuyen lan trai
			{
				pattern = 61;
				break;
			}
			led7(10);
			set_encoder(19);
			switch (doc_cam_bien(0b01111110))
			{
				case 0b01111110:
				toc_do(0, 0);
				goc(0);
				break;
				case 0b00011000:	// Chay thang
				goc( 0 );
				toc_do( 100 , 100 );
				break;

				//lech phai
				case 0b00011100:
				case 0b00001000:
				toc_do(90, 80);
				goc(8);
				break;
				case 0b00001100:
				toc_do(90, 70);
				goc(10);
				break;
				case 0b00001110:
				case 0b00000100:
				toc_do(90, 60);
				goc(12);
				break;
				case 0b00000110:
				toc_do(90, 50);
				goc(15);
				break;
				case 0b00000010:
				toc_do(90, 30);
				goc(20);
				pattern = 11;	//Lệch phải góc lớn
				break;

				//////////////////////////////////////////

				//lech trai
				case 0b00111000:
				case 0b00010000:
				toc_do(80, 90);
				goc(-8);
				break;
				case 0b00110000:
				toc_do(70, 90);
				goc(-10);
				break;
				case 0b01110000:
				case 0b00100000:
				toc_do(60, 90);
				goc(-12);
				break;
				case 0b01100000:
				toc_do(50, 90);
				goc(-15);
				break;
				case 0b01000000:
				toc_do(30, 90);
				goc(-20);
				pattern = 12; //Lệch trái góc lớn
				break;
				default:
				break;
			}
			break;

			case 11: 	//Lệch phải góc lớn
			led7(11);
			set_encoder(23);
			switch (doc_cam_bien(0b11001100))
			{
				case 0b11000000:
				toc_do(95, 15);
				goc(75);
				break;
				case 0b10000000:
				toc_do(95, 20);
				goc(51);
				break;
				case 0b00000000:
				toc_do(95, 25);
				goc(48);
				break;
				case 0b00000100:
				toc_do(95, 25);
				goc(37);
				break;
				case 0b00001100:
				toc_do(95, 25);
				goc(29);
				pattern = 1;
				break;
				default: pattern = 11;
			}
			break;
			case 12: //Lệch trái góc lớn
			led7(12);
			set_encoder(23);
			switch (doc_cam_bien(0b00110011))
			{
				case 0b00000011:
				toc_do(15, 95);
				goc(-73);
				break;
				case 0b00000001:
				toc_do(20, 95);
				goc(-50);
				break;
				case 0b00000000:
				toc_do(25, 95);
				goc(-47);
				break;
				case 0b00100000:
				toc_do(25, 95);
				goc(-36);
				break;
				case 0b00110000:
				toc_do(25, 95);
				goc(-28);
				pattern = 1;
				break;
				default: pattern = 12;
			}
			break;

			case 21:		//Xử lý khi gặp vạch tín hiệu cua vuông đầu tiên
			led7(18);
			set_encoder(20);
			goc( 0 );
			toc_do( 60 , 60);
			pattern = 22;
			cnt_1ms = 0;
			xung = 0;
			break;

			case 22:		// Delay hết vạch
			led7(22);
			set_encoder(20);
			goc( 0 );
			toc_do( 60 , 60);
			if ( cnt_1ms > 150 || xung > 10 )
			{
				pattern = 23;
				cnt_1ms = 0;
				xung = 0;
			}
			break;

			case 23:
			led7(23);
			//cua trái
			if ( (xung > 100) && ((doc_cam_bien(0b11111111) == 0b11111000)  || (doc_cam_bien(0b11111111) == 0b11110000) || (doc_cam_bien(0b11111111) == 0b11100000) || (doc_cam_bien(0b11111111) == 0b11111100)))	// Neu gap tin hieu nay la goc cua 90 trai thi be
			{
				pattern = 24;
				xung = 0;
				cnt_1ms = 0;
				break;
			}
			//cua phải
			if (  (xung > 100) &&   ((doc_cam_bien(0b11111111) == 0b00011111 ) || (doc_cam_bien(0b11111111) == 0b00000111) || (doc_cam_bien(0b11111111) == 0b00001111) || (doc_cam_bien(0b11111111) == 0b00111111))) // Neu gap tin hieu nay la goc cua 90 phai thi be
			{
				pattern = 25;
				xung = 0;
				cnt_1ms = 0;
				break;
			}
			if ( (xung > 30) && (xung < 100) && check_crossline() == 1)
			{
				pattern = 71;
				xung = 0;
				cnt_1ms = 0;
				break;
			}
			// Nguoc lai thi chinh thang cho xe
			switch (doc_cam_bien(0b01111110))
			{
				case 0b00011000:
				goc( 0 );
				toc_do(30, 30 );
				break;
				//lech phai
				case 0b00001000:
				toc_do(23, 3);
				goc(8);
				break;
				case 0b00001100:
				toc_do(23, -3);
				goc(10);
				break;
				case 0b00000100:
				toc_do(23, -8);
				goc(13);
				break;
				case 0b00000110:
				case 0b00000010:
				toc_do(23, -13);
				goc(18);
				break;
				////////////////////////////////
				case 0b00010000:
				toc_do(5, 20);
				goc(-8);
				break;
				case 0b00110000:
				toc_do(0, 20);
				goc(-10);
				break;
				case 0b00100000:
				toc_do(-5, 20);
				goc(-13);
				break;
				case 0b01100000:
				case 0b01000000:
				toc_do(10, 20);
				goc(-18);
				break;
				default:
				break;
			}
			break;

			case 24://delay het vach line TRAI
			set_encoder(10);
			toc_do(50, 50);
			if ( (xung > 100) && ((doc_cam_bien(0b00000111) == 0b00000111) || (doc_cam_bien(0b00001111) == 0b00001111)))
			{
				pattern = 23 ;
				break;
			}
			if (cnt_1ms > 100 || xung > 1)
			{
				pattern = 26;
				break;
			}
			break;

			case 25:	//delay het vach line PHAI
			set_encoder(10);
			toc_do(50, 50);
			if ( (xung > 100 ) && ((doc_cam_bien(0b11100000) == 0b11100000) || (doc_cam_bien(0b11110000) == 0b11110000)))
			{
				pattern = 23 ;
				break;
			}
			if (cnt_1ms > 100 || xung > 1)
			{
				pattern = 27;
				break;
			}
			break;

			case 26: //vuông trái
			led7(24);
			goc( - 140 );
			set_encoder(8);
			toc_do( -20 , 90 );
			led7(1);
			pattern = 31;
			cnt_1ms = 0;
			break;

			case 27://vuông phải
			led7(25);
			goc( 140 );
			set_encoder(8);
			toc_do( 90 , -20 );
			led7(2);
			pattern = 41;
			cnt_1ms = 0;
			break;


			case 31:	//delay cho xe kịp bẻ vuông trái
			led7(31);
			if ( cnt_1ms > 50 )
			{
				pattern = 32;
				cnt_1ms = 0;
			}
			break;

			case 32:	//chờ tín hiệu để về trường hợp chạy thẳng
			led7(32);
			if ( doc_cam_bien(0b11100111) == 0b00100000 )
			{
				pattern = 1;
				cnt_1ms = 0;
			}
			break;

			case 41: //delay cho xe kịp bẻ vuông phải
			led7(41);
			if ( cnt_1ms > 50 )
			{
				pattern = 42;
				cnt_1ms = 0;
			}
			break;

			case 42: //chờ tín hiệu để về trường hợp chạy thẳng
			led7(42);
			if ( doc_cam_bien(0b11100111) == 0b00000100 )
			{
				pattern = 1;
				cnt_1ms = 0;
			}
			break;

			case 51: //xử lý khi gặp vạch tín hiệu chuyển làn PHẢI
			set_encoder(20);
			if ((doc_cam_bien(0b11100000) == 0b11100000) || (doc_cam_bien(0b11110000) == 0b11110000))
			{
				pattern = 21 ;
				break;
			}
			led7(51);
			goc( 0 );
			toc_do( 70 , 70 );
			pattern = 52;
			cnt_1ms = 0;
			xung = 0;
			break;

			case 52: //delay hết vạch
			if ( cnt_1ms > 100 || xung > 10)
			{
				pattern = 53;
				cnt_1ms = 0;
			}
			if ((doc_cam_bien(0b11100000) == 0b11100000) || (doc_cam_bien(0b11110000) == 0b11110000))
			{
				pattern = 21 ;
				break;
			}
			break;

			case 53: //hết vạch trắng
			if ( doc_cam_bien(0b11111111) == 0b00000000 )
			{
				goc( 75 );
				toc_do( 60 , 50 );
				pattern = 54;
				cnt_1ms = 0;
				break;
			}
			switch ( doc_cam_bien(0b11100111) )
			{
				case 0x00:
				goc( 0 );
				toc_do( 30 , 30 );
				break;
				case 0x04:
				case 0x06:
				case 0x07:
				case 0x03:
				goc( 15 );
				toc_do( 30 , 20 );
				break;
				case 0x20:
				case 0x60:
				case 0xe0:
				case 0xc0:
				goc( -15 );
				toc_do( 20 , 30 );
				break;
				default:
				break;
			}
			break;

			case 54: //bắt được line, chuyển về chạy thẳng
			if ( doc_cam_bien( 0b00001100 ) == 0b00001100 )
			{
				pattern = 1;
				cnt_1ms = 0;
				led7(0);
			}
			break;

			case 61:	//xử lý khi gặp vạch tín hiệu chuyển làn TRÁI
			set_encoder(20);
			if ( (doc_cam_bien(0b00000111) == 0b00000111) || (doc_cam_bien(0b00001111) == 0b00001111) )
			{
				pattern = 21 ;
				break;
			}
			led7(61);
			goc( 0 );
			toc_do( 90 , 90 );
			pattern = 62;
			cnt_1ms = 0;
			xung = 0;
			break;

			case 62: //delay hết vạch
			if ( cnt_1ms > 100 || xung > 10)
			{
				pattern = 63;
				cnt_1ms = 0;
			}
			if ((doc_cam_bien(0b00000111) == 0b00000111) || (doc_cam_bien(0b00001111) == 0b00001111))
			{
				pattern = 21 ;
				break;
			}
			break;

			case 63: //hết vạch trắng
			if ( doc_cam_bien(0b11111111) == 0x00 )
			{
				goc( -75 );
				toc_do( 50 , 60 );
				pattern = 64;
				cnt_1ms = 0;
				break;
			}
			switch ( doc_cam_bien(0b11100111) )
			{
				case 0x00:
				goc( 0 );
				toc_do( 30 , 30 );
				break;
				case 0x04:
				case 0x06:
				case 0x07:
				case 0x03:
				goc( 15 );
				toc_do( 30 , 20 );
				break;
				case 0x20:
				case 0x60:
				case 0xe0:
				case 0xc0:
				goc( -15 );
				toc_do( 20 , 30 );
				break;
				default:
				break;
			}
			break;

			case 64: //bắt được line, chuyển về chạy thẳng
			if ( doc_cam_bien( 0b00110000 ) == 0b00110000 )
			{
				pattern = 1;
				cnt_1ms = 0;
				led7(0);
			}
			break;

			case 71: // Delay het vach
			set_encoder(30);
			toc_do(100, 100);
			led7(71);
			if ( cnt_1ms > 100 || xung > 10)
			{
				pattern = 72;
				cnt_1ms = 0;
			}
			break;

			case 72:
			if (doc_cam_bien(0xff) == 0b00000000)
			{
				goc(0);
				toc_do(100, 100);
				pattern = 73;
				break;
			}

			switch (doc_cam_bien(0b01111110))
			{
				case 0b00011000:
				goc( 0 );
				toc_do(100, 100 );
				break;
				//lech phai
				case 0b00001000:
				toc_do(90, 17);
				goc(8);
				break;
				case 0b00001100:
				toc_do(90, 70);
				goc(13);
				break;
				case 0b00000100:
				toc_do(90, 65);
				goc(18);
				break;
				case 0b00000110:
				case 0b00000010:
				toc_do(90, 60);
				goc(26);
				break;
				//////////////////////////////////////////////////////////////////////////
				case 0b00010000:
				toc_do(75, 90);
				goc(-8);
				break;
				case 0b00110000:
				toc_do(70, 90);
				goc(-13);
				break;
				case 0b00100000:
				toc_do(65, 90);
				goc(-18);
				break;
				case 0b01100000:
				case 0b01000000:
				toc_do(60, 90);
				goc(-26);
				break;
				default:
				break;
			}
			break;
			case 73:
			goc(0);
			toc_do(100, 100);
			if (doc_cam_bien(0b11111111) > 0)
			{
				pattern = 1;
			}
			break;

			default:
			pattern = 1;
			break;
		}
	}

}