예제 #1
0
int main()
{
    const int TOTAL_A_ENCOLAR=10;
    const int PRIMERO_EN_ENCOLAR=5;
    Cola cola;
    Persona x,y,z,v;
    Persona* u;
    char nombre[TAMANO_NOMBRE];
    int i,j;

    x.clave=1;
    strcpy(x.nombre,"primero");
    y.clave=2;
    strcpy(y.nombre,"segundo");
    z.clave=3;
    strcpy(z.nombre,"tercero");
    v.clave=4;
    strcpy(v.nombre,"cuarto");

    printf("Inicializando cola...\n");
    inicializa(&cola);

    printf("Poniendo 4 elementos en cola...\n");
    encola(&x,&cola);
    encola(&y,&cola);
    encola(&z,&cola);
    encola(&v,&cola);

    for(i=PRIMERO_EN_ENCOLAR,j=TOTAL_A_ENCOLAR;i<=j;i++){
        if (estaLlena(&cola)){
            pausar();
            printf("\nQuitando uno de cola...");
            v=desencola(&cola);
            imprimeElemento(&v);
            printf("\n");
        }
        pausar();
        x.clave=i;
        strcpy(x.nombre,"El ");
        strcat(x.nombre,itoa(i, nombre, 10));
        strcat(x.nombre,"o.");
        printf("Poniendo <<");
        imprimeElemento(&x);
        printf(">> en cola...\n");
        encola(&x,&cola);
    }
    pausar();
    printf("Muestreando el frente...");
    u=frente(&cola);
    imprimeElemento(u);
    printf("\nQuitando todos de cola...\n");
    while(!estaVacia(&cola)){
        v=desencola(&cola);
        imprimeElemento(&v);
        printf("\n");
    }
    v=desencola(&cola);
    return 0;
}
예제 #2
0
void Motores::movimentoAleatorio(int intensidade) {
  int m = random(1,9);
  if(m==1) frente(intensidade);
  if(m==2) re(intensidade);
  if(m==3) esquerda(intensidade);
  if(m==4) direita(intensidade);
  if(m==5) reEsquerda(intensidade);
  if(m==6) reDireita(intensidade);
  if(m==7) girar(intensidade, 0);
  if(m==8) girar(intensidade, 1);
}
//#define USE_UART	// Comentar esta linha para usar os LEDs
// Inicialização dos Periféricos -----------------------------------------------
void setup()
{
	pinMode(FE_RECEPTOR, INPUT);
	pinMode(LE_RECEPTOR, INPUT);
	pinMode(LD_RECEPTOR, INPUT);
	pinMode(FD_RECEPTOR, INPUT);
	pinMode(FE_EMISSOR, OUTPUT);
	pinMode(L_EMISSORES, OUTPUT);
	pinMode(FD_EMISSOR, OUTPUT);
	pinMode(PWM_E, OUTPUT);
	pinMode(IN1_E, OUTPUT);
	pinMode(IN2_E, OUTPUT);
	pinMode(PWM_D, OUTPUT);
	pinMode(IN1_D, OUTPUT);
	pinMode(IN2_D, OUTPUT);
	pinMode(SW1, INPUT);

#ifdef USE_UART	// Inicialização para usar a UART
	pinMode(0, INPUT);
	pinMode(1, OUTPUT);
	Serial.begin(115200);
#else	// Inicialização para usar os LEDs
	pinMode(LED1, OUTPUT);
	pinMode(LED2, OUTPUT);
	digitalWrite(LED1, LOW);
	digitalWrite(LED2, LOW);
#endif

	// Será habilitado seguidor de parede esquerda ou direita de acordo com o
	// respectivo sensor frontal acionado
	while ((getSensoresParede() & 0b010) == 0)
	{
		delay(100);
	}
	if (frontal_esquerdo > frontal_direito)
	{
		seguidor = ESQUERDA;
	}
	else
	{
		seguidor = DIREITA;
	}
	delay(2000);	// Aguarda um tempo para a partida do micromouse

	// Inicia o Timer do controle de velocidade
	Timer1.initialize(TS * 1000);
	Timer1.attachInterrupt(callbackTimer1);
	bRodarControle = true;

	// Ao iniciar o micromouse deve estar no centro da primeira célula...
	// Com isso, deve se deslocar meia célula até a FRONTEIRA da próxima célula
	// (local IDEAL para realizar a leitura dos sensores)
	frente(CELULA / 2);
}
// LOOP principal do programa --------------------------------------------------
void loop()
{
	// Realiza a máquina de estados de acordo com o que foi selecionado
	if (seguidor == DIREITA)
	{
		switch (paredes)	// Máquina de Estados - Seguidor de Parede DIREITA
		{
		// Sem paredes
		case 0b000:
			curva(-90);	// Vira para a direita
			break;

		// Apenas parede da direita
		case 0b001:
			frente(CELULA);	// Anda uma célula para frente
			break;

		// Apenas parede da esquerda
		case 0b100:
			curva(-90);	// Vira para a direita
			break;

		// Ambas paredes laterais
		case 0b101:
			frente(CELULA);	// Anda uma célula para frente
			break;

		// Apenas parede frontal
		case 0b010:
			curva(-90);	// Vira para a direita
			break;

		// Parede frontal e direita
		case 0b011:
			curva(90);	// Vira para a esquerda
			break;

		// Parede frontal e esquerda
		case 0b110:
			curva(-90);	// Vira para a direita
			break;

		// Todas as paredes
		case 0b111:
			curva(180);	// Meia volta
			break;
		}
	}
	else if (seguidor == ESQUERDA)
	{
		switch (paredes)	// Máquina de Estados - Seguidor de Parede ESQUERDA
		{
		// Sem paredes
		case 0b000:
			curva(90);	// Vira para esquerda
			break;

		// Apenas parede da direita
		case 0b001:
			curva(90);	// Vira para esquerda
			break;

		// Apenas parede da esquerda
		case 0b100:
			frente(CELULA);	// Anda uma célula para frente
			break;

		// Ambas paredes laterais
		case 0b101:
			frente(CELULA);	// Anda uma célula para frente
			break;

		// Apenas parede frontal
		case 0b010:
			curva(90);	// Vira para esquerda
			break;

		// Parede frontal e direita
		case 0b011:
			curva(90);	// Vira para a esquerda
			break;

		// Parede frontal e esquerda
		case 0b110:
			curva(-90);	// Vira para direita
			break;

		// Todas as paredes
		case 0b111:
			curva(-180);	// Meia volta
			break;
		}
	}
}
/* Realiza uma curva em torno do próprio eixo e anda até a fronteira da célula
 *		(graus < 0: para direita)
 */
void curva(int16_t graus)
{
	frente(CELULA / 2);
	curvaPivot(graus);
	frente(CELULA / 2);
}
예제 #6
0
파일: main.c 프로젝트: streeck/ed1
int main(){
	int i;

	PILHA_DINAMICA pilha;

	for (i = 0; i < 5; i++){
		ITEM item;
		item.valor = i;
		
		if (empilhar(&pilha, &item)){
			printf("Entrou na pilha: %d", item.valor);
		}
		else {
			printf("%d: Erro na alocação.\n", item.valor);
		}
	}
	printf("\nPilha atual: ");
	imprime(&pilha);
	printf("\n");

	printf("Tamanho: %d\n--\n", contar(&pilha));

	ITEM item1;
	item1.valor = 100;

	if (empilhar(&pilha, &item1)){
		printf("Entrou na pilha: %d", item.valor);
	}
	else {
		printf("%d: Erro na alocação.\n", item.valor);
	}

	printf("\nPilha atual: ");
	imprime(&pilha);
	printf("\n");

	printf("Tamanho: %d\n--\n", contar(&pilha));

	frente(&pilha, &item1);

	printf("Elemento do topo: %d\n--\n, item1.valor");

	if (desempilhar(&pilha, &item1)){
		printf("Saiu na pilha: %d", item.valor);
	}
	else {
		printf("Pilha vazia.\n", item1.valor);
	}

	item1.valor = 9;
	if (empilhar(&pilha, &item1)){
		printf("Entrou na pilha: %d", item.valor);
	}
	else {
		printf("%d: Erro na alocação.\n", item.valor);
	}

	printf("\nPilha atual: ");
	imprime(&pilha);
	printf("\n");

	printf("Tamanho: %d\n--\n", contar(&pilha));

	return 0;
}