Ir ao conteúdo
  • Cadastre-se

picmoretto

Membro Júnior
  • Posts

    6
  • Cadastrado em

  • Última visita

Reputação

3
  1. obrigado a todos pelo apoio e paciência, em relação ao (digitalWrite(led_azul, HIGH)); eu ja havia renomeado ele (#define led_azul 2) e coloquei como saida (pinMode led_azul, OUTPUT); por isso usei o mesmo nome para montar o programa, o problema esta no else pois se eu usar a lógica if e else, o else fica atrelado a esse if, quando se usa a lógica 1 ou 0 fica mais fácil pois o contrario de 1 automaticamente é zero, mas no RFID se a tag for a salva no programa ele executa o if mas, o else só entra se haver uma leitura de outra tag não cadastrada, realizei o teste com a linha de comando abaixo, o led ascende com a aproximação da tag, e so apaga quando passo outra tag não cadastrada, o grande problema esta em fazer o else reconhecer quando não tem tag nenhuma no sensor e não apenas quando tem uma tag não cadastrada. if (strID.indexOf("FF:E5:9E:59") >= 0) { //SE O ENDEREÇO DA TAG LIDA FOR IGUAL AO ENDEREÇO INFORMADO, FAZ digitalWrite(led_azul, HIGH); } else{ digitalWrite(led_azul, LOW);}
  2. Fico muito grato pela ajuda der todos, usei o exemplo da linha citado mas ao aproximar a tag do leitor nada acontece, mudei o comando somente para ligar o led para ter certeza que o leitor estava funcionado e o led ligou normalmente, (digitalWrite(led_azul, HIGH)); mas ao afastar a tag ele ainda permanece ligado, abaixo esta como coloquei a linha de comando do exemplo onde nada acontece quando aproximo a tag. deste ja agradeço a colaboração de todos. if (strID.indexOf("TT:EE:9Y:54") >= 0) { //SE O ENDEREÇO DA TAG LIDA FOR IGUAL AO ENDEREÇO INFORMADO, FAZ digitalWrite(led_azul,rfid.PICC_IsNewCardPresent()); } }
  3. Ola a todos, estou montando um projeto que utiliza o arduino uno R3 e o modulo RFID MFRC522, é um projeto ja bastante utilizado e tem muito material na internet sobre ele, mas seu funcionamento sempre se da da mesma forma, ao aproximar a tag (cadastrada) do leitor uma saida é acionada e conta um tempo (delay) e depoiis desliga, mas eu gostaria que funcionasse da seguinte forma, ao aproximar a tag, a saida ou um led por exemplo é ligado e permanece assim enquanto a tag estiver no leitor, e apaga quando afastar a tag do leitor, em meu projeto preciso usar a condição if e else, onde enquanto a tag estiver no leitor ele executa o que esta no if, mas quanto afastar executa o else, fico grato pela ajuda e atenção de todos, obrigado. abaixo esta o programa que quero modificar. #include <SPI.h> //INCLUSÃO DE BIBLIOTECA #include <MFRC522.h> //INCLUSÃO DE BIBLIOTECA #define SS_PIN 10 //PINO SDA #define RST_PIN 9 //PINO DE RESET MFRC522 rfid(SS_PIN, RST_PIN); //PASSAGEM DE PARÂMETROS REFERENTE AOS PINOS const int pinoLedVerde = 3; //PINO DIGITAL REFERENTE AO LED VERDE const int pinoLedVermelho = 2; //PINO DIGITAL REFERENTE AO LED VERMELHO void setup(){ Wire.begin(); //INICIALIZA A BIBLIOTECA WIRE SPI.begin(); //INICIALIZA O BARRAMENTO SPI rfid.PCD_Init(); //INICIALIZA MFRC522 pinMode(pinoLedVerde, OUTPUT); //DEFINE O PINO COMO SAÍDA pinMode(pinoLedVermelho, OUTPUT); //DEFINE O PINO COMO SAÍDA digitalWrite(pinoLedVerde, LOW); //LED INICIA DESLIGADO digitalWrite(pinoLedVermelho, LOW); //LED INICIA DESLIGADO } void loop() { leituraRfid(); //CHAMA A FUNÇÃO RESPONSÁVEL PELA VALIDAÇÃO DA TAG RFID } //FUNÇÃO DE VALIDAÇÃO DA TAG RFID void leituraRfid(){ if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) //VERIFICA SE O CARTÃO PRESENTE NO LEITOR É DIFERENTE DO ÚLTIMO CARTÃO LIDO. CASO NÃO SEJA, FAZ return; //RETORNA PARA LER NOVAMENTE /***INICIO BLOCO DE CÓDIGO RESPONSÁVEL POR GERAR A TAG RFID LIDA***/ String strID = ""; for (byte i = 0; i < 4; i++) { strID += (rfid.uid.uidByte[i] < 0x10 ? "0" : "") + String(rfid.uid.uidByte[i], HEX) + (i!=3 ? ":" : ""); } strID.toUpperCase(); /***FIM DO BLOCO DE CÓDIGO RESPONSÁVEL POR GERAR A TAG RFID LIDA***/ //O ENDEREÇO "27:41:AA:AB" DEVERÁ SER ALTERADO PARA O ENDEREÇO DA SUA TAG RFID QUE CAPTUROU ANTERIORMENTE if (strID.indexOf("27:41:AA:AB") >= 0) { //SE O ENDEREÇO DA TAG LIDA FOR IGUAL AO ENDEREÇO INFORMADO, FAZ digitalWrite(pinoLedVerde, HIGH); //LIGA O LED VERDE delay(3000); //INTERVALO DE 4 SEGUNDOS digitalWrite(pinoLedVerde, LOW); //DESLIGA O LED VERDE }else{ //SENÃO, FAZ (CASO A TAG LIDA NÃO SEJÁ VÁLIDA) digitalWrite(pinoLedVermelho, HIGH); //LIGA O LED VERMELHO delay(3000); ////INTERVALO DE 6 SEGUNDOS digitalWrite(pinoLedVermelho, LOW); //DESLIGA O LED VERDE } rfid.PICC_HaltA(); //PARADA DA LEITURA DO CARTÃO rfid.PCD_StopCrypto1(); //PARADA DA CRIPTOGRAFIA NO PCD }
  4. Usei o seguinte código mas creio que em algum momento o programa lê o segundo if causando esse efeito de funcionar hora sim hora não. #include<12f675.h> #fuses INTRC_IO,NOWDT,PUT,NOBROWNOUT,NOMCLR #use delay(clock=4000000) void main() { while(TRUE) { if(input(pin_a1)==1){ output_high(pin_a0); //liga o led delay_ms(1000); //aguarda um tempo inicio: output_low(pin_a0);//desliga o led } if(input(pin_a1)==1){goto inicio; } } }
  5. Obrigado pela ajuda paulo, tentei fazer algo parecido com que você sugeriu mas não tive sucesso, o programa as vezes lia o botão outras vezes não, poderia me ajudar com o código se possível.
  6. Oi galera tudo bem, me desculpe se estou postando no lugar errado sou novo no fórum, já busquei aqui uma solução mas não encontrei nada parecido com quero fazer, estou iniciando em PIC e escrevi um programa para piscar um led que posteriormente usarei para acionar reles, o problema é o seguinte, quando pressiono o botão o LED acende aguarda um tempo e desliga e fica aguardando o botão ser pressionado novamente, mas quando mantenho o botão pressionado o LED fica acesso o tempo todo, eu preciso que o led só volte a acender quando eu soltar o botão e pressionar novamente, ou seja pressiono o botão (mantenho ele pressionado) o led acende aguarda um tempo e desliga e só volte a fazer esse ciclo quando soltar o botão e pressionar novamente. estou usando o microcontrolador pic12f675, e ccs para programar abaixo esta o programa ate aonde consegui fazer. deste já agradeço a atenção de todos. #include<12f675.h> #fuses INTRC_IO,NOWDT,PUT,NOBROWNOUT,NOMCLR #use delay(clock=4000000) void main() { while(TRUE) { if(input(pin_a1)==1){ //aguarda o botão ser pressionado output_high(pin_a0); //liga o led delay_ms(3000); //aguarda um tempo output_low(pin_a0);//desliga o led } } }

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!