Ir ao conteúdo
  • Cadastre-se

Danilo Almeida

Membros Plenos
  • Total de itens

    371
  • Registro em

  • Última visita

  • Qualificações

    0%

Reputação

3

1 Seguidor

Sobre Danilo Almeida

  • Data de Nascimento 11/12/1986 (32 anos)

Informações gerais

  • Cidade e Estado
    campos dos Goytacazes
  1. Olá, Estou precisando de uma ajuda co C++ Estou usando um programa chamado IngeDeve. Ele usa como base o Eclipse. com C++ . A questão é a seguinte . eu não consigo manipular variaveis tipo float ou double. segue um mini código só para explicar. Quando mando imprimir o valor da variável 'valor1' invés de imprimir o 7.50 imprime o valor 5.3147e-315. se eu trocar o valor 7.50 por 15.50 imprime o valor 5.31988e-315 já to ficando doido. Já tentei usar float ... já tentei imprimir usando %f , etc... sera que alguém consegue me ajudar ? #include "SDK30.H" #include "Training.h" void Teste (void) { double valor1; ////////////////////////////////////////// valor1 = 7.50; printf("Teste %g \n", valor1); ttestall(0, 5*500); return; }
  2. Olá pessoal ,. tenho 2 maquinas ligadas em rede. Uma servidora e uma cliente. Todas as duas estão rodando com o slackware 12.0 Gostaria de criar uma rede via internet . Gostaria de deixar o servidor na minha casa e colocar a maquina cliente na casa de um primo em outra cidade. e colocar essas duas maquinas em rede. Esquecendo esse negocio de assistência remota, meu interesse é colocar em rede mesmo. Alguém pode me ajudar. Não sei como devo proceder... Sou totalmente cru no linux
  3. Olá pessoal , estou precisando construir uma envasadora de líquidos. que me entregue 100ml precisos. A parte Eletrônica eu não vejo muito problema, mas a duvida é na parte mecânica, na parte de dosagem. Alguém tem alguma dica do que posso fazer? ou qual tipo de bico posso usar? A necessidade do projeto nasceu ontem, então não tenho nenhum conhecimento sobre o assunto. qualquer sugestão ou opinião é bem vinda Grande abraço a todos . E Feliz Natal !!!
  4. Pedro, valeu mesmo, funcionou 100%. você aprendeu sozinho mesmo cara? né fácil não kkkkk rapaz. o que esta me matando aqui é um detalhe. lembra do código de mostra volor em R$ no LCD ? você me ajudou fazer um programa que conta até 9,99. dai eu tentei fazer ele contar até 300,00. esta funcionando, só que a unica saida que eu achei foi fazer assim. sbit LCD_RS at RA5_bit; sbit LCD_EN at RA4_bit; sbit LCD_D4 at RA3_bit; sbit LCD_D5 at RA2_bit; sbit LCD_D6 at RA1_bit; sbit LCD_D7 at RA0_bit; sbit LCD_RS_Direction at TRISA5_bit; sbit LCD_EN_Direction at TRISA4_bit; sbit LCD_D4_Direction at TRISA3_bit; sbit LCD_D5_Direction at TRISA2_bit; sbit LCD_D6_Direction at TRISA1_bit; sbit LCD_D7_Direction at TRISA0_bit; //------------------------------------------------------------------------// sbit INCREMENTA at RB0_bit; sbit DECREMENTA at RB1_bit; bit Pressionado; char *TXT_UNIDADE ="0000"; char *TXT_DEZENA ="00000"; char *TXT_CENTENA ="000000"; int CREDITO = 0; void TECLA(){ if(INCREMENTA && !Pressionado){ // Incrementa. Pressionado =1; if (CREDITO<100000) CREDITO = CREDITO +25; } if(DECREMENTA && !Pressionado){ // Decrementa. Pressionado =1; if (CREDITO>0)CREDITO = CREDITO -25; } else if (!INCREMENTA && !DECREMENTA)Pressionado=0; } //----------------------------------------------------------------------// void Exibir_Valor(){ TXT_UNIDADE [0]=((CREDITO / 100) % 10) + 48; TXT_UNIDADE [1]=','; TXT_UNIDADE [2]=((CREDITO/ 10 ) % 10) + 48; TXT_UNIDADE [3]=((CREDITO / 1 ) % 10) + 48; TXT_DEZENA [0]=((CREDITO/ 1000) % 10) + 48; TXT_DEZENA [1]=((CREDITO / 100) % 10) + 48; TXT_DEZENA [2]=','; TXT_DEZENA [3]=((CREDITO / 10 ) % 10) + 48; TXT_DEZENA [4]=((CREDITO / 1 ) % 10) + 48; TXT_CENTENA [0]=((CREDITO / 10000) % 10) + 48; TXT_CENTENA [1]=((CREDITO / 1000) % 10) + 48; TXT_CENTENA [2]=((CREDITO / 100) % 10) + 48; TXT_CENTENA [3]=','; TXT_CENTENA [4]=((CREDITO / 10 ) % 10) + 48; TXT_CENTENA [5]=((CREDITO / 1 ) % 10) + 48; } void main() { // Inicio do programa principal. ADCON0=0x0f; ADCON1=0x06; CMCON|=0x07; lcd_init(); TRISB=0b00000011; TRISD=0b00000000; PORTD=0b00000000; Pressionado=0; Lcd_Cmd(_LCD_CLEAR); // Limpa display. Lcd_Cmd(_LCD_CURSOR_OFF); // Desliga cursor. while(1){ if(CREDITO < 999){ Lcd_Out(2,13,TXT_UNIDADE); Delay_ms(10); } if(CREDITO > 999){ Lcd_Out(2,12,TXT_DEZENA); Delay_ms(10); } if(CREDITO > 9999){ Lcd_Out(2,11,TXT_CENTENA); Delay_ms(10); } Exibir_Valor(); TECLA(); } } Nesse programa acima ele apresenta em "Reais" o valor da variavel CREDITO. o problema que tenho que apresentar no meu programa o valor de 9 variaveis. então imagina o tamanho que esta o programa. queria saber se tem um jeito mais pratico de se fazer esse programa acima.
  5. Pedro, até pensei nesse 74HC595, mas não entendo qual seria a vantagem dele sobre por exemplo um 16f628A. Com o 74HC595 vou ter mais 8 porta de I/O. E com o 16F628A posso ter quase o dobro de pinos de I/O e mais um monte de recursos. O preço dos 2 integrado é o mesmo ! posso esta falando besteira... não conheço muito bem as vantagems do shift register. Bom. vou voltar só um pouquinho lá atrás na memoria EEprom interna do pic. coloquei os comandos do modo basico como você me indicou mais não funcionou legal não. primeiro que ele sempre inicia com um valor na variavel. não sei se tem como simular essa memoria interna no proteus. estou fazendo da seguinte forma. 1° compilo o programa 2° Abro o esquema no proteus e salvo o arquivo hex compilado no microcontrolador. inicio a simulação e ele já inicia com um valor no display. dai vou incrementando e depois. aperto STOP na simulação do proteus... e quando inicio a simulação novamente ele já entra com outro valor nada a ver no LCD ... tipo assim... esse programa incrementa de 25 em 25 a variavel,certo? as vezes inicio a simulação e aparece no display 39 ou 69 nada a ver... sbit LCD_RS at RA5_bit; sbit LCD_EN at RA4_bit; sbit LCD_D4 at RA3_bit; sbit LCD_D5 at RA2_bit; sbit LCD_D6 at RA1_bit; sbit LCD_D7 at RA0_bit; sbit LCD_RS_Direction at TRISA5_bit; sbit LCD_EN_Direction at TRISA4_bit; sbit LCD_D4_Direction at TRISA3_bit; sbit LCD_D5_Direction at TRISA2_bit; sbit LCD_D6_Direction at TRISA1_bit; sbit LCD_D7_Direction at TRISA0_bit; //------------------------------------------------------------------------// sbit INCREMENTA at RB0_bit; sbit DECREMENTA at RB1_bit; bit Pressionado; char *TXT="0000"; int CREDITO = 0; void TECLA(){ if(INCREMENTA && !Pressionado){ Pressionado =1; if (CREDITO<1000) CREDITO = CREDITO +25; eeprom_write(0,CREDITO); } if(DECREMENTA && !Pressionado){ Pressionado =1; if (CREDITO>0)CREDITO = CREDITO +25; eeprom_write(0,CREDITO); } else if (!INCREMENTA && !DECREMENTA)Pressionado=0; } //----------------------------------------------------------------------// void Exibir_Valor(){ TXT[0]=((CREDITO / 100) % 10) + 48; TXT[1]=','; TXT[2]=((CREDITO / 10 ) % 10) + 48; TXT[3]=((CREDITO / 1 ) % 10) + 48; } void main() { // Inicio do programa principal. ADCON0=0x0f; ADCON1=0x06; CMCON|=0x07; lcd_init(); TRISB=0b00000011; TRISD=0b00000000; PORTD=0b00000000; Pressionado=0; CREDITO = eeprom_read(0); Lcd_Cmd(_LCD_CLEAR); // Limpa display. Lcd_Cmd(_LCD_CURSOR_OFF); // Desliga cursor. while(1){ Lcd_Out(1,1,TXT); Exibir_Valor(); TECLA(); } }
  6. Pedro, funcionou legal aqui seu programa. eu que não saquei muito bem pelo jeito kkkk . tentei fazer um programa aqui mais não funcionou. . funciona assim... eu vou clicando na tecla e ele vai mudando a mensagem. Código que Recebe. sbit LCD_RS at RA5_bit; sbit LCD_EN at RA4_bit; sbit LCD_D4 at RA3_bit; sbit LCD_D5 at RA2_bit; sbit LCD_D6 at RA1_bit; sbit LCD_D7 at RA0_bit; sbit LCD_RS_Direction at TRISA5_bit; sbit LCD_EN_Direction at TRISA4_bit; sbit LCD_D4_Direction at TRISA3_bit; sbit LCD_D5_Direction at TRISA2_bit; sbit LCD_D6_Direction at TRISA1_bit; sbit LCD_D7_Direction at TRISA0_bit; //----------------------------------------------------------------------------// void main() { char teste; ADCON1=0x06; CMCON|=0x07; UART1_Init(9600); Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); Lcd_Out(1,1,"Iniciou."); while(1){ if (UART1_Data_Ready()){ teste = UART1_Read(); UART1_write(teste); switch(teste) { case'A': Lcd_Out(2,1,"TESTANDO"); break; case'B': Lcd_Out(2,1,"ENVIO"); break; case'C': Lcd_Out(2,1,"DE DADOS "); break; case'D': Lcd_Out(2,1,"VIA SERIAL RS232"); break; case'E': Lcd_Out(2,1,"FORT ELETRONICA"); break; } } } } ENVIO. sbit Led01 at RA0_bit; //Indica que está enviando dado sbit Led02 at RA1_bit; //Indica que enviou dado sbit Botao at RB5_bit; //----------------------------------------------------------------------------// short GLOBAL = 0; bit Press; unsigned char *R = "A"; unsigned char *S = "B"; unsigned char *T = "C"; unsigned char *U = "D"; unsigned char *V = "E"; //----------------------------------------------------------------------------// void main() { TRISA=0; TRISB=0x20; PORTA=0; PORTB=0; Press=0; UART1_Init(9600); while(1) { if(Botao && !Press){ Press=1; GLOBAL++; } else if (!Botao){ Press=0; } if(GLOBAL==1){ UART1_Write(*R); delay_ms(100); } if(GLOBAL==2){ UART1_Write(*S); delay_ms(100); } if(GLOBAL==3){ UART1_Write(*T); delay_ms(100); } if(GLOBAL==4){ UART1_Write(*U); delay_ms(100); } if(GLOBAL==5){ UART1_Write(*V); delay_ms(100); } } } //----------------------------------------------------------------------------//
  7. Pedro, entendi perfeitamente. e você já me ajudou muito... nem sei como agradecer. Agora já não tenho mais port sobrando no 877A. então vou tentar implantar um sistema serial com outro PIC. então to tentando aprender o basico do serial. mas até agora nada. a ideia do programa é quando eu clicar na tecla RB5 do pic 16F628A . o pic 16F877A recebe o dado e escreve "RECEBENDO" no LCD. Código do 16f628A (envia) unsigned char *i = "A"; //define variável como i ponteiro short casa=0; void main() { TRISB=0b00100000; PORTB=0; UART1_Init(9600); //inicializa serial com baudrate 2400 bps while(1) { if(RB5_bit==1){ UART1_Write(*i); //envia o caractere pela serial do kit delay_ms(10); //aguarda 100ms } } } Código do 16F877A (recebe). sbit LCD_RS at RA5_bit; sbit LCD_EN at RA4_bit; sbit LCD_D4 at RA3_bit; sbit LCD_D5 at RA2_bit; sbit LCD_D6 at RA1_bit; sbit LCD_D7 at RA0_bit; sbit LCD_RS_Direction at TRISA5_bit; sbit LCD_EN_Direction at TRISA4_bit; sbit LCD_D4_Direction at TRISA3_bit; sbit LCD_D5_Direction at TRISA2_bit; sbit LCD_D6_Direction at TRISA1_bit; sbit LCD_D7_Direction at TRISA0_bit; //----------------------------------------------------------// void main() { unsigned short int teste; ADCON1 = 0X0F; // TODOS OS ANALOGICOS COMO DIGITAL UART1_Init(9600); // Inicializa UART a 9600bps. do { if (Usart_Data_Ready()){ teste = Usart_Read(); Usart_Write(teste); } if(teste==A){ Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); lCD_oUT(1,1,"RECEBENDO"); } } while(1); )
  8. Pedro você é fera mesmo. funcionou legal aqui com o "int" mesmo. como me atendeu o "int" não vou usar o "float" Agora. implementei para contar até RS 300,00 como queria e ficou legal. .. Do jeito que a coisa esta indo estou ficando féra hehehe. Obrigado mesmo. O programa já esta bem adiantado. Bom... vamos lá ... seguinte. criei uma sub-rotina chamada "LCD" e criei uma variavel chamada "Pulso" dentro do laço while fiz o comando para quando "Pulso" for == a 3 executar a sub-rotina "LCD" do jeito que esta, o display LCD fica piscando os nomes sem parar. ou seja, a sub-rotina fica repetindo infinitamente enquando Pulso for == 3. queria que quando pulso for == 3 essa sub-rotina "LCD" executasse somente 1 vez. to com uma apostila aqui estudando, tentei usar o laço " for " mais não consegui resolver o problema. to quebrando a cabeça com isso... pode ser usando o laço for ! sbit INCREMENTA at RB0_bit; sbit DECREMENTA at RB1_bit; bit Pressionado; short Pulso=0; void TECLA(){ if(INCREMENTA && !Pressionado){ Pressionado=1; Pulso++; } if(DECREMENTA && !Pressionado){ Pressionado =1; Pulso--; } else if (!INCREMENTA && !DECREMENTA)Pressionado=0; } //----------------------------------------------------------------------// sbit LCD_RS at RA5_bit; sbit LCD_EN at RA4_bit; sbit LCD_D4 at RA3_bit; sbit LCD_D5 at RA2_bit; sbit LCD_D6 at RA1_bit; sbit LCD_D7 at RA0_bit; sbit LCD_RS_Direction at TRISA5_bit; sbit LCD_EN_Direction at TRISA4_bit; sbit LCD_D4_Direction at TRISA3_bit; sbit LCD_D5_Direction at TRISA2_bit; sbit LCD_D6_Direction at TRISA1_bit; sbit LCD_D7_Direction at TRISA0_bit; //------------------------------------------------------------------------// void LCD(void){ Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); Lcd_Out(1,1," TESTE "); Lcd_Out(2,1," ATUALIZANDO "); } void main() { // Inicio do programa principal. ADCON0=0x0f; ADCON1=0x06; CMCON|=0x07; lcd_init(); TRISB=0b00000011; TRISD=0b00000000; PORTD=0b00000000; Pressionado=0; while(1){ if(Pulso==3){ LCD(); Delay_ms(10); } TECLA(); } }
  9. Pedro, meu camarada... dessa vez não consegui fazer funcionar não. ele só tá contando até 1,25 depois disso começa aparecer caracteres estranhos.. dai não adinata nem decrementar que não volta o lcd fica locão. o code esta assim. sbit INCREMENTA at RB0_bit; sbit DECREMENTA at RB1_bit; bit Pressionado; short CREDITO = 0; char *TXT="0000"; void TECLA(){ if(INCREMENTA && !Pressionado){ Pressionado =1; if (CREDITO<1000) CREDITO = CREDITO + 25; } if(DECREMENTA && !Pressionado){ Pressionado =1; if (CREDITO>0)CREDITO = CREDITO -25 ; } else if (!INCREMENTA && !DECREMENTA)Pressionado=0; } //----------------------------------------------------------------------// sbit LCD_RS at RA5_bit; sbit LCD_EN at RA4_bit; sbit LCD_D4 at RA3_bit; sbit LCD_D5 at RA2_bit; sbit LCD_D6 at RA1_bit; sbit LCD_D7 at RA0_bit; sbit LCD_RS_Direction at TRISA5_bit; sbit LCD_EN_Direction at TRISA4_bit; sbit LCD_D4_Direction at TRISA3_bit; sbit LCD_D5_Direction at TRISA2_bit; sbit LCD_D6_Direction at TRISA1_bit; sbit LCD_D7_Direction at TRISA0_bit; //------------------------------------------------------------------------// void Exibir_Valor(){ TXT[0]=((CREDITO / 100) % 10) + 48; TXT[1]=','; TXT[2]=((CREDITO / 10 ) % 10) + 48; TXT[3]=((CREDITO / 1 ) % 10) + 48; } void main() { // Inicio do programa principal. ADCON0=0x0f; ADCON1=0x06; CMCON|=0x07; lcd_init(); TRISB=0b00000011; TRISD=0b00000000; PORTD=0b00000000; Pressionado=0; Lcd_Cmd(_LCD_CLEAR); // Limpa display. Lcd_Cmd(_LCD_CURSOR_OFF); // Desliga cursor. while(1){ Lcd_Out(1,1,TXT); Exibir_Valor(); TECLA(); } }
  10. Show em mano... tá de parabens mesmo...
  11. Olá, Pedro, vou usar a EEprom interna do pic mesmo como sugerido. O programa aqui tá andando. só que me surgiu uma duvida. que não sei como resolver. Para não ficar complicado fiz um programinha basico . só para exemplo. é simples, toda bez que aperto a tecla RB0 ele INCREMENTA 1 e quando aperto RB1 ele DECREMENTA 1 . só que eu gostaria que ele aprensetasse valor em dinheiro e que a soma fosse de 0,25 em 0,25 centavos . tipo assim... se eu incrementar uma vez ele aparece 0,25 no display incrementa mais uma vez e vai para 0,50 incrementa mais uma vai para 0,75 incrementa mais uma ele vai para 1,00 .não estou conseguindo colocar esse zero na frente do numero em centavos muito menos a "virgula ".. Consegue me ajudar ? to quebrando a cabeça nisso faz dias já. sbit INCREMENTA at RB0_bit; sbit DECREMENTA at RB1_bit; bit Pressionado; short CREDITO = 0; char TEXTO [10]; char i; void TECLA(){ if(INCREMENTA && !Pressionado){ Pressionado =1; CREDITO++; } if(DECREMENTA && !Pressionado){ Pressionado =1; CREDITO--; } else if (!INCREMENTA && !DECREMENTA)Pressionado=0; } //----------------------------------------------------------------------// sbit LCD_RS at RA5_bit; sbit LCD_EN at RA4_bit; sbit LCD_D4 at RA3_bit; sbit LCD_D5 at RA2_bit; sbit LCD_D6 at RA1_bit; sbit LCD_D7 at RA0_bit; sbit LCD_RS_Direction at TRISA5_bit; sbit LCD_EN_Direction at TRISA4_bit; sbit LCD_D4_Direction at TRISA3_bit; sbit LCD_D5_Direction at TRISA2_bit; sbit LCD_D6_Direction at TRISA1_bit; sbit LCD_D7_Direction at TRISA0_bit; //------------------------------------------------------------------------// void main() { // Inicio do programa principal. ADCON0=0x0f; ADCON1=0x06; CMCON|=0x07; lcd_init(); TRISB=0b00000011; Pressionado=0; Lcd_Cmd(_LCD_CLEAR); // Limpa display. Lcd_Cmd(_LCD_CURSOR_OFF); // Desliga cursor. Delay_ms(100); Lcd_Out(2,2,"CREDITO"); while(1){ bytetostr(CREDITO, texto); Lcd_out(2,11,texto); TECLA(); } }
  12. Pedro, valeu por ter comentado o código. Só me deparei agora com um problemão. Este circuito quando eu tiro a alimentação ele começa tudo novamente. eu precisava que os dados fiquem salvos no pic. para quando eu ligar ele já esta com os mesmo dados de quando ele foi desligado !? para isso eu ia ter que usar uma eeprom externa ? você acha que daria para implementar esse código para essa eeprom ou teria que modificar tudo (fazer um novo programa do zero ?) me dá uma luz ae ou pelo menos um ponto de partida. não sei trabalhar com eprom ainda.
  13. Então Pedro. Este projeto é uma cafeteira automatica. na verdade o programinha vai ser bem grande. com LCD, Rele, motores de passo etc... Mais muitas coisas eu sei fazer. E esse ae é só um teste de algumas coisas que eu não sei fazer ainda no mikroC. eu começei estudando C a algums anos atrás e depois parei, agora to voltando. aqui. ficou show de bola agora , tive uma aula com você hoje. Obrigado Amigo. Pedro, você poderia comentar esse código ? queria entender melhor ele.
  14. É Pedro, você é fera mesmo! funcionou certinho, valeu mesmo... Entendi toda a lógica e já estou quase conseguindo o que quero fazer. só tenho agora mais uma duvida cruél , que essa não faço nem ideia de como fazer... sabe onde fica o codigo "(Pulso>=3) " Eu preciso mudar esse numero de pulso externamente. ou seja. preciso aque o pic tenha mais uma tecla para eu poder mudar este numero 3 por qual quer outro numero. como se fosse uma tecla de setup entende? tipo, se eu clicar nessa tecla " Setup" esse valor vai alterando 1,2,3,4,5 etc.. ou seja, ia alterar externamente o numero de pulso necessario para acionar o pino RD00 isso é possivel ?
  15. beleza Pedro, você entendeu era isso mesmo. Fico grato por sua atenção, obrigado ! agora... sai modificando o codigo "brincando". vê se você consegue me ajudar agora. o codigo esta assim. 3 clique no botão e RD0 vai a 1 5 clique no botão e RD1 vai a 1 13 clique no botão e RD2 vai a 1 18 clique no botão e RD3 vai a 1 como eu faço para colocar um botão para decrementar os cliques ? queria que esse botão no pino RB2 decremente 2 clique. segue o codigo como esta no momento. sbit tecla at RB0_bit; //------------------// bit Pressionado; short Pulso=0; // contador inicia em 0 //------------------// void botões(){ if (tecla && !Pressionado){ Pressionado=1; Pulso++; // variavel contagem if (Pulso>18)Pulso=0; //define onde termina a contagem e onde inicia a contagem } else if (!tecla)Pressionado=0; } //------------------// void main(){ ADCON0=0x0F; ADCON1=0x0F; CMCON|=0x07; TRISB0_bit=1; TRISB2_bit=1; TRISD0_bit=0; TRISD1_bit=0; TRISD2_bit=0; TRISD3_bit=0; RD0_bit=0; RD1_bit=0; RD2_bit=0; RD3_bit=0; Pressionado=0; while(1){ if (Pulso<3){ RD0_bit=0; RD1_bit=0; } else if (Pulso>=3){ RD0_bit=1; if (Pulso==5)RD1_bit=1; } if (Pulso<13){ RD2_bit=0; RD3_bit=0; } else if (Pulso>=13){ RD2_bit=1; if (Pulso==18)RD3_bit=1; } botões(); Delay_ms(10); } } //------------------//

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!