亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rp6base_selftest.c

?? RP6機器人范例程序。包括移動
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* 
 * ****************************************************************************
 * RP6 ROBOT SYSTEM - ROBOT BASE EXAMPLES
 * ****************************************************************************
 * Example: SELFTEST PROGRAM
 * Author(s): Dominik S. Herwald
 * ****************************************************************************
 * Description:
 *
 * Test routines for all RP6 components. 
 *
 * ----------------------------------------------------------------------
 * UPDATE 25.09.2007 - The input routines have been changed to work with
 * new RP6 UART Library functions. Now the User input for the advanced
 * speed tests are much easier and there are some additional features. 
 * Please look at the text instructions you see before the tests start. 
 * ----------------------------------------------------------------------
 * 
 * You can compile this in two different versions. The FACTORY Version is
 * more restrictive with the voltage sensor and tests if voltage is about 
 * 7.20V. 
 * You can not guarantee this with standard accumulators of course and thus
 * you would need a laboratory power supply - which most of the home users
 * will not have. 
 *
 * --------
 *
 * Yes I know - this program has not the most beautyful code on earth... 
 * To be honest it is quite ugly ;) 
 * All the Text output is just a waste of programspace and this is 
 * intentionally to get a large program ;) 
 *
 * It is a good demonstration how big your programs can get! (and this
 * program only fills 21KB of the 30KB)
 * Consider that every single character of a String consumes one byte 
 * of program space!
 * Also look at it in the hexfile viewer in RP6Loader - nearly half the 
 * program memory is full with ASCII Text.
 *  
 *
 * ****************************************************************************
 */
 
 
/*****************************************************************************/
// Includes:

#include "RP6RobotBaseLib.h" 	

/*****************************************************************************/

// Uncomment only ONE of the following definitions:
//#define FACTORY 
#define HOME

/*****************************************************************************/

void done(void)
{
	writeString_P("Done!\n"); 
}

void bars(uint8_t number)
{
	uint8_t cnt;
	writeChar('\n');
	for(;number > 0; writeChar('\n'), number--)
		for(cnt = 69; cnt ; cnt--)
			writeChar('#');
}

void test(uint8_t number)
{
	bars(2);
	writeString_P("#### TEST #");
	writeInteger(number, DEC);
	writeString_P(" ####\n");
}

void printUBat(uint16_t uBat)
{
	writeIntegerLength((((uBat/102.4f)+0.1f)), DEC, 2);
	writeChar('.');
	writeIntegerLength((((uBat/1.024f)+10)), DEC, 2);
	writeChar('V');
}

char receiveBuffer[UART_RECEIVE_BUFFER_SIZE];

uint8_t getInputLine(void)
{ 
	static uint8_t buffer_pos = 0;
	if(getBufferLength()) 
	{							
		receiveBuffer[buffer_pos] = readChar();
		if(receiveBuffer[buffer_pos]=='\n')
		{
			receiveBuffer[buffer_pos]='\0'; 
			buffer_pos = 0;
			return 1;
		}
		else if(buffer_pos >= 32)
		{									
			receiveBuffer[32]='\0';	
			buffer_pos = 0;
			return 2;
		}
		buffer_pos++;
	}
	return 0;
}

void enterString(void)
{
	while(!getInputLine());
}

uint8_t enterX(void)
{
	enterString();
	return receiveBuffer[0]=='x' || receiveBuffer[0]=='X';
}

/*****************************************************************************/
//

void testPowerOn(void)
{
	test(1);
	writeString_P("\n### POWER ON TEST ###\n");
	writeString_P("Please watch the yellow PowerOn LED and verify that it lights up!\n");
	writeString_P("(it will flash a few times!)\n");
	mSleep(1000);
	powerON();
	mSleep(1000);
	powerOFF();
	mSleep(1000);
	powerON();
	mSleep(2000);
	powerOFF();
	mSleep(500);
	powerON();
	mSleep(500);
	powerOFF();
	done();
}

/*****************************************************************************/
//

void testLEDs(void)
{
	test(2);
	writeString_P("\n### LED Test ###\n");
	writeString_P("Please watch the LEDs and verify that they all work!\n");
	mSleep(1000);
	setLEDs(0b111111);
	mSleep(500);
	setLEDs(0b000000);
	mSleep(500);
	setLEDs(0b111111);
	mSleep(500);
	setLEDs(0b000000);
	mSleep(250);
	uint8_t testLEDs = 1;
	uint8_t i;
	for(i = 0; i < 12; i++){
		setLEDs(testLEDs); 
		testLEDs <<= 1; 
		if(testLEDs > 63)
			testLEDs = 1; 	
		mSleep(400);
	}
	setLEDs(0b111111);
	mSleep(400);
	setLEDs(0b000000);
	done();
}

/*****************************************************************************/
//

void testVoltageSensor(void)
{
	test(3);
	writeString_P("\n### Voltage Sensor Test ###\n");
#ifdef FACTORY
	writeString_P("Please adjust the **laboratory power supply** to 7.20V!\n");
#endif
#ifdef HOME
	writeString_P("Be sure that you are using good accumulators!\n");
	writeString_P("\n### Enter \"x\" and hit return to START this test!\n\n");
	enterX();
    //receiveBytesToBuffer(1, &receiveBuffer[0]);
#endif
	writeString_P("Performing 10 measurements:\n");
	uint16_t ubat;
	uint8_t i;
	for(i = 1; i <= 10; i++)
	{
		writeString_P("Measurement #"); 
		writeInteger(i, DEC);
		writeString_P(": ");
		ubat = readADC(ADC_BAT);
		printUBat(ubat);
#ifdef FACTORY
		if(ubat >= 700 && ubat <= 770)
		{
			writeString_P(" --> OK!\n");
		}
		else 
		{
			writeString_P("\n####### ERROR: VOLTAGE IS TOO ");
			if(ubat < 700) 
			{
				writeString_P("LOW");
			}
			else if(ubat > 770)
			{
				writeString_P("HIGH");
			}
			writeString_P(" (should be min. 6.90V to max. 7.60V)!\n");
		}
#endif
#ifdef HOME
		if(ubat >= 570 && ubat <= 970)
		{
			writeString_P(" --> OK!\n");
		}
		else 
		{
			writeString_P("\nWARNING: VOLTAGE IS TOO ");
			if(ubat < 570) 
			{
				writeString_P("LOW");
			}
			else if(ubat > 970)
			{
				writeString_P("HIGH");
			}
			writeString_P(" (should be min. 5.50V to max. 9.50V)!\n");
		}
#endif
		mSleep(200);
	}
	done();
}

/*****************************************************************************/
//

void testBumpers(void)
{
	test(4);
	writeString_P("\nBumper Test\n");
	writeString_P("Please hit both bumpers and verify \n");
	writeString_P("that both Bumpers are working properly!\n\n");
	writeString_P("### The Test is running now.\n### Enter \"x\" and hit return to STOP this test!\n\n");
	clearReceptionBuffer();
	while(true)
	{
		if(getInputLine())
			break;
		
		static uint8_t info_left = false;
		static uint8_t info_right = false;
		uint8_t bumper_left = getBumperLeft();
		uint8_t bumper_right = getBumperRight();
		
		if(bumper_left) 
		{
			if(!info_left) 
			{			 
				writeString_P("OBSTACLE: LEFT!\n");
				info_left = true;
			}
		}
		else if(info_left) 
		{
			writeString_P("FREE: LEFT!\n");
			info_left = false;
		}
		if(bumper_right) 
		{
			if(!info_right) 
			{
				writeString_P("OBSTACLE: RIGHT!\n");
				info_right = true;
			}
		}
		else if(info_right) 
		{
			writeString_P("FREE: RIGHT!\n");
			info_right = false;
		}
	    statusLEDs.LED4 = (!bumper_left);
		statusLEDs.LED1 = (!bumper_right);
		updateStatusLEDs();
		mSleep(50);
	}
	setLEDs(0b000000);
	done();
}

/*****************************************************************************/
// 

void testLightSensors(void)
{
	test(5);
	writeString_P("\n### Light Sensor Test ###\n");
	writeString_P("Please get yourself a small flashlight!\n");
	writeString_P("While the test runs, move it in front of the Robot\n");
	writeString_P("and watch if the values change accordingly!\n\n");
#ifdef HOME
	writeString_P("### Enter \"x\" and hit return when you are ready!\n");
	enterX();
#endif
	writeString_P("### The Test is running now.\n### Enter \"x\" and hit return to STOP this test!\n\n");
	mSleep(1000);
	startStopwatch1();
	startStopwatch2();
	writeString_P("Performing measurements...:\n");
	uint16_t sens_l;
	uint16_t sens_r;
	clearReceptionBuffer();
	while(true)
	{
		if(getInputLine())
			break;
		
		if(getStopwatch1() > 50) 
		{		
			sens_l = readADC(ADC_LS_L);
			sens_r = readADC(ADC_LS_R);
			
			int16_t dif = ((int16_t)(sens_l - sens_r));
			if(dif > 160) dif = 160;
			if(dif < -160) dif = -160;
	
			// Set LEDs - a small bargraph display that shows which sensor has detected
			// brighter light - and how much brighter it is:
			if(dif > 140)
				setLEDs(0b111000);
			else if(dif > 75)
				setLEDs(0b011000);
			else if(dif > 35)
				setLEDs(0b001000);
			else if(dif > -35)
				setLEDs(0b001001);
			else if(dif > -75)
				setLEDs(0b000001);
			else if(dif > -140)
				setLEDs(0b000011);
			else 
				setLEDs(0b000111);
			setStopwatch1(0);
		}
		
		if(getStopwatch2() > 250) 
		{	
			sens_l = readADC(ADC_LS_L);
			sens_r = readADC(ADC_LS_R);

			writeString_P("Left: ");
			writeIntegerLength(sens_l, DEC, 4);
			writeString_P(",  Right: ");
			writeIntegerLength(sens_r, DEC, 4);
			writeChar('\n');
			setStopwatch2(0);
		}
	}
	stopStopwatch1();
	stopStopwatch2();
	done();
} 

/*****************************************************************************/
//

uint8_t RC5_data;
uint8_t RC5_error;
uint8_t RC5_test;

void receiveRC5Data(RC5data_t rc5data)
{
	writeString_P("RX RC5 Packet --> Toggle Bit:");
	writeChar(rc5data.toggle_bit + '0');
	writeString_P(" | Device Address:");
	writeInteger(rc5data.device, DEC);
	writeString_P(" | Key Code:");
	writeInteger(rc5data.key_code, DEC);
	
	if(RC5_test==2)
	{
		writeString_P(" --> ");
		if(rc5data.key_code == RC5_data 
			&& rc5data.device == (RC5_data & 0b11111) 
			&& rc5data.toggle_bit == ((RC5_data>>5)&1))
		{
			writeString_P("OK!");
			RC5_error = false;
			RC5_test = 10;
		}
		else
		{
			writeString_P("### ERROR!!! ###");
			RC5_error = true;
			RC5_test = 5;
		}
	}
	writeChar('\n');
}


void testACS(void)
{
	test(6);
	writeString_P("\nACS Test\n");
	writeString_P("Please move your hand or other obstacles in front of the Robot\n");
	writeString_P("and verify that both ACS channels are working properly!\n\n");
	writeString_P("ACS is set to MAXIMUM power/range!\n\n");
	
	writeString_P("You can also send RC5 Codes with a TV Remote Control\n");
	writeString_P("to the RP6 - it will display the Toggle Bit, Device Adress\n");
	writeString_P("and Keycode of the RC5 Transmission!\n");
	writeString_P("Make sure your remote control transmits in RC5 and not\n");
	writeString_P("SIRCS or RECS80 etc.! There are several other formats that will NOT work!\n\n");
	writeString_P("### The Test is running now.\n### Enter \"x\" and hit return to STOP this test!\n\n");

	powerON();
	setACSPwrHigh();

	clearReceptionBuffer();
	while(true)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
狠狠色综合播放一区二区| 久久99在线观看| 8v天堂国产在线一区二区| 国产精一品亚洲二区在线视频| 国产精品久久一级| www国产精品av| 欧美浪妇xxxx高跟鞋交| eeuss鲁一区二区三区| 麻豆国产欧美日韩综合精品二区| 国产精品免费看片| 久久综合丝袜日本网| 91精品综合久久久久久| 91精品1区2区| 91尤物视频在线观看| 宅男在线国产精品| 日本乱人伦一区| 国产精品一区2区| 久久国产精品第一页| 五月天中文字幕一区二区| 亚洲天堂免费看| 国产精品国产自产拍高清av| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美成人艳星乳罩| 日韩一级视频免费观看在线| 一本大道久久a久久综合| 国产高清精品久久久久| 美腿丝袜亚洲综合| 亚洲中国最大av网站| 亚洲女性喷水在线观看一区| 中文文精品字幕一区二区| 久久久美女艺术照精彩视频福利播放| 91精品国产色综合久久| 欧美色欧美亚洲另类二区| 日本精品免费观看高清观看| 91在线丨porny丨国产| 99精品欧美一区二区三区小说 | 91精品国产综合久久精品| 欧美视频在线一区| 欧美性xxxxxx少妇| 在线观看亚洲精品视频| 欧美在线不卡视频| 欧美日韩一区二区三区在线| 欧美日韩一区成人| 欧美日韩aaa| 欧美日本一区二区三区| 91福利国产成人精品照片| 成人福利视频网站| 成人免费视频免费观看| 亚洲福利视频导航| 日本大胆欧美人术艺术动态| 三级在线观看一区二区| 天天色综合成人网| 日韩国产高清在线| 欧美在线一二三| 免费高清在线一区| 日韩av一二三| 午夜精品福利一区二区蜜股av | 奇米一区二区三区av| 天天做天天摸天天爽国产一区| 亚洲综合色区另类av| 亚洲一级二级在线| 日韩高清在线不卡| 日日夜夜一区二区| 水野朝阳av一区二区三区| 日韩制服丝袜av| 麻豆精品国产91久久久久久| 欧美日韩大陆一区二区| 欧美精品色一区二区三区| 欧美一区二区三区在线电影| 日韩一区二区精品葵司在线| 精品久久久久久久久久久久久久久久久| 日韩视频一区二区在线观看| 精品免费视频.| 国产丝袜在线精品| 亚洲欧美综合色| 奇米在线7777在线精品 | 国产欧美一区二区三区在线看蜜臀| 久久久久久一级片| 中文字幕视频一区二区三区久| 亚洲男人的天堂在线aⅴ视频| 一区二区在线观看视频在线观看| 亚洲图片一区二区| 蜜桃av一区二区三区电影| 国产在线播放一区二区三区| www.色精品| 欧美日本国产一区| 国产午夜精品理论片a级大结局 | 国产精品天干天干在线综合| 亚洲欧美一区二区三区极速播放 | 国产精品正在播放| av日韩在线网站| 欧美日韩国产小视频| 精品久久久久久久久久久久久久久久久| 久久综合九色综合97婷婷| 亚洲最快最全在线视频| 精品一二三四区| 91久久精品网| 精品福利在线导航| 亚洲精品菠萝久久久久久久| 日本不卡不码高清免费观看| 成人av在线一区二区| 91精品国产91综合久久蜜臀| 中文字幕精品一区 | 日本sm残虐另类| 成人99免费视频| 欧美日韩一二三| 国产精品免费av| 久久国产精品99久久人人澡| 色综合欧美在线| 久久久精品日韩欧美| 亚洲第一成人在线| 成人精品gif动图一区| 欧美一区二区三级| 亚洲日本丝袜连裤袜办公室| 蓝色福利精品导航| 欧美影院精品一区| ●精品国产综合乱码久久久久| 2019国产精品| 国产精品久久久久久久久免费丝袜 | 国产精品一区二区男女羞羞无遮挡| 在线亚洲免费视频| 中文字幕+乱码+中文字幕一区| 欧美aⅴ一区二区三区视频| 99视频有精品| 久久久久久久久久久久久夜| 麻豆一区二区三区| 欧美日韩久久一区| 自拍偷拍亚洲综合| 成人丝袜视频网| 久久人人97超碰com| 午夜精品影院在线观看| 91丝袜美腿高跟国产极品老师 | 国产精品国产自产拍高清av王其| 美女视频黄免费的久久| 欧美色涩在线第一页| 亚洲精品美腿丝袜| 99久久伊人网影院| 国产精品欧美一区二区三区| 国产一区二区伦理| 日韩三级视频在线观看| 亚洲综合色丁香婷婷六月图片| 色一情一伦一子一伦一区| 亚洲少妇最新在线视频| 成人免费的视频| 国产精品日产欧美久久久久| 风间由美一区二区av101| 久久久蜜桃精品| 国产大片一区二区| 久久蜜桃一区二区| 国产一区二区电影| 日韩精品一区二区三区蜜臀| 免费美女久久99| 色综合久久久网| 欧美高清在线一区二区| 国产成人h网站| 久久新电视剧免费观看| 豆国产96在线|亚洲| 中文字幕一区免费在线观看| caoporen国产精品视频| 亚洲三级在线观看| 在线观看日韩高清av| 视频一区在线播放| 日韩免费成人网| 国产成人啪免费观看软件| 久久尤物电影视频在线观看| 99久久精品免费观看| 欧美aⅴ一区二区三区视频| 欧美日韩一区二区三区四区五区| 亚洲欧美激情插| 欧美一级日韩免费不卡| 狠狠色狠狠色综合| 中文字幕亚洲电影| 欧美日韩亚洲不卡| 久久99热这里只有精品| 日本一区二区三区久久久久久久久不| 风间由美一区二区三区在线观看| 亚洲视频一区二区免费在线观看 | 狠狠色狠狠色综合日日91app| 久久综合99re88久久爱| 91麻豆成人久久精品二区三区| 香蕉久久一区二区不卡无毒影院| 日韩女优毛片在线| 久草这里只有精品视频| 亚洲欧洲成人av每日更新| 在线观看免费成人| 国产一区二区三区综合| 亚洲人成亚洲人成在线观看图片| 玉足女爽爽91| 欧美一区二区三区精品| 国产99精品国产| 亚洲第一狼人社区| 国产精品久久久久久久久久久免费看 | 国产a视频精品免费观看| 久久这里只有精品6| 日本高清免费不卡视频| 久久精品国产免费| 亚洲精品国产品国语在线app| 欧美丰满一区二区免费视频| 国模冰冰炮一区二区| 亚洲高清免费观看|