Ir ao conteúdo
  • Cadastre-se

Gabriel Leal Silva

Membro Júnior
  • Posts

    6
  • Cadastrado em

  • Última visita

Reputação

0
  1. Boa tarde galera! Eu e um amigo desmontamos um carrinho de controle remoto e estamos montando um carrinho autônomo usando uma placa Arduino Uno. O carrinho é alimentado por 6 volts(4 pilhas de 1,5 volt) e consta com dois motores, um para tração e outro para direção. Estamos utilizando para isso uma ponte H de modelo L298N. O nosso problema é o seguinte: Estamos tentando girar o motor de direção e o de tração ao mesmo tempo (fazer o carro dar um "zerinho" ou uma curva qualquer") porém, isso está ocasionando uma queda de tensão na ponte H (a luz dela enfraquece e quase apaga). Não achamos nenhum erro de elétrica/eletrônica e todos os equipamentos funcionam perfeitamente e por isso achamos que talvez o erro esteja no código. Estou disponibilizando abaixo o código que estamos usando para fazer tal "manobra": EDIT: Retiramos o Arduino e a Ponte H, e ligamos a pilha direto nos dois motores, ativando os dois juntos e deu certo. Gostaria de saber se alguém sabe onde é o problema. EDIT 2: Quando tentamos girar um motor de cada vez, seguindo uma programação que achamos na internet, o sistema funciona. Porém, quando tentamos girar os dois motores AO MESMO TEMPO, utilizando a programação abaixo, acontece o erro já citado. //Relaciona a entrada do Arduino com a o pino da Ponte H int IN1 = 4; int IN2 = 5; int IN3 = 6; int IN4 = 7; void setup() { //Define os pinos como saída pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); } void loop() { //Faz o motor B alterar a direção do carro digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); delay(2000); //Faz o motor A fazer o carrinho andar pra frente digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); delay(2000); //Freia o motor A digitalWrite(IN1, HIGH) ; digitalWrite(IN2, HIGH); //Freia o motor B digitalWrite(IN3, HIGH); digitalWrite(IN4, HIGH); delay(500); }
  2. Na verdade, o nome correto é Laboratório Virtual... você coloca o seu código lá, pode executar ele e depois avaliá-lo da maneira que o professor quer...
  3. @vangodp hum, entendo. Cara, eu tentei com a função que você fez pra ele e deu a mesma coisa. Deu certo no pc mas lá no site não deu... Então não deve ser a le_times, deve ser no ponteiro duplo.. O erro que aparece no compilador do site: Copiando arquivos de teste... FIM ./vpl_execution: line 16: 29242 Segmentation fault (core dumped) ./$PROG e nos comentários de avaliação: Copiando arquivos de teste... FIM Iniciando avaliação de compilação. Acabou a avaliação de compilação. Iniciando avaliação de tempo máximo de execução. [☠☠☠] Erro: falha de segmentação (crashed)!
  4. @vangodp Haha é o mesmo trabalho! Ele é um amigo meu, foi ele quem me indicou o fórum! O problema dele ontem era com abrir o arquivo né? Darei uma olhada!! De qualquer forma, atualizei o código na postagem! Consegui tirar aquele for.
  5. @vangodp cara, muito obrigado pela ajuda!! Mas infelizmente eu arrumei esse erro e mesmo assim continua acusando segfault lá no site! No CodeBlocks tá rodando tranquilo! Tô usando só uma versão do código agora que eu vou atualizar na postagem. To mandando também a main que eu to usando e tá dando certo. Continuo achando erro está em lê times ou na comparação do ponteiro duplo *jogador = &timesjogadores[j]. Muito obrigado pela ajuda!!
  6. Galera, estou a semana inteira estudando e fazendo esse trabalho pra faculdade. Agora, perto do prazo final(sexta 19h) ele está dando um erro muito sutil que eu não consigo perceber!! No CodeBlocks, quando chega nas funções para achar jogadores na parte em que eu igual *jogador = &times.jogadores[j] o compilador simplesmente para de funcionar, no site da minha faculdade, diz que dá segmentation fault(não tenho Linux ainda, não testei lá)... O trabalho era só para implementar funções, então a main, eu que fiz mas no site da faculdade ele vai gerar uma main própria...Anexarei e também deixarei abaixo as duas versões do código, o lab4.h e o definições.h, incluídas no código e que tem instruções nos comentários. Me ajudem por favor, estou desesperado! P.S: o código é grande, mas as funções começam a quase que se repetir, mudando uma coisa ou outra, então, se achar meu erro no início é só mudar nas outra... SEGUE ABAIXO AS INTRUÇÕES, LOGO APÓS O LAB4.H, DEFINICOES.H, E MEU CODIGO. ESTÁ MUITO GRANDE, ENTÃO SE PREFERIREM LEIAM SÓ AS INSTRUÇÕES E DEPOIS BAIXEM OS AQUIVOS QUE VOU DEIXAR ANEXADO. O CÓDIGO ESTÁ MUITO GRANDE, ENTÃO PRA FACILITAR, O ERRO ESTÁ MUITO PROVAVELMENTE NA TERCEIRA FUNÇÃO OU NAS DUAS ANTERIORES. AQUI VOCÊS PODEM BAIXAR UM ARQUIVO PARA TESTAR O CÓDIGO: https://goo.gl/RLkcfx P.S: Nome dos times e jogadores bugados pois foram gerados aleatoriamente. ***EDUT: TIREI AS INSTRUÇÕES AQUI. Muito obrigado pela ajuda!! Lá vai: #include <stdlib.h> #include "lab4.h" FILE *abre_arquivo(const char *arquivo){ FILE *arq; arq = fopen(arquivo,"rb"); if (arq == NULL){ printf("ERRO"); return NULL; } return arq; } int fecha_arquivo(FILE *arq){ return fclose(arq); } times_t *le_times(const char *arquivo, unsigned int *numero_de_times){ unsigned int i = 0; FILE *arqu = abre_arquivo(arquivo); times_t equipe; while(!feof(arqu)){ i++; fseek(arqu,i*sizeof(times_t),SEEK_SET); fread(&equipe, sizeof(times_t),1,arqu); } *numero_de_times = i; times_t *times = (times_t*)malloc(i*sizeof(times_t)); if(times == NULL){ free(times); fecha_arquivo(arqu); return NULL; } fseek(arqu,0,SEEK_SET); int checagem = fread(times,sizeof(times_t),i,arqu); if (checagem < i){ free(times); fecha_arquivo(arqu); return NULL; } fecha_arquivo(arqu); return times; } void encontra_jogador_cartao_vermelho_e_jogos(times_t *times, unsigned int num_times, jogador_t **jogador, times_t **time){ int i,j; float proporcao = 0.0; for (i = 0; i < num_times; i++){ for(j = 0; j < NUM_JOGADORES; j++){ if (((float)(times.jogadores[j].cartoes_vermelhos)/(times.jogadores[j].numero_jogos)) > proporcao){ proporcao = ((float)(times.jogadores[j].cartoes_vermelhos))/(times.jogadores[j].numero_jogos); *jogador = &times.jogadores[j]; *time = &times; } } } } void encontra_jogador_artilheiro(times_t *times, unsigned int num_times, jogador_t **jogador, times_t **time){ int i,j,gols = 0; for (i = 0; i < num_times; i++){ for(j = 0; j < NUM_JOGADORES; j++){ if ((times.jogadores[j].gols_marcados) > gols){ gols = times.jogadores[j].gols_marcados; *jogador = &times.jogadores[j]; *time = &times; } } } } void encontra_jogador_mais_eficiente(times_t *times, unsigned int num_times, jogador_t **jogador, times_t **time){ int i,j; float artilharia = 0.0; for (i = 0; i < num_times; i++){ for(j = 0; j < NUM_JOGADORES; j++){ if (((float)(times.jogadores[j].gols_marcados))/(times.jogadores[j].numero_jogos) > artilharia){ artilharia = ((float)(times.jogadores[j].gols_marcados))/(times.jogadores[j].numero_jogos); *jogador = &times.jogadores[j]; *time = &times; } } } } void encontra_time_com_mais_titulos(times_t *times, unsigned int num_times, times_t **time){ int i; float titulo = 0.0; for(i = 0; i < num_times;i++){ if (((float)(times.numero_copas_brasil + times.numero_tit_brasileiros + times.numero_tit_estadual + times.numero_tit_libertadores)/(times.ano_fundacao)) > titulo){ titulo = (((float)(times.numero_copas_brasil + times.numero_tit_brasileiros + times.numero_tit_estadual + times.numero_tit_libertadores))/(times.ano_fundacao)); *time = &times; } } } void encontra_goleiro_que_defendeu_mais_penaltis(times_t *times, unsigned int num_times, jogador_t **jogador, times_t **time){ int i,j; float defesas = 0.0; for (i = 0; i < num_times; i++){ for(j = 0; j < NUM_JOGADORES; j++){ if (times.jogadores[j].posicao == 0){ if(((float)(times.jogadores[j].penalti_defendidos)/(times.jogadores[j].numero_jogos)) > defesas){ defesas = ((times.jogadores[j].penalti_defendidos)/(times.jogadores[j].numero_jogos)); *jogador = &times.jogadores[j]; *time = &times; } } } } } void encontra_jogador_mais_agressivo(times_t *times, unsigned int num_times, jogador_t **jogador, times_t **time){ int i,j; float agressividade = 0.0, x; for (i = 0; i < num_times; i++){ for(j = 0; j < NUM_JOGADORES; j++){ x = 5*(times.jogadores[j].cartoes_vermelhos) + times.jogadores[j].cartoes_amarelos + 0.2*(times.jogadores[j].faltas_cometidas); if(x > agressividade){ agressividade = x; *time = &times; *jogador = &times.jogadores[j]; } } } } int main(void){ int numeroDeTimes; char nomeArquivo[15] = "arq.dat"; times_t *times = le_times(nomeArquivo, &numeroDeTimes); times_t *maiorTime; jogador_t *maiorJogador; encontra_jogador_cartao_vermelho_e_jogos(times,numeroDeTimes,&maiorJogador, &maiorTime); printf("%s \n",maiorTime->nome); printf("%s",maiorJogador->nome); encontra_jogador_artilheiro(times,numeroDeTimes,&maiorJogador, &maiorTime); encontra_jogador_mais_eficiente(times,numeroDeTimes,&maiorJogador, &maiorTime); encontra_time_com_mais_titulos(times,numeroDeTimes, &maiorTime); encontra_goleiro_que_defendeu_mais_penaltis(times,numeroDeTimes,&maiorJogador, &maiorTime); encontra_jogador_mais_agressivo(times,numeroDeTimes,&maiorJogador, &maiorTime); return 0; } definicoes.txt lab4h.txt lab4c.txt

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...