/* * my_code.c * * Created on: Oct 2, 2021 * Author: wuwenfeng */ #include "my_code.h" #include "gpio.h" #include "button.h" #include "ht1621.h" #include "r480r.h" #include "eeprom.h" extern ADC_HandleTypeDef hadc; struct button key1,key2,key3,key4; config_setting config; #define set_filtering_times 50 struct { //ADC_HandleTypeDef *device; int filtering_times; unsigned long adc_filtering[2]; int adc_value[2]; }ADCC; struct { uint32_t moto_run; int pwm_run; char moto1a; char moto1b; char moto2a; char moto2b; char moto1a_; char moto1b_; char moto2a_; char moto2b_; }moto; //uint8_t Read_Ds() //{ // change_io_function(HC595_DLK_GPIO_Port,HC595_DLK_Pin,1); // if(READ_HC595_DCK){return 0;}else{return 1;} // //return READ_HC595_DCK; //} //send data to 959 void Sand_Byte_to_595_2(uint8_t h) { change_io_function(HC595_DLK_GPIO_Port,HC595_DLK_Pin,0); HC595_DCK(0); HC595_SCK2(0); HC595_RCK(0); for(char a=0;a<8;a++) { if((h<moto.moto_run) { moto.moto_run=HAL_GetTick()+10; if(moto.moto1a!=moto.moto1a_) { if(moto.moto1a>moto.moto1a_) { moto.moto1a_++; } if(moto.moto1amoto.moto1b_) { moto.moto1b_++; } if(moto.moto1bmoto.moto2a_) { moto.moto2a_++; } if(moto.moto2amoto.moto2b_) { moto.moto2b_++; } if(moto.moto2b>4; send_buff[1]=lcd_buff[0]&0x0f; send_buff[2]=lcd_buff[1]>>4; send_buff[3]=lcd_buff[1]&0x0f; send_buff[4]=lcd_buff[2]>>4; send_buff[5]=lcd_buff[2]&0x0f; send_buff[6]=lcd_buff[3]>>4; send_buff[7]=lcd_buff[3]&0x0f; WritenDataHT1621(0,send_buff,8); } char check_need_reset() { char a=0; change_io_function(MOT_IN1_GPIO_Port, MOT_IN1_Pin,1); change_io_function(MOT_IN2_GPIO_Port, MOT_IN2_Pin,0); MOT_IN2(0); if(READ_MOT_IN1==0) { MOT_IN2(1); if(READ_MOT_IN1==1) { change_io_function(MOT_IN1_GPIO_Port, MOT_IN1_Pin,0); change_io_function(MOT_IN2_GPIO_Port, MOT_IN2_Pin,1); MOT_IN1(0); if(READ_MOT_IN2==0) { MOT_IN1(1); if(READ_MOT_IN2==1) { a=1; } } } } change_io_function(MOT_IN1_GPIO_Port, MOT_IN1_Pin,1); change_io_function(MOT_IN2_GPIO_Port, MOT_IN2_Pin,1); return a; } void my_code() { uint32_t runtime=0,move=0; uint8_t mode=1; long countdown=1000; long countdown_set=15000; char moto_in1,moto_in2; uint16_t moto_in1_pp=0,moto_in2_pp=0; HT1621_Init(); r480_init(); config.begin=0; AT24CXX_Read(32,(char *)&config,sizeof(config_setting)); if(config.begin!=0xab||check_need_reset()) { mode=0; r480.key=0; } while(1) { //get ADC for(char a=0;a<2;a++) { HAL_ADC_Start(&hadc); while(HAL_ADC_PollForConversion(&hadc,0xffff)!=HAL_OK); ADCC.adc_filtering[a]+=HAL_ADC_GetValue(&hadc); } HAL_ADC_Stop(&hadc); ADCC.filtering_times+=1; if(ADCC.filtering_times==set_filtering_times) { ADCC.filtering_times=0; ADCC.adc_value[0]=ADCC.adc_filtering[0]/set_filtering_times; ADCC.adc_filtering[0]=0; ADCC.adc_value[1]=ADCC.adc_filtering[1]/set_filtering_times; ADCC.adc_filtering[1]=0; } switch(mode) { case 0: //Startup if(HAL_GetTick()>runtime) { runtime+=1000; if(dis_buff.led_run==1) { dis_buff.led_run=0; dis_buff.dot4=1; dis_buff.d_num[0]=16; }else { dis_buff.led_run=1; dis_buff.dot4=0; dis_buff.d_num[0]=10; } } if(r480.key==0xd7) { config.begin=0xab; config.key_code[0]=r480.add[0]; config.key_code[1]=r480.add[1]; r480.key=0; r480.add[0]=0; r480.add[1]=0; mode=1; AT24CXX_Write(32,(char *)&config,sizeof(config_setting)); } break; case 1: //standby moto.moto1a=0; moto.moto1b=0; moto.moto2a=0; moto.moto2b=0; dis_buff.d_num[0]=16; dis_buff.d_num[1]=16; dis_buff.d_num[2]=16; dis_buff.d_num[3]=16; dis_buff.dot1=0; dis_buff.dot2=0; dis_buff.dot3=0; if(HAL_GetTick()>runtime) { runtime+=1000; if(dis_buff.led_run==1) { dis_buff.led_run=0; dis_buff.dot4=1; }else { dis_buff.led_run=1; dis_buff.dot4=0; } } if(key2.code!=0) { mode=2; countdown=countdown_set; moto.moto1a=10; moto.moto1b=0; moto.moto2a=10; moto.moto2b=0; } if(key3.code!=0) { moto.moto1a=0; moto.moto1b=10; moto.moto2a=0; moto.moto2b=10; mode=3; countdown=countdown_set; } if(key1.code!=0) { mode=4; countdown=10000; } break; case 2: if(HAL_GetTick()>move) { move=HAL_GetTick()+100; if(dis_buff.led_run==1) { dis_buff.led_run=0; }else { dis_buff.led_run=1; } countdown-=100; if(countdown<0) { mode=1; } } dis_buff.d_num[3]=(countdown/100)%10; dis_buff.d_num[2]=(countdown/1000)%10; dis_buff.d_num[1]=((countdown/10000)%10); dis_buff.d_num[1]=dis_buff.d_num[1]==0?16:dis_buff.d_num[1]; dis_buff.dot4=1; if(key3.code!=0) { mode=3; countdown=countdown_set-countdown; moto.moto1a=0; moto.moto1b=10; moto.moto2a=0; moto.moto2b=10; } if(key4.code!=0||(moto.moto1a==0&&moto.moto1b==0&&moto.moto2a==0&&moto.moto2b==0)) { mode=1; } if(ADCC.adc_value[1]>400||(moto_in1==1&&READ_MOT_IN1==0)) { //overload_times=0; moto.moto1a=0; moto.moto1b=0; } if(ADCC.adc_value[0]>400||(moto_in2==1&&READ_MOT_IN2==0)) { moto.moto2a=0; moto.moto2b=0; } break; case 3: if(HAL_GetTick()>move) { move=HAL_GetTick()+100; if(dis_buff.led_run==1) { dis_buff.led_run=0; }else { dis_buff.led_run=1; } countdown-=100; if(countdown<0) { mode=1; } } dis_buff.d_num[3]=(countdown/100)%10; dis_buff.d_num[2]=(countdown/1000)%10; dis_buff.d_num[1]=((countdown/10000)%10); dis_buff.d_num[1]=dis_buff.d_num[1]==0?16:dis_buff.d_num[1]; dis_buff.dot4=1; if(key2.code!=0) { mode=2; countdown=countdown_set-countdown; moto.moto1a=10; moto.moto1b=0; moto.moto2a=10; moto.moto2b=0; } if(key4.code!=0||(moto.moto1a==0&&moto.moto1b==0&&moto.moto2a==0&&moto.moto2b==0)) { mode=1; } if(ADCC.adc_value[1]>400||(moto_in1==1&&READ_MOT_IN1==0)) { //overload_times=0; moto.moto1a=0; moto.moto1b=0; } if(ADCC.adc_value[0]>400||(moto_in2==1&&READ_MOT_IN2==0)) { //overload_times2=0; moto.moto2a=0; moto.moto2b=0; } break; case 4: //setting mode dis_buff.led_run=0; if(HAL_GetTick()>move) { move=HAL_GetTick()+100; if(dis_buff.dot4==1) { dis_buff.dot4=0; }else { dis_buff.dot4=1; } countdown-=100; if(countdown<0) { mode=1; } if(key2.code<0){countdown_set+=1000;countdown=10000;} if(key3.code<0){countdown_set-=1000;countdown=10000;} } if(key2.code>0){countdown_set+=100;countdown=10000;} if(key3.code>0){countdown_set-=100;countdown=10000;} if(countdown_set<100){countdown_set=100;} if(countdown_set>60000){countdown_set=60000;} if(key4.code!=0){mode=1;} dis_buff.d_num[3]=(countdown_set/100)%10; dis_buff.d_num[2]=(countdown_set/1000)%10; dis_buff.d_num[1]=((countdown_set/10000)%10); dis_buff.d_num[1]=dis_buff.d_num[1]==0?16:dis_buff.d_num[1]; break; } if(r480.add[0]==config.key_code[0]&&r480.add[1]==config.key_code[1]) { switch(r480.key) { case 0xd7: dis_buff.button_flag[0]=1; break; case 0xdb: dis_buff.button_flag[1]=1; break; case 0xdd: dis_buff.button_flag[2]=1; break; case 0xde: dis_buff.button_flag[3]=1; break; } } r480.key=0; r480.add[0]=0; r480.add[1]=0; GEI_BUTTON_CODE(&key1,dis_buff.button_flag[0]); GEI_BUTTON_CODE(&key2,dis_buff.button_flag[1]); GEI_BUTTON_CODE(&key3,dis_buff.button_flag[2]); GEI_BUTTON_CODE(&key4,dis_buff.button_flag[3]); dis_buff.button_flag[0]=0; dis_buff.button_flag[1]=0; dis_buff.button_flag[2]=0; dis_buff.button_flag[3]=0; if(moto_in1!=READ_MOT_IN1) { moto_in1_pp++; if(moto_in1_pp==100) { moto_in1_pp=0; moto_in1=READ_MOT_IN1; } } if(moto_in2!=READ_MOT_IN2) { moto_in2_pp++; if(moto_in2_pp==100) { moto_in2_pp=0; moto_in2=READ_MOT_IN2; } } HT1621_Display_GetButton(); hc2_sever(); moto_server(); } }