Descobrir a configuração do pino INPUT OU OUTPUT (resolvido)

Pessoal, consultei pela rede e não encontrei nada a respeito....

A situação é a seguinte, tenho vários arduinos conectados, sendo que o setup de pinmode é diferente para cada um deles o mesmo é feito dinâmicamente!

Preciso saber por exemplo o setup do pino 5 do arduino 1? ou o setup do pino 6 do arduino 2 e assim por diante, quando utilizo o termo "setup" quero dizer se ele foi configurado como INPUT ou OUTPUT.

Resumo: Existe alguma função ou técnica para descobrir como o pino foi configurado, se foi INPUT ou OUTPUT?

Grato.

Antonelitk@hotmail.com

Exibições: 1370

Responder esta

Respostas a este tópico

Deixa eu ver se entendi direito, vc quer saber se o pino foi configurado como INPUT ou OUTPUT, através do código?

Se for isso, a configuração é:

pinMode(5, OUTPUT); // configura o pino 5 como saída

vou tentar Explicando melhor, eu tenho 3 arduinos conversando via NRF24l01, cada um tem um programação diferente que não importa no momento, mas a questão que a configuração dos pinos já estão feita, por exemplo o pino 5 do arduino 1 tá com PINMODE(5, output) e do arduino 2 tá como PINMODE(5, INPUT). até ai blz. Agora aumente o universo, eu tenho 20 arduinos conectados, em um determinado momento eu preciso saber qual é o pinmode do arduino 1 pino 1, pino2 etc.. e idem para outros arduinos.

Imagino que seria um tipo de função para saber o estado do PINMODE algo do tipo pinModeState(pin);

e isso retornaria 0 para output e 1 pra input.

Entendeu o problema?

Agora entendi. Não sei a resposta, apenas tenho um palpite (pelo menos um ponto de partida):

Acho que esta função não existe, mas pesquisando rápido aqui achei isso, talvez sirva de ponto de partida:

http://labdegaragem.com/forum/topics/duvida-arduino-inverter-pin-in...

É ao menos um ponto de partida.

Minha hipótese é que se vc testar o pino com um digitalRead e obter um HIGH, sabe que aquele pino é uma entrada, e pode mudá-lo para saída se for necessário. Se não houver HIGH, então ou o pino está em LOW ou não é entrada, concorda? Não sei, é um palpite, boa sorte!

Não vai funcionar! Imagine a seguinte seguência:

I)eu tenho o pino 1 definido como OUTPUT no arduino A,

II)eu escrevo através de comando pelo arduino B digitalWrite(1, HIGH) no arduino A,

III)depois faço um digitalread pelo arduino C nesse mesmo pino do arduino A

IV)a resposta vai ser HIGH sendo que o pino é de saída.

V)eu volto e escrevo através de comando pelo arduino B digitalWrite(1, LOW) no arduino A, 

VI)depois faço um digitalread pelo arduino C nesse mesmo pino do arduino A

VI)agora a resposta vai ser LOW sendo que o pino é de saída.

De qualquer forma obrigado por, me ajudar a achar a solução para esse problema!!!!!

Continuo na busca.....

Valeo

amigo, como é que vc está conseguindo escrever novo comando, tipo digitalWrite(1, HIGH) no arduino A, a partir do arduino B????

Os arduinos estão comunicando-se com módulos NRF24l01 (Rádio frequencia), sobre a biblioteca RadioHead, eu criei um protocolo para interpretação de comandos, então envio DigitalWrite ou DigitalRead, por esse protocolo.

ah ok... 

agora me responda outra coisa: e como é que vc pensou em receber a informação de que a porta foi configurada pra input ou output? tem algum display lcd? tem um serial monitor?

perceba onde eu quero chegar: sugiro vc implementar um "dedo duro" no sketch. Esse "dedo duro" será capaz de delatar se aquela determinada porta daquele arduino estava previamente configurada pra input ou pra output.

Já está dessa forma montei uma string de bits para identificar o status de cada porta, e na string, eu defino se o pino vai ser output, input, ou input_pullup. 

Quando necessário faço a leitura dessa string, a questão é que estou precisando otimizar a memória e pretendo retirar a string.

pela mensagem do compilador, vc tem uma noção do que está acontecendo!!!!

O sketch usa 14.116 bytes (45%) de espaço de armazenamento para programas. O máximo são 30.720 bytes.
Variáveis globais usam 1.797 bytes (87%) de memória dinâmica, deixando 251 bytes para variáveis locais. O máximo são 2.048 bytes.
Low memory available, stability problems may occur.

opa, peraí... eu tinha entendido que vc estava com dúvida em como implementar o reconhecimento das portas, se elas foram configuradas originalmente como input ou output.

Agora vc está dizendo que quer apenas otimizar o sketch pra consumir menos memória?

Seguinte, pra ser mais objetivo eu fui direto no problema!

E uma das otimizações é retirar essa string mas para isso ser possível estou a procura de tal funcionalidade nativa do arduino, para não ter que ficar desenvolvendo funções que possivelmente já existam!

entendi... vc já tem uma solução, só que ela é ineficiente por consumir demais a memória. E então gostaria de aprimorar seu sketch.

Sem ver teu código fica difícil dar sugestões. E também não estou dizendo pra vc postar seu código, até porque deve ser bem grande e dará trabalho tentar entender ou tentar melhorar. Mas na maioria das vezes é possível fazer pequenas correções que otimizam um pouco o uso dos recursos. O problema então passa a ser o quão motivado vc estará pra ir atrás dessa sintonia fina

Particularmente, todas as vezes que eu me deparei com o quase esgotamento de memória, eu resolvia isso através da solução mais fácil: passava a usar um arduino mega.

Se usar o MEGA, vc terá 8x mais espaço pra armazenamento e 4x mais memória dinâmica do que isso aí que vc mostrou. Gasta um pouco mais em dinheiro, mas economiza outro bem precioso que é o seu tempo.

Concordo plenamente!

Mas cai em outro problema, espaço físico!!!!

Pra resumir esse é um projeto de automação, além dos arduinos Mega, eu preciso do Nano menor tamanho físico.

só pra vc ter uma ideia da brincadeira veja a foto....

Anexos

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço