Galera, estou fazendo um expansor de portas, tanto digital como analogico.. e o grande problema esta na programação..

Estou tentando criar uma função que eu vou dizer qual pino do expansor devo escrever HIGH para acionar apenas aquele pino especifico, sem afetar os outros que ja estejam high ou low.
Função Que estou usando.

CÓDIGO:

void invertePino(int pinN, byte endereco){ 
  inicio = inicio ^ (1 pinN); 
  Wire.beginTransmission(endereco);
    Wire.write(inicio);
  Wire.endTransmission(endereco);
  delay(40); 
}


Onde o endereço vai o byte do CI do expansor, no caso 0x20, ou 0x38, depende do expansor..
Alguem pode me ajudar nessa função para deixar um pino especifico HIGH ou LOW e os outros nao serem afetados??
Podem me ajudar tambem a criar uma função para leitura, retornando se o pino esta HIGH ou LOW?
O Expansor analogico deixo para depois, pois a logica teoricamente é a mesma.

Exibições: 459

Responder esta

Respostas a este tópico

Suponha que o seu byte esteja assim:
continua = 0b00001111;
e vc quer escrever "1" no 7º bit e "0" no 3º.
pra escrever o zero, primeiro desloquei um "1" para a 3º posição de uma variável qualquer fazendo:
aux = 1 3;
ficando :
aux = 0b00000100;
Na operação (continua &= ~ aux;) a variável "continua" recebe o valor que é resultado de uma AND entre ela mesma e o inverso do "aux":
00001111 (continua)
& 11111011 (~ aux)
--------------------------
00001011

Na operação (continua |= aux;) a variável "continua" recebe o valor que é resultado de uma OR entre ela mesma e "aux":
aux = 1 7;
00001111 (continua)
| 01000000 (aux)
--------------------------
01001111

Não sei porque aqui não da pra escrever o simbolo < duas vezes.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço