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; }
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); }
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; }