Cypress触摸芯片自己做的demo 代码

本文介绍了如何使用Cypress芯片配合PSOCCreator软件进行触摸检测配置,通过GUI配置GPIO和CapSense模块,实现对LED灯的控制。在主函数中,利用CapSense库处理传感器数据,根据触摸状态切换LED的亮灭。工程流程包括配置、主函数逻辑和程序下载,最终达到触摸按钮控制LED灯的效果。
摘要由CSDN通过智能技术生成

1.前言

(1)cyprees芯片主要是可以做一些触摸的检测并实现一些IO输出,使用的工具psoc creater
(2)psoc creater 可以i直接通过GUI的方式配置一些GPIO的状态以及集成的功能模块,编译后,我们可直接通过include 对应的头文件后,可在主函数中直接调用相关的接口,基本不怎么编写代码了

2.工程使用逻辑

  • 如下图为工程主界面:

    • topDesign:可以从右边拖一些关键的功能过来,并配置一些基础参数
    • PIN: 对一些功能进行功能进行对应的管脚进行对应
      在这里插入图片描述
  • 对上图进行详细介绍说明的
    – 一个capsense 进行触摸检测
    – 6个led灯

  • capsense的配置截图如下:

  • 在这里插入图片描述

  • led的配置如下: 注意不要勾选HW connection

  • 在这里插入图片描述
    点击生成:
    在这里插入图片描述

3.主函数逻辑

完成如上配置后,点击编译后会出现自动声场相关功能模块,我们需主要在main函数中进行编辑即可:

#include "CapSense.h"
#include "project.h"

#define LED_ON						(0u)
#define LED_OFF						(1u)
void LED_Write(uint8 value);
uint8 LED_Read(void);

uint8   LED1_Read(void);
void    LED1_Write(uint8 value);

uint8   LED2_Read(void);
void    LED2_Write(uint8 value);
uint8   LED3_Read(void);
void    LED3_Write(uint8 value);
typedef enum
{
    SENSOR_SCAN = 0x01u,                
    WAIT_FOR_SCAN_COMPLETE = 0x02u,     
    PROCESS_DATA = 0x03u,               
} DEVICE_STATE;

int main(void)
{
    CyGlobalIntEnable; /* Enable global interrupts. */

    /* Place your initialization/startup code here (e.g. MyInst_Start()) */
 /* Start CapSense block - Initializes CapSense Data structure and 
    performs first scan to set up sensor baselines */
    
    DEVICE_STATE currentState = SENSOR_SCAN;  
    CapSense_Start();
    /* Scan all widgets */
    //CapSense_ScanAllWidgets();
    
    
    
    for(;;)
    {
        /* Place your application code here. */
                /* Place your application code here. */
         /* Do this only when a scan is done */
   
     
              /* Process all widgets */
              CapSense_ProcessAllWidgets();
              /* Include Tuner */ 
             // CapSense_RunTuner(); 
              /* Scan result verification */
              if (CapSense_IsAnyWidgetActive())
              {
                   /* Add any required functionality
                      based on scanning result*/
               
              }
              /* Start next scan */

        
         switch(currentState)
        {
            case SENSOR_SCAN:
	            /* Initiate new scan only if the CapSense block is idle */
                if(CapSense_NOT_BUSY == CapSense_IsBusy())
                {
                    #if ENABLE_TUNER
                        /* Update CapSense parameters set via CapSense tuner before the 
                           beginning of CapSense scan 
                        */
                        CapSense_RunTuner();
                    #endif
                    
                    /* Scan widget configured by CSDSetupWidget API */
                    CapSense_ScanAllWidgets();
                                        
                    /* Set next state to WAIT_FOR_SCAN_COMPLETE  */
                    currentState = WAIT_FOR_SCAN_COMPLETE;
                }
                break;

            case WAIT_FOR_SCAN_COMPLETE:

                /* Put the device to CPU Sleep until CapSense scanning is complete*/
                if(CapSense_NOT_BUSY != CapSense_IsBusy())
                {
                    CySysPmSleep();
                }
                /* If CapSense scanning is complete, process the CapSense data */
                else
                {
                    currentState = PROCESS_DATA;
                }
                break;
        
            case PROCESS_DATA:
                
                /* Process data on all the enabled widgets */
                CapSense_ProcessAllWidgets();
                
                /* Controls LEDs Status based on the result of Widget processing. */
                //LED_Control();
                 LED_Write(CapSense_IsWidgetActive(CapSense_BUTTON0_WDGT_ID ) ? LED_OFF : LED_ON );
                LED1_Write(CapSense_IsWidgetActive(CapSense_BUTTON1_WDGT_ID ) ? LED_OFF : LED_ON );
                LED2_Write(CapSense_IsWidgetActive(CapSense_BUTTON2_WDGT_ID ) ? LED_OFF : LED_ON );
                LED3_Write(CapSense_IsWidgetActive(CapSense_BUTTON3_WDGT_ID ) ? LED_OFF : LED_ON );
                LED4_Write(CapSense_IsWidgetActive(CapSense_BUTTON4_WDGT_ID ) ? LED_ON : LED_OFF );
                LED5_Write(CapSense_IsWidgetActive(CapSense_BUTTON5_WDGT_ID ) ? LED_ON : LED_OFF );
                /* Set the device state to SENSOR_SCAN */
                currentState = SENSOR_SCAN;  
                break;  
             
            /*******************************************************************
             * Unknown power mode state. Unexpected situation.
             ******************************************************************/    
            default:
                break;
        } 
        //CyDelay(10);
    }
}

4.程序下载

  1. 编译工程完成HEX文件
  2. 打开psoc programmer 软件,选择对应的芯片iC,选中hex文件,点击下载:
  3. 在这里插入图片描述
  4. 使用效果如下
  5. 按下去的时候灯光灭掉,松手灯光亮起来
  6. 在这里插入图片描述

在这里插入图片描述

结论

本文通过查找简单的工程代码实现了一个触摸控制灯光亮灭场景。如有任何问题评论区交流。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

没有水杯和雨伞的工科男

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

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

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

打赏作者

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

抵扣说明:

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

余额充值