基于树莓派上实现的智能垃圾桶

基于树莓派上实现的智能垃圾桶

整体功能

垃圾桶分为移动模式和清洁桶模式,移动模式垃圾桶通过电机操作马达轮子进行移动,清洁桶模式则LED屏幕亮起,检测温度,自动拉起桶盖,整体通过远程利用客户端进行控制。

LED屏的实现

oled.c

#include <wiringPi.h>
#include <wiringPiI2C.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <dirent.h>
#include <stdlib.h>
#include "wd.h"
int fd;
unsigned char  yi[4][16]={
"                ",//第一行
"                ",//第二行
"                ",//第三行
"                " //第四行
};               //显示内容
const unsigned char zi[];
void initoled(void)//初始化
{
	wiringPiSetup();
        fd=wiringPiI2CSetup(0x3c);//i2c初始化 0x3c是oled的从机地址
        wiringPiI2CWriteReg8(fd,0x00,0xa1);//图像反了修改成0xa0
        wiringPiI2CWriteReg8(fd,0x00,0xc8);//行输出反了修改成0xc0
        wiringPiI2CWriteReg8(fd,0x00,0x8d);//允许电荷泵
        wiringPiI2CWriteReg8(fd,0x00,0x14);
        wiringPiI2CWriteReg8(fd,0x00,0xa6);//想反相显示改成0xa7
	wiringPiI2CWriteReg8(fd,0x00,0x21);//重置列地址
	wiringPiI2CWriteReg8(fd,0x00,0x00);
	wiringPiI2CWriteReg8(fd,0x00,0x7f);
    wiringPiI2CWriteReg8(fd,0x00,0xaf);//开显示
	
	 system("sudo modprobe w1-gpio");
	 system("sudo modprobe w1-therm");
}
void qingping(void)//清屏
{
	char zt1,zt2;
	for(zt1=0;zt1<8;zt1++)
	{
		wiringPiI2CWriteReg8(fd,0x00,0xb0+zt1);
	        for(zt2=0;zt2<128;zt2++) wiringPiI2CWriteReg8(fd,0x40,0x00);
	}
}
void ascii(void)//显示ASCII码8*16
{
	int zt;
        char zt3,zt4;
	for(zt3=0;zt3<4;zt3++)
        {
		wiringPiI2CWriteReg8(fd,0x00,0xb0+(zt3*2));
                for(zt4=0;zt4<16;zt4++)
			for(zt=0;zt<8;zt++)
                wiringPiI2CWriteReg8(fd,0x40,zi[yi[zt3][zt4]*16+zt]);
                wiringPiI2CWriteReg8(fd,0x00,0xb0+(zt3*2)+1);
                for(zt4=0;zt4<16;zt4++)
                	for(zt=0;zt<8;zt++)
                        	wiringPiI2CWriteReg8(fd,0x40,zi[yi[zt3][zt4]*16+zt+8]);
	}
}
void wendu(void)//调用温度函数
{
	float value;
	char buf[100];
	value=wd();
	gcvt(value, 5, buf);
	
    strcpy(yi[0],buf);
}

void shijian(void)//当前时间
{
    struct tm *ptr;
    time_t lt;
	FILE *f;
	char data[255];
    lt=time(&lt);
    ptr=localtime(&lt);
    strftime(yi[1],16,"%m/%d %a",ptr); //月/日 周几
	strftime(yi[2],16,"%R %p",ptr);//时:分 am或pm
	
	
}
void oled(void)
{
	while(1)
	{
		
		
		shijian();
		wendu();
		ascii();
		delay(100);
	}
	
}

这是利用SSD1306的0.91OLED模块通过以上代码实现显示在LED屏幕,温度函数这是利用DS18B20通过以下代码显示在LED屏
wd.c

#include <wiringPi.h>
#include <wiringPiI2C.h>
#include <time.h>
#include <stdio.h>
#include &l
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值