也是通过树莓派IO口的控制来实现继电器组的开发
继电器组有四根信号线,2根电源线。
通过gpio readall 查看树莓派各个端口的信息选择26 27 28 29 作为信号端口
编程可能会遇到的一些问题
1、通过键盘输入指令的时候,如果用scanf 会有bug,导致运行错误。这里用的是gets(cmd).
2、每次输入指令前,应该把上一次指令清除。这里采用的是memset
void *memset(void *s, int c, size_t n);
- s指向要填充的内存块。
- c是要被设置的值。
- n是要被设置该值的字符数。
- 返回类型是一个指向存储区s的指针。
3、对指令的判端运用的是 strcmp
int strcmp(const char* str1, const char *str2);
;strcmp比较两个字符串的大小,一个字符一个字符比较,按ASCLL码比较
标准规定:
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字
#include <wiringPi.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#define SWI1 26
#define SWI2 27
#define SWI3 28
#define SWI4 29
int main()
{//1.初始化硬件部分if(wiringPiSetup () == -1){printf("初始化错误");}char cmd[12] = {'\0'};//2.设置端口pinMode(SWI1,OUTPUT);pinMode(SWI2,OUTPUT);pinMode(SWI3,OUTPUT);pinMode(SWI4,OUTPUT);//3.设置初始状态digitalWrite(SWI1,HIGH);digitalWrite(SWI2,HIGH);digitalWrite(SWI3,HIGH);digitalWrite(SWI4,HIGH);while(1){printf("请输入指令:1/2/3/4 on 1/2/3/4 off\n");memset(cmd,'\0',sizeof(cmd));gets(cmd);//控制SWI 1if( strcmp(cmd,"1 on") == 0){digitalWrite(SWI1,LOW);}if(strcmp(cmd,"1 off") == 0){digitalWrite(SWI1,HIGH);}//控制2if( strcmp(cmd,"2 on") == 0){digitalWrite(SWI2,LOW);}if(strcmp(cmd,"2 off") == 0){digitalWrite(SWI2,HIGH);}//控制3if( strcmp(cmd,"3 on") == 0){digitalWrite(SWI3,LOW);}if(strcmp(cmd,"3 off") == 0){digitalWrite(SWI3,HIGH);}// 控制4if( strcmp(cmd,"4 on") == 0){digitalWrite(SWI4,LOW);}if(strcmp(cmd,"4 off") == 0){digitalWrite(SWI4,HIGH);}if( strcmp(cmd,"all on") == 0){digitalWrite(SWI1,LOW);digitalWrite(SWI2,LOW);digitalWrite(SWI3,LOW);digitalWrite(SWI4,LOW);}if( strcmp(cmd,"all off") == 0){digitalWrite(SWI1,HIGH);digitalWrite(SWI2,HIGH);digitalWrite(SWI3,HIGH);digitalWrite(SWI4,HIGH);}else{printf("输入错误\n");}}}