Кнопка активированного сообщения UART - PullRequest
0 голосов
/ 09 июля 2019

"Я пытаюсь использовать кнопку, которая при нажатии вызывает отправку строкового сообщения через UART, но при запуске кода она всегда обнаруживает, что кнопка" всегда нажата ", что не идеально. Мне нужна помощь в исправлении моего кода. Большое спасибо.

Я использую EasyPIC Fusion v7. Устройство P32MX795F512L @ 80 МГц. Я использую MikroC Pro для PIC32 в качестве своей IDE. "

"Для этого кода используется библиотека кнопок и UART."

char read;
unsigned int oldstate;


void main() {
  AD1PCFG = 0XFFFF;             //SETTING AN INPUTS AS DIGITAL I/O
  JTAGEN_bit = 0;               //disable JTAG


  UART2_Init(9600);
  Delay_ms(1000);
  TRISA = 1;                    //setting All portA as inputs

  UART_Set_Active(&UART2_Read, &UART2_Write, &UART2_Data_Ready, &UART2_Tx_Idle);    //Sets UART2 as active
  UART_Write_Text("UART is now ready.");
  UART_Write(13);
  UART_Write(10);

   while(1)
   {
    if (Button(&PORTA, 15, 1 ,1))            //detect if button is pressed
    {
        UART_Write_Text("Button is pressed.");
        UART_Write(13);
        UART_Write(10);
        oldstate = 1;

    }

    if (oldstate && Button(&PORTA, 15, 1, 0)) //detect from logic 1 to 0
    {
        UART_Write_Text("Button is pressed again.");
        UART_Write(13);
        UART_Write(10);
        oldstate = 0;

    }
   }
}

"Я только узнал, как работает UART и как работает библиотека кнопок.

Я ожидаю, что выход будет «Кнопка нажата» при первом нажатии кнопки, затем «Кнопка снова нажата» при повторном нажатии этой же кнопки.

Выход для кода всегда «Кнопка нажата» и печатается постоянно »

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Проблема здесь:

TRISA = 1;

Это симуляция для TRISA = 0x0001; и только порт A0 будет входным. Вы должны были написать:

TRISA = 0xFFFF;`
0 голосов
/ 09 июля 2019

Основная проблема с вашим кодом в том, что эта строка:

UART_Write_Text("Button is pressed again.");

на самом деле следует читать:

UART_Write_Text("Button is RELEASED.");

Кроме этого, у вас могут возникнуть проблемы с оборудованием, если вы не привязываете свой вывод RA15 к GND через понижающий резистор. Вы также можете использовать внутренние подтягивания на вашем PIC.

...