树莓派-

无封装

#include <stdio.h>    
#include <unistd.h> 
#include <fcntl.h>   
#include <wiringPi.h>
#include <wiringPiI2C.h>

#define DOOR1 "/home/pi/1.txt"
#define DOOR2 "/home/pi/2.txt"
#define DOOR3 "/home/pi/3.txt"
#define DOOR4 "/home/pi/4.txt"

#define DEVICE_ADDR	0X10
#define RELAY1 0x01
#define RELAY2 0x02
#define RELAY3 0x03
#define RELAY4 0x04 
#define ON     0XFF
#define OFF    0X00

int main()  //获取门的名字并删除对应文档
{   
    int door;
    int fd;

    while(1)
    {

        if((access(DOOR1,F_OK))!=-1)   
        {   
         printf("door = 1\n"); 
          remove(DOOR1);

          fd = wiringPiI2CSetup(DEVICE_ADDR);
          wiringPiI2CWriteReg8(fd,1,ON); //
         sleep(1);   //延时1s
         wiringPiI2CWriteReg8(fd,1,OFF);
        }
        if((access(DOOR2,F_OK))!=-1)   
        {   
            printf("door = 2\n"); 
 
            remove(DOOR2);  
            fd = wiringPiI2CSetup(DEVICE_ADDR);
            wiringPiI2CWriteReg8(fd,2,ON); //
            sleep(1);   //延时1s
            wiringPiI2CWriteReg8(fd,2,OFF);     
        }
        if((access(DOOR3,F_OK))!=-1)   
        {   
            printf("door = 3\n"); 

            remove(DOOR3); 
            fd = wiringPiI2CSetup(DEVICE_ADDR);
            wiringPiI2CWriteReg8(fd,3,ON); //
            sleep(1);   //延时1s
            wiringPiI2CWriteReg8(fd,3,OFF);       
        }
        if((access(DOOR4,F_OK))!=-1)   
        {   
            printf("door = 4\n"); 

            remove(DOOR4);  
            fd = wiringPiI2CSetup(DEVICE_ADDR);
            wiringPiI2CWriteReg8(fd,4,ON); //
            sleep(1);   //延时1s
            wiringPiI2CWriteReg8(fd,4,OFF);     
        }

    }
    
    return 0;   
}  


封装

#include <stdio.h>    
#include <unistd.h> 
#include <fcntl.h>   
#include <wiringPi.h>
#include <wiringPiI2C.h>

#define DOOR1 "/home/pi/1.txt"
#define DOOR2 "/home/pi/2.txt"
#define DOOR3 "/home/pi/3.txt"
#define DOOR4 "/home/pi/4.txt"

#define DEVICE_ADDR 0X10
#define RELAY1 0x01
#define RELAY2 0x02
#define RELAY3 0x03
#define RELAY4 0x04 
#define ON     0XFF
#define OFF    0X00

int doorname()  //获取门的名字并删除对应文档
{   
    int door_name;
    
    if((access(DOOR1,F_OK))!=-1)   
    {   
        door_name = 1; 
        printf("door = %d\n",door_name);  
        remove(DOOR1);
    }
    if((access(DOOR2,F_OK))!=-1)   
    {   
        door_name = 2;  
        printf("door = %d\n",door_name);  
        remove(DOOR2);       
    }
    if((access(DOOR3,F_OK))!=-1)   
    {   
        door_name = 3; 
        printf("door = %d\n",door_name);  
        remove(DOOR3);        
    }
    if((access(DOOR4,F_OK))!=-1)   
    {   
        door_name = 4;  
        printf("door = %d\n",door_name);  
        remove(DOOR4);       
    }

    return door_name;   
}  

void opendoor(int name) //打开指定的门
{
    int fd;
    
    if(name == 1||name == 2||name == 3||name == 4)
    {
        fd = wiringPiI2CSetup(DEVICE_ADDR);
        wiringPiI2CWriteReg8(fd,name,ON); //
        sleep(1);   //延时1s
        wiringPiI2CWriteReg8(fd,name,OFF);
    }
    
}



int main()
{
    int i ;
    
    while(1)
    {    
        int door = doorname();  //获取门的名字

        opendoor(door); //打开指定门 
        
    }

    return 0;
}

编译
gcc door.c -lwiringPi -o door
执行
./door

设置开机自启动

执行sudo vim /etc/rc.local 命令编辑rc.local文件,
在exit 0 上面一行添加语句/home/pi/Auto_Start_Demo.py & ,表示运行Auto_Start_Demo.py文件(在文件代码中已经指定了用python运行),而& 符号可以简单理解为让程序运行在后台。

尝试了多次,发现该方法并不能保证成功,用reboot 重启的话成功率还高点,断点重启的话基本都不行。此外,成功的时候如果输入ps -ef | grep Auto_Start 来查看进程情况,发现竟然有两个一样的进程

 sudo cp ./rc.local /etc/init.d
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值