运用你的树莓派作为文件 USB 存储设备中转站,可实现 USB A => USB B 的自动文件传输和同步,亦可通过 Web 服务对磁盘文件进行管理。
灯1:pwm灯,设备状态灯
灯2:pwm灯,运行灯,七彩同步,红灯闪烁重置,默认灭
按键1:关机按键
按键2:清空SD卡按键
树莓派和一块硬盘
灯1:
-
红灯闪烁:同步前硬盘容量不足
-
蓝灯闪烁:CARD==0 硬盘接入,SD卡未接入
-
紫灯闪烁:STORAGE==0 硬盘未接入,SD卡接入
-
黄灯闪烁:正在同步或者清空SD卡,
-
红灯常亮:同步后硬盘容量不足
-
白灯常亮:清空SD卡完成
灯2:
- pwm灯:正在备份
- 红灯闪烁:正在清空SD卡
所有灯在不闪烁的情况下可清空SD卡,灯2不灭时可关机
定义全局变量 STORAGE=0 CARD=0
检测获取所有的sd*,遍历是否只有一个分区
只有一个分区:
是否在指定的usb口,是则设置对应变量为(STORAGE的剩余或者CARD的使用)容量,挂载设备 检测全局变量,如果都为非0,则执行同步任务,否则执行待命任务
开机任务(){
设置全局变量 STORAGE=0 CARD=0
获取当前USB插入的设备
初始化灯1 灯2灭
初始化按键1 按键2
启动USB监听
if(两个设备,并且都为只要一个分区的存储设备){
STORAGE=磁盘剩余容量 CARD=SD卡使用容量
挂载两个设备
sync任务()
}else if(只要一个设备&&只要一个分区的存储设备){
赋值给对应的的变量
设置对应的灯亮
挂载设备
}
待命任务()
}
检测STORAGE和CARD值是否非0,STORAGE不为0CARD为0,蓝灯1闪烁,STORAGE为0CARD不为0,蓝灯1闪,都为0,灭灯
监听usb插入拔出信息,如果拔出的是对应USB端口的设备,将对应变量设置为0
如果是插入对应USB端口的设备,讲对应端口的变量设置为对应值
如果两个值都为!0,STORAGE的剩余容量是否大于CARD的使用容量
是则执行同步任务,否则红灯1常亮,等待退出SD卡,长按三秒关机按键执行换磁盘
监听USB插口:
获取当前USB口情况
if(USB的磁盘端口插入设备&&只要一个分区的存储设备){
挂载磁盘,STORAGE=磁盘剩余值
if(STORAGE<50MB){
__灯1__ 闪烁红灯
}else if(CARD==0){
__灯1__ 闪烁蓝灯
}
}else if(USB的SD卡端口插入设备&&只要一个分区的存储设备){
挂载SD卡,CARD=已使用容量
__灯1__ 闪烁紫灯
if(STORAGE==0){
__灯1__ 闪烁紫灯
}
}else if(USB的端口拔出设备){
将对应的STORAGE或者CARD置零
if(STORAGE==0&&CARD==0){
__灯1__灭
}else if(STORAGE==0){
__灯1__ 紫灯闪烁
}else if(CARD==0){
__灯1__ 蓝灯闪烁
}
}
if(STORAGE>0&&CARD>0&&STORGE>CARD){
sync任务()
}
把SD卡的内容同步到移动盘上,灯1黄灯闪烁,灯2根据复制的进度pwm变化颜色
完成,灯1 绿灯常亮,灯2 灭,更新STORAGE的值,把CARD设置为0,如果STORAGE的值过小50M,灯1 红灯常亮,长按5秒清空SD卡按键,或者长5秒关机按键。
sync任务(){
灯1黄灯闪烁
灯2从红到绿监听同步进度变化
同步命令
CARD=0
重新获取STORAGE的数值
灯2灭
if(STRONE<50MB){
__灯1__红灯常亮
}else{
__灯1__绿灯常亮
}
}
gpio灯1 绿灯常亮,红灯常亮 超过5秒,可执行
清空sd卡,灯2红灯闪烁,灯1 黄灯闪烁 结束,灯2灭,灯1白常亮
监听按键2:
清空SD卡(){
按键时间=0s
周期=0.01s
while 按键1按下{
if(__灯1__ 绿灯常亮||__灯1__红灯常亮&&__灯2__ 灭 && 按键时间 > 5s){
__灯1__ 黄灯闪烁
__灯2__ 红灯闪烁
清空指令
CARD=0
__灯1__白常亮
__灯2__灭
}else{
按键时间+=周期
}
}
}
如果 灯2 灭超过5秒,执行关机,只要 灯2 还在工作,忽视按键
监听按键1:
关机(){
按键时间=0s
周期=0.01s
while 按键1按下{
if(&&__灯2__ 灭 && 按键时间 > 5s){
初始化所以gpio
关机指令
}else{
按键时间+=周期
}
}
}