继电器组开发控制

本文介绍了如何通过树莓派的GPIO接口控制继电器组,包括编程中的问题解决,如使用`gets`代替`scanf`避免bug,以及清空上一条指令的`memset`和比较指令的`strcmp`函数的应用。
摘要由CSDN通过智能技术生成

 也是通过树莓派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");
		}

	}

}

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值