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

📄 lib_cam.c

📁 Who to use ECAN network with dsPIC33F, Microchip microcontroller.
💻 C
字号:
// Librairie Cam閞a
// EUROBOT 2009 - Polytech' Grenoble

#include "lib_cam.h"
#include "uart.h"
#include "constante.h"

// Fonction permettant de placer la r閜onse de la cam閞a dans le buffer
void getchaine(char *buffer) {
	unsigned int temp, i = 0;
	buffer[10] = '\0';
	while (i < 50) {                 // protection pour ne pas d閜asser la taille du buffer
		while (!DataRdyUART2());
		temp = ReadUART2();          // data word from HW buffer to SW buffer
		buffer[i++] = temp;
		if (temp == '\r') break;
	}
	buffer[i] = '\0';
}

// Fonctions d'initialisation
void init_camera(void) {
	long int j, k;

	InitUART();

	do{
	putsUART2("a");//reset
}while(1);
//	for(j=0;j<100;j++)for(k=0;k<15000;k++){};
//
//	putsUART2("RM 2\r");//pour ne pas faire envoyer les ACK\r et NCK\r
//	for(j=0;j<100;j++)for(k=0;k<15000;k++){};
//
//	putsUART2("PM 1\r");//1 seul trame de reponse
//	for(j=0;j<100;j++)for(k=0;k<15000;k++){};
//
//	putsUART2("HR 1\r");//1 seul trame de reponse
//	for(j=0;j<100;j++)for(k=0;k<15000;k++){};
//
//	putsUART2("VW 55 21 85 63\r");//fenetre "centr閑"
//	for(j=0;j<100;j++)for(k=0;k<15000;k++){};
//	
//	putsUART2("SV 1 60\r");//fenetre "centr閑"
//	for(j=0;j<100;j++)for(k=0;k<15000;k++){};
}

void InitUART(void) {                // Permet entre autres de vider le tampon
	long int j, k;

	RPINR19bits.U2RXR=6; //RP6->U2RX
	RPOR3bits.RP7R=5;			 //RP7->U2TX

	OpenUART2(	UART_EN & UART_IDLE_CON & UART_IrDA_DISABLE & UART_UEN_00 &
							UART_DIS_WAKE & UART_DIS_LOOPBACK & UART_DIS_ABAUD & UART_BRGH_SIXTEEN &
							UART_NO_PAR_8BIT & UART_1STOPBIT,
							UART_INT_TX_BUF_EMPTY & 
							UART_TX_ENABLE & UART_INT_RX_BUF_FUL &
							UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR,
							(unsigned int)U2BRG_VAL);
	//U1MODEbits.BRGH = 0; // Low Speed mode
	for(j=0;j<100;j++)for(k=0;k<15000;k++){};
}

// Fonctions retournant 1 si la couleur est d閠ect閑, 0 sinon
int detec_rouge(void) {
	return track("TC 200 255 0 30 0 30\r");
}
int detec_vert(void) {
	return track("TC 0 50 120 255 0 50\r");
}
int detec_bleu(void) {
	return track("TC 0 50 0 50 100 255\r");
}

int track(char *arg) {
	long int j, k;
	int mot = 0, i;
	char tab[50];
	InitUART();
	putsUART2(arg);
	getchaine(tab);
	for(i=0;i<strlen(tab);i++) {
		if (tab[i] == ' ') mot++;
		else if (mot == 1) {
			for(j=0;j<100;j++)for(k=0;k<10000;k++){};
			if (tab[i] > '0') return 1;
			else return 0;
		}
	}
	return 0;
}

⌨️ 快捷键说明

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