本期為大家推送迪文開發(fā)者論壇獲獎開源案例——基于T5L智能屏的零食機。該方案基于T5L芯片,通過PWM接口實現(xiàn)實時調(diào)控爪子抓取力度、速度,并支持后臺按鍵長按時間讀取,各模塊自檢,報錯提醒,同步顯示用戶投幣次數(shù)、游戲倒計時等功能,支持投幣比例、游戲模式、多語言界面、抓力閾值等參數(shù)設(shè)置。
GUI工程設(shè)計
C51工程設(shè)計
(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)電機的驅(qū)動代碼:
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調(diào)節(jié)爪子力度,速度的代碼:
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;//成功 } }}
-
開源
+關(guān)注
關(guān)注
3文章
3543瀏覽量
43343 -
迪文屏
+關(guān)注
關(guān)注
3文章
82瀏覽量
5701 -
智能屏幕
+關(guān)注
關(guān)注
0文章
70瀏覽量
3575
發(fā)布評論請先 登錄
什么是T5L?
基于迪文T5L屏的智能柜管理系統(tǒng)

分享|基于迪文T5L智能屏的凈水機智能控制系統(tǒng)方案

基于STM32單片機的零食箱控制系統(tǒng)設(shè)計

【開源獲獎案例】基于T5L的smtp郵件發(fā)送器

瀏覽器網(wǎng)頁與T5L迪文屏串口深度擴展(Node-RED技術(shù))

【開源獲獎案例】基于T5L芯片的調(diào)音臺麥克風混響回聲控制

【開源獲獎案例】基于T5L智能屏的EQ均衡效果器

評論