Instrucción para controlar un pin ???

Iniciado por AjarDeNauer, 28 Abril 2011, 13:06 PM

0 Miembros y 1 Visitante están viendo este tema.

AjarDeNauer

¡ Hola ! 

Necesito resolver una pequeña duda y he echado mano de este foro para ver si la puedo solventar.

Hay alguna instrucción que me permita cambiar el estado lógico de un pin sin tener que evaluarlo? Me explico: esté como esté el pin, ya sea a uno o a cero, que se cambie al estado contrario, sin tener que evaluarlo con el posible if / else, para que así consiga hacerlo en una sola línea de código y emplear el menor tiempo posible

Muchas gracias.  :D

ssaammuu

Si extraes el valor, este será 1 o 0, si tratamos 1 como booleano verdadero y 0 como booleano falso puedes hacer estado=!estado para cambiar.

AjarDeNauer

He puesto PIN_B1=!PIN_B1; pero al compilar no me pilla esa expresión

arisma

Sí existe.

Creo recordar que debes usar o/y lógicos para cambiar el pin(bit?)

Akai

Utiliza una XOR:


cplusplus.com :

XOR (Exclusive Or)
This operation is performed between two bits (a and b). The result is 1 if either one of the two bits is 1, but not in the case that both are. There for, if neither or both of them are equal to 1 the result is 0.

XOR (^)
a   b   a^b
0   0   0
0   1   1
1   0   1
1   1   0


La utilidad de la XOR en este caso, es que algo XOR 1 = !algo.

Por tanto:

Código (cpp) [Seleccionar]
bool a=1, PIN_B1=0;

PIN_B1=a^PIN_B1


cambia el estado de PIN_B1 al negado.

El_Java

No valdría en vez de usar XOR usar el complemento "~"?

Por ejemplo:
Código (cpp) [Seleccionar]
PIN_B1 = ~PIN_B1

Pregunto, no tengo aun claro los operador de bits xD

Akai

#6
@El_Java:

Si, de hecho esa es la respuesta que precisamente se está buscando y en la que no había caído. Me acostumbré a la XOR cuando necesito cambiar un bit  en concreto para máscaras usando enteros y no pensé en el complemento.

El_Java

Me alegro de haber ayudado, no estaba seguro, los operador de bits me lian muchisimo.

Por cierto Akai, sino te importa echale un ojo a mi tema del foro, que se que tu entiendes bastante, a ver si pudieras ayudarme.

Un saludo.

AjarDeNauer

gracias pero... no sé qué pasa, no me pilla la instrucción, me da error el compilador. No puedo asignarle nada al pin (=) pero sí evaluarlo (==). Me dice esto: expecting LVALUE such as a variable name or * expression

Akai

Si pones el código que da problemas, es probable que podamos ayudarte sin recurrir a bolas de cristal adivinatorias.