本期为大家推送迪文开发者论坛获奖开源案例——基于T5L智能屏的零食机。该方案基于T5L芯片,通过PWM接口实现实时调控爪子抓取力度、速度,并支持后台按键长按时间读取,各模块自检,报错提醒,同步显示用户投币次数、游戏倒计时等功能,支持投币比例、游戏模式、多语言界面、抓力阈值等参数设置。
GUI工程设计
C51工程设计
(1)T5L智能屏和主控的通信代码:
voiduart2_master_isr() interrupt 4{ u8 res; if(RI0) { RI0 =0; res = SBUF0; uart2_rx_timeout = UART2_RX_TIMEOUT; if((uart2_rx_sta&UART2_PACKET_OK)==0) { if(step==0) { recv_len =0; if(res==0x15) step =1; } elseif(step==1) { date_len = res; step =2; if(date_len>UART2_PACKET_MAX_LEN) step =0; } elseif(step==2) { if(recv_len==date_len) { step =0; if(res==0x16) { uart2_rx_sta = date_len; uart2_rx_sta |= UART2_PACKET_OK; } } else uart2_buf[recv_len++] = res; } } }}
(2)电机的驱动代码:
voidmotor_move(MOTOR motor,MOTOR_DIR dir){ if(motor==MOTOR_Z)//Z轴上的爪子电机 { if(dir==MOTOR_DIR_NONE)//停止 { MOTOR_Z_DISABLE(); } else { if((IS_MOTOR_Z_BACKWARD_POS()&&(dir==MOTOR_DIR_BACKWARD))|| (IS_MOTOR_Z_FORWARD_POS()&&(dir==MOTOR_DIR_FORWARD))) { MOTOR_Z_DISABLE(); dir =MOTOR_DIR_NONE; } else { MOTOR_Z_ENABLE(); MOTOR_Z_DIR_PIN= (dir==MOTOR_DIR_BACKWARD); } } } elseif(motor==MOTOR_X)//X轴移动电机 { if(dir==MOTOR_DIR_NONE)//停止 { MOTOR_X_DISABLE(); } else { if(IS_MOTOR_X_BACKWARD_POS()&&(dir==MOTOR_DIR_BACKWARD)) { MOTOR_X_DISABLE(); dir =MOTOR_DIR_NONE; } else { MOTOR_X_ENABLE(); MOTOR_X_DIR_PIN= (dir==MOTOR_DIR_BACKWARD); } } x_last_dir = dir; } elseif(motor==MOTOR_Y)//Y轴移动电机 { if(dir==MOTOR_DIR_NONE)//停止 { MOTOR_Y_DISABLE(); } else { if((IS_MOTOR_Y_BACKWARD_POS()&&(dir==MOTOR_DIR_BACKWARD))|| (IS_MOTOR_Y_FORWARD_POS()&&(dir==MOTOR_DIR_FORWARD))) { MOTOR_Y_DISABLE(); dir =MOTOR_DIR_NONE; } else { MOTOR_Y_ENABLE(); MOTOR_Y_DIR_PIN= (dir==MOTOR_DIR_BACKWARD); } } y_last_dir = dir; } elseif(motor==MOTOR_CLAW) { if(dir==MOTOR_DIR_NONE) { MOTOR_CLAW_RELEASE(); } else { MOTOR_CLAW_HOLD(); } }}
(3)通过PWM调节爪子力度,速度的代码:
constu16 MOTOR_DUTY[MOTOR_TOTAL][MOTOR_SPEED_MAX+1] = { {45+DUTY_OFFSET,60+DUTY_OFFSET,80+DUTY_OFFSET,110+DUTY_OFFSET,130+DUTY_OFFSET,160+DUTY_OFFSET,200+DUTY_OFFSET,250+DUTY_OFFSET,550+DUTY_OFFSET,TIM_ARR},//X {45+DUTY_OFFSET,60+DUTY_OFFSET,80+DUTY_OFFSET,110+DUTY_OFFSET,130+DUTY_OFFSET,160+DUTY_OFFSET,200+DUTY_OFFSET,250+DUTY_OFFSET,550+DUTY_OFFSET,TIM_ARR},//Y {45,60,80,110,130,160,200,250,550,TIM_ARR},//Z {200,220,240,270,290,320,360,410,550,TIM_ARR}//爪子 };voidmotor_set_speed(MOTOR motor,u8 speed){ if(speed>MOTOR_SPEED_MAX) return; pwm_set_duty((PWM_CH)motor,MOTOR_DUTY[motor][speed]);}voidmotor_set_claw_strength_by_vol(floatvol){ #defineCLAW_DUTY_MIN 200 #defineCLAW_DUTY_MAX TIM_ARR u16 duty; vol = (float)(vol-QZLDY_MIN)/(QZLDY_MAX-QZLDY_MIN); if(vol<0)? ? vol =?0;? ? else?if(vol>1) vol =1; duty = (u16)(vol*(CLAW_DUTY_MAX-CLAW_DUTY_MIN)+0.5f)+CLAW_DUTY_MIN; pwm_set_duty(PWM_CH_MOTOR_CLAW, duty);}
(4)厂家后台按键长按检测:
u8 key_check_long_press(KEY key,u32time){ while(1) { if(!(KEY_Scan(1)&key)) return1;//失败 if(time) { sys_delay_ms(1); time--; if(time==0) return0;//成功 } }}
-
开源
+关注
关注
3文章
3755浏览量
43992 -
迪文屏
+关注
关注
3文章
83浏览量
5821 -
智能屏幕
+关注
关注
0文章
72浏览量
3676
发布评论请先 登录
什么是T5L?
分享|基于迪文T5L智能屏的净水机智能控制系统方案

基于STM32单片机的零食箱控制系统设计

浏览器网页与T5L迪文屏串口深度扩展(Node-RED技术)

【开源获奖案例】基于T5L芯片的调音台麦克风混响回声控制

评论