Ir ao conteúdo
  • Cadastre-se

Hiago Martins

Membro Pleno
  • Posts

    63
  • Cadastrado em

  • Última visita

Tudo que Hiago Martins postou

  1. Boa noite gurizada! Seguinte, preciso usar um botão para selecionar itens de um menu. Se eu pressionar o botão uma vez (de forma rápida) mudo a opção. Se eu pressionar por 3s o mesmo botão, eu seleciono aquela opção. Alguém pra me dar uma luz?
  2. Buenas, pessoal! Estou trabalhando em uma central de controle acesso a um armário. Para isso vou utilizar cartões RFID e um cartão de memória onde vou armazenar as informações dos usuários. O problema é o seguinte, preciso que o arduino leia o Tag do cartão e compare com os que estão salvos no cartão. Caso o Tag lido na bata com o que está na linha lida, deve pular para a próxima sem continuar seguindo a leitura daquela linha. Caso o Tag bata, deverá ler o resto da linha e e encerrar o processo. Assim como mostra a imagem anexada. Alguém pra me salvar nessa?
  3. Eu estou usando um módulo relé com um esp8266-01 para acionar uma carga. O problema é que quando o esp reinicia ele aciona as suas saídas rapidamente e aciona o relé. Eu precisaria de um meio de caminho pra isso não acontecer.
  4. Fala pessoal. Preciso de um circuito que acione um rele somente após um certo tempo pressionando uma chave, como 1 ou 2 segundos. Existe algum circuito simples que eu possa usar?
  5. Eu não posso ligar o coletor de um mosfet no gate de outro? Daí o primeiro funciona como um inversor para o segundo.
  6. Fala pessoal. Preciso acionar um mosfet com um pulso negativo, só que eu tenho vários mosfet de canal N em casa. Tem alguma forma de juntar dois para ativar com o pulso negativo? Fico no aguardo!
  7. Eu preciso de uma porta xor. Alguma ideia de como fazer ela?
  8. Fala pessoal. Tô precisando de ajuda pra conseguir umas saídas lógicas, as quais são: IN1 | IN2 -> OUT1 | OUT2 0 | 0 -> 0 | 0 1 | 1 -> 1 | 0 0 | 1 -> 0 | 1 Porém, elas têm que ser feitas com transistores e amplificadores operacionais, porque na minha cidade não tem portas lógicas. Alguém tem uma dica?
  9. Atualizei o firmware do ESP-01 para receber comandos AT. Porém, sempre que mando o comando "AT", ele retorna "ERROR" ao invés de "OK". O que pode ser? Estou a muito tempo tentando solucionar esse problema!!
  10. @Isadora Ferraz e @Renato.88 , basicamente o meu circuito e composto por um microcontrolador e alguns relés que funcionam como uma ponte H. Eu ainda não fiz nenhum programa específico, apenas um blink para os relés para testar a placa. Porém, mesmo sem o microcontrolador, os relés permanecem acionados. Esse é o esquemático da parte do microcontrolador.E esse é o esquemático dos relés.
  11. Olá pessoal. Recentemente fiz uma placa de circuito impresso com um circuito que possui 4 relés e 4 transistores. Antes de fazer a placa eu montei o circuito em uma protoboard e funcionou perfeitamente. O problema é que na placa os relés já estão saindo acionados sem o atmega328p mandar 5v. Medi a tensão na base dos transistores e sempre tem aproximadamente 0.7v. O que pode ser?? Fico no aguardo!
  12. Fala galera. Alguém que já tenha usado o Firebase com Arduino ou ESP8266 sabe de alguma função que me permita armazenar a hora e a data no meu banco de dados (Hora e data da rede), sem usar um RTC?
  13. Fala pessoal. Estou usando o ESP32 para enviar dados ao Google Sheets. O código está funcionando, porém a conexão com o host cai a partir da do 5 envio e o ESP32 já não consegue mais conectar. Alguém pode me dar uma força?? Segue o código: #include "HTTPSRedirect.h" #include <WiFi.h> const char* ssid = "Martins07"; const char* password = "casa0285"; const char *ID = "AKfycbzgQ11whfJjj4Kd5Bq0LYfn13rRvCO8k5Px2nw64tNRu47r3TA0"; const char* host = "script.google.com"; const char* googleRedirHost = "script.googleusercontent.com"; const int httpsPort = 443; HTTPSRedirect client(httpsPort); const long intervalo = 1000; long previusMillis; int tentativas; String url = String("/macros/s/") + ID + "/exec?"; const char* fingerprint = "4f649cbf7ed629ad3808a904c5be664897e5da19"; void setup() { Serial.begin(9600); void ConectaWIFI(); void ConectaSheets(); } void loop() { if (millis() - previusMillis >= intervalo) { MantemConectado(); int data = 10; enviaDados("SoilMoisture", data); previusMillis = millis(); } } void ConectaSheets(){ Serial.print(String("Conectando a: ")); Serial.println(host); if (!client.connected()){ if(client.connect(host, httpsPort)){ Serial.println("---Conectado ao host!---"); } else Serial.println("---Falha ao conectar ao host!---"); } if (client.verify(fingerprint, host)) Serial.println("---Certificado de segurança correspondente!---"); else Serial.println("---Certificado de segurança não correspondente!---"); } void ConectaWIFI(){ if(WiFi.status() == WL_CONNECTED) return; else { //WiFi.config(local_IP, gateway, subnet, DNS); WiFi.begin(ssid, password); Serial.print("AGUARDE - Conectando ao WIFI"); while((WiFi.status() != WL_CONNECTED)&& (tentativas < 10)){ Serial.print("."); delay(500); tentativas++; } if(tentativas == 10 ){ Serial.println("\nERROR - Não foi possível conectar a rede!"); Serial.print("Reenicie o sistema!"); } else{ Serial.println("\nConectado ao WIFI com sucesso!"); Serial.print("IP: "); Serial.println(WiFi.localIP()); tentativas = 0; } } } void enviaDados(String tag, float value){ String urlFinal = url + "tag=" + tag + "&value=" + String(value); client.printRedir(urlFinal, host, googleRedirHost); } void MantemConectado(){ if (WiFi.status() != WL_CONNECTED) ConectaWIFI(); if(!client.connected()) ConectaSheets(); }
  14. Fala pessoal. Coloquei um SSD no lugar do meu HDD e coloquei o HDD no lugar do dvd-r. Percebi que o HDD não desliga junto com o notebook e acaba "desligado errado". Faz o mesmo som que faz quando acontece uma queda de energia subida (desliga direto no botão ou puxa da tomada). Alguém sabe como posso resolver isso?? Alguma configuração que faça com que o notebook só desligue depois do HDD??
  15. Estou precisando criar um programa que SELECIONE um ARQUIVO dentro de um cartão SD ("exemplo.csv") e envie via bluetooth. Não quero enviar os dados do arquivo e sim o arquivo. Não encontrei nada semelhante a isso na internet. Alguém pode me ajudar?
  16. @devair1010 muito obrigado!! de novo Meu código ficou assim, só falta terminar o que minha tarefa me pede. #include <stdio.h> struct { long data = 0; float temp = 0.0; float press = 0.0; float vel = 0.0; int hora = 0; int dir = 0; int umid = 0; }lin, media; int conta_linha( char arq [50] ){ FILE*entrada = fopen(arq, "r"); int y; int conta = -1; char aux[50]; fgets(aux, 50, entrada); while(!feof(entrada)){ fgets(aux, 50, entrada); for(y=0; y<50; y++){ if(aux[y] == '\n') conta ++; } } fclose(entrada); return conta; } int x = 1; int i, final, teste, l_total; char nome_in[50]; int pred[100][2]; FILE*entrada; FILE*saida; int main(){ scanf("%s", &nome_in); entrada = fopen(nome_in, "r"); saida = fopen("mediahora.csv", "w"); l_total = conta_linha(nome_in); while(final <= l_total){ fscanf(entrada, "%ld;%d;%f;%d;%f;%d;%f \n", &lin.data, &lin.hora, &lin.temp, &lin.umid, &lin.press, &lin.dir, &lin.vel); if(lin.hora == 0){ for(i = 0; i<1000; i++){ teste = 0; if(pred[i][0] == lin.dir) { teste++; break; } } if(teste) pred[i][1]++; else{ for(i = 0; i<1000; i++){ if(pred[i][0] == 0){ pred[i][0] = lin.dir; pred[i][1] = 1; break; } } } } final++; } int pos; int inicial = pred[0][1]; for(i = 0; i<100; i++){ if(pred[i][1]>inicial){ inicial = pred[i][1]; pos = i; } } printf("O numero %d apareceu %d vezes!\n", pred[pos][0], inicial); fclose(entrada); fclose(saida); return 0; }
  17. Tenho que fazer leituras de linhas e no fim imprimir um determinado valor predominante ( o que mais apareceu e não uma média). No exemplo abaixo, o valor predominante é o 5, então, no fim do processo, eu deveria imprimir algo como: "O número 5 é o predominante!". Como posso fazer isso? 20190101;0000;23.2;89;1011.5;9;3.3 20190101;1200;26.8;88;1011.8;5;3.3 20190101;1800;29.2;79;1010.2;5;3.3 20190102;0000;27.2;83;1009.5;5;3.3 20190102;1200;28.2;84;1007.5;5;0.7 20190102;1800;39.4;47;1002.2;32;3.6 20190103;0000;26.3;96;1003.5;5;1.3 20190103;1200;22.8;95;1005.2;32;0.7
  18. O código abaixo deveria ler linhas de um arquivo de dados e caso as datas das linhas fossem iguais ele deveria fazer uma media dos seus valores, só que não está funcionando. Ele está fazendo apenas a média das duas primeiras linhas e ignorando o resto. Alguém conseguiria me dar um caminho? exemplos de linhas a serem lidas: 20190101;0000;23.2;89;1011.5;9;3.3 20190101;1800;28.2;44;1012.0;23;3.5 //Faria uma media para o dia 01/01 20190102;0000;21.0;79;1012.2;36;2.0 20190102;1200;23.2;89;1011.5;9;3.3 20190102;1800;28.3;44;1012.0;23;3.5 //Faria uma media para o dia 02/01 20190103;0000;24.4;79;1012.2;36;2.0 //Faria uma média para o dia 03/01 #include <stdio.h> int x = 0; struct { long data = 0; float temp = 0.0; float press = 0.0; float vel = 0.0; int hora = 0; int dir = 0; int umid = 0; }lin, lin2, media; int main(){ FILE*entrada = fopen("teste.csv", "r"); fscanf(entrada, "%ld;%d;%f;%d;%f;%d;%f \n", &lin.data, &lin.hora, &lin.temp, &lin.umid, &lin.press, &lin.dir, &lin.vel); while(!feof(entrada) ){ if((lin.data == lin2.data) || (lin2.data == 0)){ lin2.data = lin.data; lin2.temp = lin2.temp + lin.temp; lin2.press = lin2.press + lin.press; lin2.umid = lin2.umid + lin.umid; x++; } else{ media.temp = lin2.temp/x; media.press = lin2.press/x; media.umid = lin2.umid/x; printf("%ld;%.1f;%d;%.1f \n", lin2.data, media.temp, media.umid, media.press ); lin2.data = lin.data; lin2.temp = lin.temp; lin2.press = lin.press; lin2.umid = lin.umid; media.data = media.temp = media.umid = media.press = 0; x = 0; } fscanf(entrada, "%ld;%d;%f;%d;%f;%d;%f \n", &lin.data, &lin.hora, &lin.temp, &lin.umid, &lin.press, &lin.dir, &lin.vel); } fclose(entrada); return 0; }
  19. Preciso de uma função que faça a mesma coisa que a fseek( ), só que não para um tipo FILE*, mas sim para uma string.
  20. @Flávio Pedroza tanto faz, desde que funcione
  21. @r_Tray e @devair1010, me dêem uma força aí
  22. Pessoal, é o seguinte: eu tenho uma serie de dados de medições de sensores separados linha a linhas. Nessas linhas eu tenho a data em que as medições foram feitas. O que eu preciso fazer é analisar se as datas de uma linha e outra são iguais, se sim o meu programa deve fazer a média entre os valores dos sensores. exemplo: (data;hora;temperatura;umidade;pressão) 20190101;1200;33.3;88;1010.5 20190101;1800;27.3;80;1011.8 20190101;0000;18.7;66;1015.6 20190102;1200;30.3;87;1009.3 20190102;1800;28.7;78;1017.5 As linhas 1, 2 e 3 tem datas iguais, ou seja, o programa deve fazer uma média entre os dados dos sensores das linhas 1, 2 e 3. A linha 4 não é igual a linha três, mas é igual a 5, ou seja, o programa deve fazer uma média entre os dados do sensores das linhas 4 e 5. Como posso começar?? Me ajudem!!
  23. @r_Tray e @devair1010 Terminei meu código pessoal. Muito obrigado mesmo pela ajuda de vocês. Ele ficou assim: #include <stdio.h> #include <ctype.h> #include <locale.h> #include <stdlib.h> char linha[50]; char nome_in[50]; char nome_out[50]; int conf_lixo(char texto[50]){ //função que confere se há lixo nas linhas do arquivo int p; int confere = 0; for(p=0; texto[p] != '\n'; p++){ if(isdigit(texto[p])==false && texto[p]!= ';' && texto[p]!='.') confere++; //confere se o carcter é diferente de um número decimal e difere de ";" ou "." } if(confere != 0) return 1; if(confere == 0) return 0; } int conf_data_time(char horadata[50]){ //função que confere se data e hora são válidas int teste = 0; if((horadata[0]!='2') && (horadata[1]=!'0') && (horadata[2]!='1') && (horadata[3]!='9')) teste++; //confere se o ano é válido if(((horadata[4]-'0')>1) || (horadata[4] == '1' && (horadata[5]-'0')>2)) teste++; //confere se o mês é válido if((horadata[6] == '3') && ((horadata[7]-'0')>1)) teste++; //confere se o dia é válido if(((horadata[9]-'0')>2) || (horadata[9]=='2' && (horadata[10]-'0')>3)) teste++; //confere se as horas são válidas if((horadata[11]-'0')>5) teste++; //confere se os minutos são válidos*/ if (!teste) return 0; // se data e hora forem validas, retorna 0 if(teste > 0) return 1; // se data ou hora for invalida, retorna 1 } int main(){ setlocale(LC_ALL,"portuguese"); FILE*entrada; FILE*saida; printf("Digite o nome (+ .csv) do arquivo que será limpo de dados corrompidos: "); //solicita o nome do arquivo que será limpo scanf("%s", &nome_in); printf("Digite o nome (+ .csv) do arquivo onde os dados limpos serão salvos: "); //solicita o nome do arquivo em que os dados limpos serão salvos scanf("%s", &nome_out); entrada = fopen(nome_in, "r"); if(entrada == NULL){ printf("ERRO - Não foi possível abrir o arquivo dados! \n Os dados anteriores foram mantidos!"); system("pause"); return 1; } else{ saida = fopen(nome_out, "w"); } fgets(linha, 50, entrada); while(!feof(entrada)){ int x = conf_lixo(linha); int y = conf_data_time(linha); if ((x+y) == 0){ fputs(linha, saida); fgets(linha, 50, entrada); } else{ fgets(linha, 50, entrada); } } fclose(entrada); fclose(saida); printf("ÊXITO - O arquivo está livre de lixos!\n"); system("pause"); return 0; }
  24. @r_Tray @devair1010 Criei esse código com duas funções que "limpam" o meu arquivo. Eles estão funcionando corretamente, visto que elas estão retornando os valores corretos. Porém, quando eu faço uso da função conf_data_time a minha saida fica: 2 2 2 Me ajudem por favor!!!!! #include <stdio.h> #include <ctype.h> #include <locale.h> #include <stdlib.h> char linha[50]; int conf_lixo(char texto[50]){ //função que confere se há lixo nas linhas do arquivo int p; int confere = 0; for(p=0; texto[p] != '\n'; p++){ if(isdigit(texto[p])==false && texto[p]!= ';' && texto[p]!='.') confere++; //confere se o carcter é diferente de um número decimal e difere de ";" ou "." } if(confere != 0) return 1; if(confere == 0) return 0; } int conf_data_time(char horadata[50]){ //função que confere se a data e a hora são válidas int teste = 0; if((horadata[0]!='2') || (horadata[1]=!'0') || (horadata[2]!='1') || (horadata[3]!='9')) teste++; //confere se o ano é válido if(((horadata[4]-'0')>1) || (horadata[4] == '1' && (horadata[5]-'0')>2)) teste++; //confere se o mês é válido if((horadata[6] == '3') && ((horadata[7]-'0')>1)) teste++; //confere se o dia é válido if(((horadata[9]-'0')>2) || (horadata[9]=='2' && (horadata[10]-'0')>3)) teste++; //confere se as horas são válidas if((horadata[11]-'0')>5) teste++; //confere se os minutos são válidos*/ if (!teste) return 0; // se data e hora forem validas, retorna 0 if(teste > 0) return 1; // se data ou hora for invalida, retorna 1 } int main(){ setlocale(LC_ALL,"portuguese"); FILE*entrada; FILE*saida; entrada = fopen("dados.csv", "r"); if(entrada == NULL){ printf("ERRO - Não foi possível abrir o arquivo dados! \n Os dados anteriores foram mantidos!"); system("pause"); return 1; } else{ saida = fopen("dadosCorrigidos.csv", "w"); } fgets(linha, 50, entrada); while(!feof(entrada)){ int x = conf_lixo(linha); int y = conf_data_time(linha); //printf("%d %d \n", x, y); if ((x+y) == 0){ puts(linha); fgets(linha, 50, entrada); } else{ fgets(linha, 50, entrada); } } fclose(entrada); fclose(saida); printf("ÊXITO - O arquivo está livre de lixos!\n"); system("pause"); return 0; }

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