也是通过树莓派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 1
if( strcmp(cmd,"1 on") == 0){
digitalWrite(SWI1,LOW);
}if(strcmp(cmd,"1 off") == 0){
digitalWrite(SWI1,HIGH);
}
//控制2
if( strcmp(cmd,"2 on") == 0){
digitalWrite(SWI2,LOW);
}if(strcmp(cmd,"2 off") == 0){
digitalWrite(SWI2,HIGH);
}
//控制3
if( strcmp(cmd,"3 on") == 0){
digitalWrite(SWI3,LOW);
}if(strcmp(cmd,"3 off") == 0){
digitalWrite(SWI3,HIGH);
}
// 控制4
if( 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");
}
}
}