#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/gpio.h"
#include "pico/binary_info.h"
//#include "tusb.h"
const uint LED_PIN = 25;
// #define PUSH_BUTTON_01 4
const uint PUSH_BUTTON_01 = 4;
int led_state = 0;
void button_debounce_01(){
// debounce button and check if the button went from high to low and is staying low
// 20 ms delay for H to L edge debounce
bool push_btn_1_state;
printf("button_debounce_01() entered\n");
// sleep_ms(1);
//sleep_us(500);
printf("sleep_ms() ended\n");
if( gpio_get(PUSH_BUTTON_01) == 0){
// debounce succesful, button press detected
printf("01\n");
if(led_state == 0){
led_state = 1;
} else{
led_state = 0;
}
}
else {
printf("02\n");
return; // button press NOT detected
}
printf("03\n");
}
int main() {
bi_decl(bi_program_description("This is a test binary."));
bi_decl(bi_1pin_with_name(LED_PIN, "On-board LED"));
stdio_init_all();
// while (!tud_cdc_connected()) {
// tight_loop_contents();
// }
printf("hello button debounce test\n");
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
gpio_init(2);
gpio_init(4);
gpio_init(6);
gpio_set_dir(2, GPIO_IN);
gpio_set_dir(4, GPIO_IN);
gpio_set_dir(6, GPIO_IN);
gpio_pull_up(2);
gpio_pull_up(4);
gpio_pull_up(6);
gpio_set_irq_enabled_with_callback(PUSH_BUTTON_01, GPIO_IRQ_EDGE_FALL , true, &button_debounce_01);
// #if 0
// while (1) {
// gpio_put(LED_PIN, 0);
// sleep_ms(250);
// gpio_put(LED_PIN, 1);
// puts("Hello World\n");
// sleep_ms(1000);
// }
// #endif
while(1){
int i = gpio_get(PUSH_BUTTON_01);
printf("i = %d\n", i);
gpio_put(LED_PIN, i);
sleep_ms(500);
}
}
// #include <stdio.h>
// #include "pico/stdlib.h"
// #include "hardware/gpio.h"
// void gpio_callback() {
// printf("GPIO RISE\n");
// }
// int main() {
// stdio_init_all();
// printf("Hello GPIO IRQ\n");
// gpio_init(2);
// gpio_set_dir(2, GPIO_IN);
// gpio_pull_up(2);
// gpio_set_irq_enabled_with_callback(2, GPIO_IRQ_EDGE_RISE, true, &gpio_callback);
// // Wait forever
// while (1);
// return 0;
// }
// #include <stdio.h>
// #include "pico/stdlib.h"
// // #include "hardware/gpio.h"
// // #include "hardware/regs/addressmap.h"
// // #include "hardware/regs/io_bank0.h"
// // #include "hardware/regs/timer.h"
// // #include "hardware/regs/m0plus.h"
// //#include "core_cm0plus.h"
// //#include "stm32f0xx.h"
// void main_asm();
// void link_gpio_set_dir(int pin, int dir)
// {
// gpio_set_dir(pin, dir);
// }
// void link_gpio_put(int pin, int value)
// {
// gpio_put(pin, value);
// }
// // void SysTick_Handler(void)
// // {
// // // Increment a millisecond counter
// // // Perform system-level functions
// // }
// // void link_print(int i)
// // {
// // printf("isr_systick=%d\n", i);
// // }
// int main(void)
// {
// //uint32_t systick_handler_addr = (uint32_t)&SysTick_Handler;
// //*((volatile uint32_t *)0xE000ED04) = systick_handler_addr;
// printf("Hello\n");
// main_asm();
// }