简单的使用VS code编写代码控制单片机(二)

前期编写准备

打开VS code 选择一个文件夹

(此处可参考博主之前所写的一篇博客,从样例中拷贝一份blink文件,存入另外一个文件夹中便于使用,同时可修改文件名作为测试,此处我将它更改为了blinktoblinktest2)

 打开 blinktoblinktest2 依据电路板的引脚修改可执行代码,我设计的是不同的开关启动,能够引起不同的发光二极管按照一定规律闪烁和蜂鸣器的响动

选择好端口com 4之后,再点击ESP-IDF Build project(即最下方垃圾桶右侧处)进行编译,编译成功结果如下图

 代码如下,仅供参考

此代码测试情况良好,不过也存在了一定的缺陷,有待调试

/* GPIO Example

   This example code is in the Public Domain (or CC0 licensed, at your option.)

   Unless required by applicable law or agreed to in writing, this
   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
   CONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "driver/gpio.h"



#define GPIO_OUTPUT_IO_LED2    15
#define GPIO_OUTPUT_IO_LED3    2
#define GPIO_OUTPUT_IO_LED4    4
#define GPIO_OUTPUT_IO_BEEP    19
#define GPIO_OUTPUT_PIN_SEL  ((1ULL<<GPIO_OUTPUT_IO_LED2) | (1ULL<<GPIO_OUTPUT_IO_LED3) | (1ULL<<GPIO_OUTPUT_IO_LED4)| (1ULL<<GPIO_OUTPUT_IO_BEEP))

#define GPIO_INPUT_IO_SW3     14
#define GPIO_INPUT_IO_SW4     12
#define GPIO_INPUT_IO_SW5     13
#define GPIO_INPUT_PIN_SEL  ((1ULL<<GPIO_INPUT_IO_SW3) | (1ULL<<GPIO_INPUT_IO_SW4)| (1ULL<<GPIO_INPUT_IO_SW5))


void TaskReadSW3(void* arg)
{
    uint32_t io_num;

    while(1)
	{
		if(gpio_get_level(GPIO_INPUT_IO_SW3))//按下是0,松开是1
		{
			gpio_set_level(GPIO_OUTPUT_IO_LED2, 0);//输出0,灯灭
		//gpio_set_level(GPIO_OUTPUT_IO_BEEP, 0);//输出0,蜂鸣器不响
		}else
		{
            gpio_set_level(GPIO_OUTPUT_IO_LED2, 0);//输出0,灯灭
            vTaskDelay(200 / portTICK_RATE_MS);//延时200ms
			gpio_set_level(GPIO_OUTPUT_IO_LED2, 1);//输出1,2灯亮
            vTaskDelay(50 / portTICK_RATE_MS);//延时50ms
            gpio_set_level(GPIO_OUTPUT_IO_LED3, 1);//输出1,3灯亮
            vTaskDelay(50 / portTICK_RATE_MS);//延时50ms
            gpio_set_level(GPIO_OUTPUT_IO_LED4, 1);//输出1,4灯亮
            vTaskDelay(100 / portTICK_RATE_MS);//延时100ms
            gpio_set_level(GPIO_OUTPUT_IO_BEEP, 1);//输出1,蜂鸣器响
            vTaskDelay(100 / portTICK_RATE_MS);//延时100ms
            gpio_set_level(GPIO_OUTPUT_IO_BEEP, 0);//输出0,蜂鸣器不响
            vTaskDelay(50 / portTICK_RATE_MS);//延时50ms

		}
		vTaskDelay(500 / portTICK_RATE_MS);//延时500ms
	}
}

void TaskReadSW4(void* arg)
{
    uint32_t io_num;

    while(1)
	{
		if(gpio_get_level(GPIO_INPUT_IO_SW4))//按下是0,松开是1
		{
			gpio_set_level(GPIO_OUTPUT_IO_LED3, 0);//输出0,灯灭

		}else
		{
            gpio_set_level(GPIO_OUTPUT_IO_LED3, 0);//输出0,灯灭
            vTaskDelay(200 / portTICK_RATE_MS);//延时200ms
            gpio_set_level(GPIO_OUTPUT_IO_LED4, 1);//输出1,4灯亮
            vTaskDelay(50 / portTICK_RATE_MS);//延时50ms
			gpio_set_level(GPIO_OUTPUT_IO_LED3, 1);//输出1,3灯亮
            vTaskDelay(50 / portTICK_RATE_MS);//延时50ms
			gpio_set_level(GPIO_OUTPUT_IO_LED2, 1);//输出1,2灯亮
            vTaskDelay(50 / portTICK_RATE_MS);//延时50ms
		}
		vTaskDelay(500 / portTICK_RATE_MS);//延时500ms
	}
}
void TaskReadSW5(void* arg)
{
    uint32_t io_num;

    while(1)
	{
		if(gpio_get_level(GPIO_INPUT_IO_SW5))//按下是0,松开是1
		{
			gpio_set_level(GPIO_OUTPUT_IO_LED4, 0);//输出0,灯灭

		}else
		{
            gpio_set_level(GPIO_OUTPUT_IO_LED4, 0);//输出0,灯灭
             vTaskDelay(200 / portTICK_RATE_MS);//延时200ms
            gpio_set_level(GPIO_OUTPUT_IO_BEEP, 1);//输出1,蜂鸣器响
            vTaskDelay(100 / portTICK_RATE_MS);//延时100ms
            gpio_set_level(GPIO_OUTPUT_IO_BEEP, 0);//输出0,蜂鸣器不响
            vTaskDelay(50 / portTICK_RATE_MS);//延时50ms
			gpio_set_level(GPIO_OUTPUT_IO_LED4, 1);//输出1,4灯亮
            vTaskDelay(50 / portTICK_RATE_MS);//延时50ms
            gpio_set_level(GPIO_OUTPUT_IO_LED2, 1);//输出1,2灯亮
             vTaskDelay(50 / portTICK_RATE_MS);//延时50ms
            gpio_set_level(GPIO_OUTPUT_IO_LED3, 1);//输出1,3灯亮
            vTaskDelay(50 / portTICK_RATE_MS);//延时50ms


		}
		vTaskDelay(500 / portTICK_RATE_MS);//延时500ms
	}
}

void app_main()
{
    gpio_config_t io_conf;
    //disable interrupt
    io_conf.intr_type = GPIO_PIN_INTR_DISABLE;
    //set as output mode
    io_conf.mode = GPIO_MODE_OUTPUT;
    //bit mask of the pins that you want to set,e.g.GPIO18/19
    io_conf.pin_bit_mask = GPIO_OUTPUT_PIN_SEL;
    //disable pull-down mode
    io_conf.pull_down_en = 0;
    //disable pull-up mode
    io_conf.pull_up_en = 0;
    //configure GPIO with the given settings
    gpio_config(&io_conf);

    //disable interrupt
    io_conf.intr_type = GPIO_PIN_INTR_DISABLE;
    //bit mask of the pins, use GPIO4/5 here
    io_conf.pin_bit_mask = GPIO_INPUT_PIN_SEL;
    //set as input mode    
    io_conf.mode = GPIO_MODE_INPUT;
    //enable pull-up mode
    io_conf.pull_up_en = 1;
    gpio_config(&io_conf);

    //start gpio task
    xTaskCreate(TaskReadSW3, "TaskReadSW3", 2048, NULL, 10, NULL);
    xTaskCreate(TaskReadSW4, "TaskReadSW4", 2048, NULL, 10, NULL);
    xTaskCreate(TaskReadSW5, "TaskReadSW5", 2048, NULL, 10, NULL);
    int cnt = 0;
    while(1) {
        printf("cnt: %d\n", cnt++);
        printf("cnt111: %d\n", cnt++);
        vTaskDelay(1500 / portTICK_RATE_MS);//延时1500
    }
}

电路板参考如下

不明白的可以参考我之前写的一篇文章,里面有较为详细的解释

重启单片机进入下载模式
在connecting处陆续出现小点点时,需要先按住电路板处 按钮“0开关” 再按按钮0开关旁边的按钮“重启开关”

原理性说明:ESP32单片机在启动时,GPIO0接地,单片机会进入下载模式。且电路板的按钮0连接单片机的GPIO0。所以按住按钮0(让GPIO0接地),再按重启按钮,就能下载程序了。
————————————————
版权声明:本文为CSDN博主「小赖的Today」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_63459816/article/details/123315122

 此时再点击重启按钮sw2将程序存入电路板

存入结果如下图所示

接下来就可以测试电路板的功能啦 对测试结果感兴趣可以看一下这个视频

blink测试-CSDN直播

blink测试

blink2

悄咪咪的偷了个懒

以上为本人学习过程,可能还有些许错误,欢迎大家提出问题!一起学习!

感谢观看!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

久长愿长久

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值