明远智睿技术论坛

 找回密码
 立即注册
搜索
查看: 4621|回复: 1
打印 上一主题 下一主题

写QT程序控制LED灯的亮灭

[复制链接]

4

主题

10

帖子

54

积分

注册会员

Rank: 2

积分
54
跳转到指定楼层
楼主
发表于 2019-10-18 14:10:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
核心板:My-IMX6-CB200-6q-2g
评估板:MY-IMX6-EK200
系统内核:Linux-3.14.52
u-boot版本:u-boot-2015.04-svn54

请问如何通过写C语言或者Qt程序控制LED的亮灭,有没有类似的教程?不是通过测试手册上面的指令控制LED的亮灭。
回复

使用道具 举报

36

主题

745

帖子

2872

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2872
沙发
发表于 2019-10-19 16:24:11 | 只看该作者
可以参考一下下面的gpio输出和输入下降沿中断
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <poll.h>


  int gpio_open(int gpio)
  {
    FILE *fp;  

    if ((fp = fopen("/sys/class/gpio/export", "w")) == NULL)   
    {  
        printf("Cannot open export file.\n");  
        return -1;  
    }  
    fprintf(fp, "%d", gpio);  
    fclose(fp);
    return 0;       
  }          
  int gpio_direction(int gpio)
  {
         FILE *fp;  
    char s[50]="";     
sprintf(s,"/sys/class/gpio/gpio%d/direction",gpio);  
    if ((fp = fopen(s, "rb+")) == NULL)   
    {  
        printf("Cannot open %s.\n",s);  
        return -1;  
    }  
    fprintf(fp, "out");  
    fclose(fp);
    return 0;       
  }   
  
   int gpio_high(int gpio)
   {
         FILE *fp;  
    char buffer[10];   
    char s1[50]="";   
    sprintf(s1,"/sys/class/gpio/gpio%d/value",gpio);  
  
    if ((fp = fopen(s1, "rb+")) == NULL)   
    {  
        printf("Cannot open %s.\n",s1);  
        return -1;  
    }  
    strcpy(buffer,"1");  
    fwrite(buffer, sizeof(char), sizeof(buffer) - 1, fp);         
    fclose(fp);
        return 0;
   }   
   
     int gpio_low(int gpio)
   {
         FILE *fp;  
    char buffer[10];   
    char s1[50]="";   
    sprintf(s1,"/sys/class/gpio/gpio%d/value",gpio);  
  
    if ((fp = fopen(s1, "rb+")) == NULL)   
    {  
        printf("Cannot open %s.\n",s1);  
        return -1;  
    }  
    strcpy(buffer,"0");  
    fwrite(buffer, sizeof(char), sizeof(buffer) - 1, fp);         
    fclose(fp);
        return 0;
   }   

int main(int argc, char *argv[])
{
     int fd, ret;
     char value;
     struct pollfd pfd;
   
        gpio_open(435);
        gpio_direction(435);
        gpio_low(435);
    system("echo \"444\" > /sys/class/gpio/export");
    system("echo \"in\" > /sys/class/gpio/gpio444/direction");
    system("echo \"falling\" > /sys/class/gpio/gpio444/edge");
//    system("echo \"both\" > /sys/class/gpio/gpio443/edge");

        fd = open("/sys/class/gpio/gpio444/value", O_RDWR);
     if (fd < 0) {
         printf("open file fail\n");
         return -1;
     }
   
     pfd.fd = fd;
     pfd.events = POLLPRI | POLLERR;

    ret = lseek(fd, 0, SEEK_SET);
     if (ret == -1) {
         printf("lseek error\n");
         return -1;
     }   
     //读取1字节
    ret = read(fd, &value, 1);


     while (1) {
         /* 监听个数1, 等待时间无限 */
         ret = poll(&pfd, 1, -1);
         if (ret == -1) {
             printf("poll error\n");
             return -1;
         }
         /* 监听的时间会保存在revents成员中 */
         if (pfd.revents & POLLPRI) {
             //文件指针只想文件的开头
            ret = lseek(fd, 0, SEEK_SET);
             if (ret == -1) {
                 printf("lseek error\n");
                 return -1;
             }
             //读取,结果为字符'0'或者‘1’
            read(fd, &value, 1);
             printf("value:%c\n", value);
/*            if (value == '0')
                gpio_high(434);
            if (value == '1')
                gpio_low(434);        */
         }
     }
     
     close(fd);


     return 0;
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|明远智睿  

GMT+8, 2024-12-27 00:25 , Processed in 0.064488 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表