通过按键控制一个LED灯的亮和灭,每次重启时读上一次的状态
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "nvs_flash.h"
#include "nvs.h"
#include "driver/gpio.h"
#include "sdkconfig.h"
#define GPIO_LED_1 0
#define KEY_CONTROLL_1 18
void app_main()
{
int32_t restart_counter = 0;
esp_err_t err = nvs_flash_init();
if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase());
err = nvs_flash_init();
}
ESP_ERROR_CHECK( err );
printf("\n");
printf("Opening Non-Volatile Storage (NVS) handle... ");
nvs_handle_t my_handle;
err = nvs_open("storage", NVS_READWRITE, &my_handle);
if (err != ESP_OK) {
printf("Error (%s) opening NVS handle!\n", esp_err_to_name(err));
} else {
printf("Done\n");
printf("Reading restart counter from NVS ... ");
err = nvs_get_i32(my_handle, "restart_counter", &restart_counter);
switch (err) {
case ESP_OK:
printf("Done\n");
printf("Restart counter = %d\n", restart_counter);
break;
case ESP_ERR_NVS_NOT_FOUND:
printf("The value is not initialized yet!\n");
break;
default :
printf("Error (%s) reading!\n", esp_err_to_name(err));
}
}
printf("\n");
for (int i = 10; i >= 0; i--) {
printf("Restarting in %d seconds...\n", i);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
printf("Restarting now.\n");
gpio_pad_select_gpio(GPIO_LED_1);
gpio_set_direction(GPIO_LED_1, GPIO_MODE_OUTPUT);
gpio_pad_select_gpio(KEY_CONTROLL_1);
gpio_set_direction(KEY_CONTROLL_1,GPIO_MODE_INPUT);
while(1)
{
if(0==gpio_get_level(KEY_CONTROLL_1))
{
vTaskDelay(10);
if(0==gpio_get_level(KEY_CONTROLL_1))
{
restart_counter++;
if(restart_counter>=100)
restart_counter=0;
printf("Updating restart counter in NVS ... ");
err = nvs_set_i32(my_handle, "restart_counter", restart_counter);
printf((err != ESP_OK) ? "Failed!\n" : "Done\n");
printf("Committing updates in NVS ... ");
err = nvs_commit(my_handle);
printf((err != ESP_OK) ? "Failed!\n" : "Done\n");
}
while(!gpio_get_level(KEY_CONTROLL_1))
vTaskDelay(10);
}
gpio_set_level(GPIO_LED_1,restart_counter%2);
vTaskDelay(100);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)