Estoy interconectando PIC32 MCU con 24 entradas y UART. Cuando llega alguna entrada, estos datos se transfieren a la PC a través de uart. Estoy usando múltiples condiciones if como
if(input1==high)
{
putsUART("input 1 ON\n");
}
if(input2==high)
{
putsUART("input 2 ON\n");
}
Lo que está haciendo esta condición es que cada vez que llega una entrada, sigue imprimiendo los datos como
input 1 ON
input 1 ON
input 1 ON
y sigue Quiero que se muestre solo una vez. Por ejemplo, si apliqué input1, input 1 ON
debería imprimirse una vez y si eliminé, la entrada input 1 OFF
debería mostrarse una vez. No sé cómo puedo ejecutar esto si la condición es solo una vez. Por favor ayuda. Gracias.!
CÓDIGO (solo para 3 entradas):
int main()
{
TRISAbits.TRISA6 = 1;
TRISAbits.TRISA7 = 1;
TRISGbits.TRISG13 = 1;
while(1)
{
if(PORTAbits.RA6 == 0) //INPUT 1
{
putsUART2("Input: 1 ON\n");
Delayms(1000);
}
if(PORTAbits.RA7 == 0) //INPUT 2
{
putsUART2("Input: 2 ON\n");
Delayms(1000);
}
if(PORTAbits.RG13 == 0) //INPUT 3
{
putsUART2("Input: 3 ON\n");
Delayms(1000);
}
}
}
Debe recordar el estado de cada entrada y solo enviar la salida al UART si cambia.
Algo como esto, solo para una entrada para que tengas la idea:
// NB - put these lines outside your loop
uint8_t uLastRA6State = 0; // last known state of RA6
uint8_t uLastRA7State = 0; // last known state of RA7
// ... etc.
// use one variable for each input, or if memory is tight, you could
// alternatively use one byte per 8 pins, but this more "wasteful"
// version is easier to understand the principle
while (1)
{
// ...
// NB - put this code inside your loop
if (PORTAbits.RA6 != uLastRA6State)
{
// save current state
uLastRA6State = uLastRA6State ? 0 : 1;
// output change
if (uLastRA6State)
putsUART2("Input: 1 ON\n");
else
putsUART2("Input: 1 OFF\n");
}
// ... do the same for other inputs, e.g.
if (PORTAbits.RA7 != uLastRA7State)
{
// ... similar to above, for RA7
}
}
uLastRA6State ^= 1
.
Rogelio Rowland
Aeronave
scott seidman
Aeronave