Ir ao conteúdo
  • Cadastre-se

alexandro umbert

Membro Pleno
  • Posts

    25
  • Cadastrado em

  • Última visita

Reputação

2
  1. Ola pessoal Estou fazendo comunicação PIC e nextion RX TX,,mas quando eu aperto o botão do nextion para acender led,ele envia apenas uma vez o caracteres,depois quando eu aperto outro botão ele não envia mais nada. O valor anterior do caracteres fica na tela e não recebe mais nada. Alguem poderia me ajuda onde está o erro: while(true){ char=d; if(kbhit()) { d=getc(); printf(lcd_putc,"\%u",d); delay_ms(200); if(d==10){ output_low(PIN_B1); } }
  2. Ola, Utilizo PIC 18f4550,e estou fazendo trabalho com no compiler CCS,vi varios locais na net conectando mouse no pinos do PIC e consegue pegar informação do eixo X e Y . Alguem já fez com PIC? segue video do cara fez com arduino: https://www.youtube.com/watch?v=SXQfT7c-9rU&t=21s
  3. Boa noite Pessoal! neste link tem sistema de bussola eletronica feita para pIC18f4550 no compilador CCS. porém no video ele está utilizando oscilador interno de 8MHZ e minha placa está montada com clock 20MHZ. Alguem poderia me dar uma ajuda,compilei o sistema e envia pic ,mas não mostra valores reais. projeto completo está aqui: https://www.4shared.com/rar/6EYF8d2Mce/PIC18F4550_HMC5883L_CCS.html? https://www.youtube.com/watch?v=Rji4lxLLp9A&pbjreload=10
  4. @ViniciusKruz @ViniciusKruz tem essa parte do codigo que fica acima do for. #define Buffer_Size 1000 int16 VetorPos; char TpS; short int TemPacote; char RxBuf[Buffer_Size]; char ValorL; int16 k; char j; char divT; char Lat; int16 m_Boot; int1 f_Boot; float variavel; float matrix[3][3]; float latitude,latReal; char latCompleto[10]; char longCompleto[10]; #INT_RDA void Serial_isr(void) { char temp; temp = RCREG; TpS = 5; RxBuf[VetorPos] = temp; VetorPos++; if(VetorPos>1000){ TpS = 0; TemPacote = 1; return; } } #INT_TIMER1 void int_timer_1 () { set_timer1(50535); if(TpS>0){TpS--;if(TpS==0){TemPacote=1;}} if(divT-- == 0){ divT =20; Life = !Life; } } void LimpRxBuf (void){ int16 i; for(i=0;i<1000;i++){ RxBuf = 0; } } void main(void) { setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); set_timer1(50535); divT = 100; enable_interrupts(INT_TIMER1); set_tris_A(TRIS_A_INIT); set_tris_B(TRIS_B_INIT); set_tris_C(TRIS_C_INIT); set_tris_D(TRIS_D_INIT); set_tris_E(TRIS_E_INIT); lcd_init(); delay_ms(1); lcd_putc("\fROBO GUIADO GPS"); lcd_putc("\n FABIO BETIOL"); delay_ms(5000); LimpRxBuf(); VetorPos=0; TemPacote = 0; TpS = 0; m_Boot = 60000; f_Boot = 1; enable_interrupts(GLOBAL); ValorL = RCREG; CREN = 0; CREN = 1;
  5. @ViniciusKruz n tem biblioteca. codigo for(;;){ if(f_Boot == 0){ if(TemPacote == 1){ TemPacote = 0; for(k=0;k<500;k++){ ValorL = RxBuf[k]; if(ValorL == '$'){ ValorL = RxBuf[k+5]; if(ValorL == 'L'){ lcd_gotoxy(1,1); lcd_putc("Lat "); for(j=0;j<10;j++){ Lat = RxBuf[k+7+j]; lcd_putc(Lat); latCompleto[j]=Lat; } lcd_gotoxy(1,2); lcd_putc("Lon "); for(j=0;j<10;j++){ Lat = RxBuf[k+21+j]; lcd_putc(Lat); longCompleto[j]=Lat; latReal= atof(latCompleto); if (latitude< latReal){ output_low(PIN_B0); } else { output_high(PIN_B0); } if (latitude >latReal){ output_low(PIN_B2); } else { output_high(PIN_B2); } } break; } } } LimpRxBuf(); VetorPos=0; TpS = 0; } } if(m_Boot>0){m_Boot--;if(m_Boot == 0){ f_Boot = 0;enable_interrupts(INT_RDA); delay_ms(100);ValorL=RCREG;CREN=0;CREN=1; } } delay_ms(1); if (input(PIN_B5)==0){ latitude= atof(latCompleto); printf(LCD_PUTC,"\f%1.5f ",latitude); delay_ms(1000); } } }
  6. modelo gps é gy-gps6mv2 adicionado 9 minutos depois @ViniciusKruz modelo gps é gy-gps6mv2
  7. @ViniciusKruz obrigado pela alerta do problema, tentei diminuir para o valor de 1000 para 100,mas infelizmente não funcionou.
  8. @ViniciusKruz or(;;){ float variavel; float matrix[3][3]; float latitude,latReal; char latCompleto[10]; char longCompleto[10]; if(f_Boot == 0){ if(TemPacote == 1){ TemPacote = 0; for(k=0;k<1000;k++){ ValorL = RxBuf[k]; if(ValorL == '$'){ ValorL = RxBuf[k+5]; if(ValorL == 'L'){ lcd_gotoxy(1,1); lcd_putc("Lat "); for(j=0;j<10;j++){ Lat = RxBuf[k+7+j]; lcd_putc(Lat); latCompleto[j]=Lat; } lcd_gotoxy(1,2); lcd_putc("Lon "); for(j=0;j<10;j++){ Lat = RxBuf[k+21+j]; lcd_putc(Lat); longCompleto[j]=Lat; } latReal= atof(latCompleto); if (latitude< latReal){ output_low(PIN_B0); delay_ms(20); } else { output_high(PIN_B0); } if (latitude >latReal){ output_low(PIN_B2); delay_ms(20); } else { output_high(PIN_B2); } break; } } } LimpRxBuf(); VetorPos=0; TpS = 0; } } if(m_Boot>0){m_Boot--;if(m_Boot == 0){ f_Boot = 0;enable_interrupts(INT_RDA); delay_ms(100);ValorL=RCREG;CREN=0;CREN=1; } } delay_ms(1); if (input(PIN_B5)==0){ latitude= atof(latCompleto); printf(LCD_PUTC,"\f%1.5f ",latitude); delay_ms(1000); } } } Em negrito tem parte que faz a comparação,Porque será que não faz a comparação em negrito na mesma velocidade que atualiza as coordenadas do gps? gps a cada 1 segundo atualiza. devo colocar algum comando while(true)?
  9. @ViniciusKruz adicionado 1 minuto depois @ViniciusKruz tá certo fazer isso? lcd_gotoxy(1,2); lcd_putc("Lon "); for(j=0;j<10;j++){ Lat = RxBuf[k+21+j]; lcd_putc(Lat); longCompleto[j]=Lat; } break; } } } LimpRxBuf(); VetorPos=0; TpS = 0; } } if(m_Boot>0){m_Boot--;if(m_Boot == 0){ f_Boot = 0;enable_interrupts(INT_RDA); delay_ms(100);ValorL=RCREG;CREN=0;CREN=1; } } delay_ms(1); latReal= atof(latCompleto); if (input(PIN_B5)==0){ latitude= atof(latCompleto); printf(LCD_PUTC,"\f%1.5f ",latitude); delay_ms(1000); } if (atof(latCompleto) < latReal){ output_low(PIN_B0); delay_ms(20); } else { output_high(PIN_B0); } if (atof(latCompleto) >latReal){ output_low(PIN_B2); delay_ms(20); } else { output_high(PIN_B2); } } }
  10. @ViniciusKruz ok entendi. Veja que 1 eu to querendo gravar a latitude real na variavel latitude: if (input(PIN_B5)==0){/////////////////////////grava coordenada real na variavel latitude. latitude= atof(latCompleto); printf(LCD_PUTC,"\f%1.5f ",latitude); delay_ms(1000); } e depois preciso comparar entre a latitude gravada e latitude real : if (latitude<latReal){ output_low(PIN_B0); delay_ms(20); } if (latitude>latReal){ output_low(PIN_B2); delay_ms(20); } assim caso eu esteva com o modulo e coordenada for maior ou menor com latitude gravada na variavel latitude e executar a função.
  11. @ViniciusKruz Obrigado,agora estou clareando as ideias! No primeiro for mostra Latitude e segundo for mostra a Longitude. E por isso q tem dois for. if (input(PIN_B5)==0){ // latitude=0; latitude= atof(latCompleto); matrix[0][1]= latitude; printf(LCD_PUTC,"\f%1.5f ",latitude); delay_ms(1000); } if (lat<latitude){ output_high(PIN_B0); } if (lat>latitude){ output_high(PIN_B2); } Agora uma duvida,quando aperto botão a variavel latitude estão sendo gravada a variavel. agora preciso comparar a variavel latitude e variavel Lat,a variavel Lat por ser tipo char,posso comparar com a tipo float?
  12. opa, agora tá gravando ok Mas exemplo as coordenadas mostradas no LCD tá 2226.34678....está gravando valores pouco acima ou abaixo...exemplo 2226.34599. segue a modificação que fiz: for(j=0;j<10;j++){ Lat = RxBuf[k+7+j]; lcd_putc(Lat); latCompleto[j]=Lat; } lcd_gotoxy(1,2); lcd_putc("Lon "); for(j=0;j<10;j++){ Lat = RxBuf[k+21+j]; lcd_putc(Lat); } break; } } } LimpRxBuf(); VetorPos=0; TpS = 0; } } if(m_Boot>0){m_Boot--;if(m_Boot == 0){ f_Boot = 0;enable_interrupts(INT_RDA); delay_ms(100);ValorL=RCREG;CREN=0;CREN=1; } } delay_ms(1); if (input(PIN_B5)==0){ latitude= atof(latCompleto); matrix[0][1]= latitude; printf(LCD_PUTC,"\f%1.5f ",matrix[0][1]); delay_ms(1000); } } }
  13. @ViniciusKruz valeu amigo,consegui com comando atof. Mas tem momento que a variavel aparece só zeros,veja como ficou agora em negrito que alterei: } lcd_gotoxy(1,2); lcd_putc("Lon "); for(j=0;j<10;j++){ Lat = RxBuf[k+21+j]; lcd_putc(Lat); latitude= atof(Lat); } break; } } } LimpRxBuf(); VetorPos=0; TpS = 0; } } if(m_Boot>0){m_Boot--;if(m_Boot == 0){ f_Boot = 0;enable_interrupts(INT_RDA); delay_ms(100);ValorL=RCREG;CREN=0;CREN=1; } } delay_ms(1); if (input(PIN_B5)==0){ printf(LCD_PUTC,"\f%1.5f ",latitude); delay_ms(1000); } } dá pra fazer alguma alteração?
  14. sim está correto,está recebendo coordenadas corretas.
  15. @ViniciusKruz@ViniciusKruz eu já tentei esse comando que me falaram atof,realmente ,mas o compilador ccs dizem que não aceita. não teria uma outra opção para fazer isso? olha isso: for(;;){ float variavel; float matrix[3][3]; float latitude; if(f_Boot == 0){ if(TemPacote == 1){ TemPacote = 0; for(k=0;k<1000;k++){ ValorL = RxBuf[k]; if(ValorL == '$'){ ValorL = RxBuf[k+5]; if(ValorL == 'L'){ lcd_gotoxy(1,1); lcd_putc("Lat "); for(j=0;j<10;j++){ Lat = RxBuf[k+7+j]; lcd_putc(Lat); } lcd_gotoxy(1,2); lcd_putc("Lon "); for(j=0;j<10;j++){ Lat = RxBuf[k+21+j]; lcd_putc(Lat);

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...