好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

智能雨刮器同步控制程序代码.docx

12页
  • 卖家[上传人]:公****
  • 文档编号:508229878
  • 上传时间:2023-10-16
  • 文档格式:DOCX
  • 文档大小:37.48KB
  • / 12 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 严early function :1. IIC driver for DAC7678 OUTPUT 0-5V analog signal level2. 6 scale for external speed3. Control 2 way signal on the same timeused library Bounce2013.11.18Modified by 2014.02.17*/〃定义6档手动调速开关1档最小,6档最大#define SPEED_114//#define SPEED_215//#define SPEED_316//#define SPEED_417//#define SPEED_518//#define SPEED_619//#include vBounce.h>NORMAL(min)#define SWITCH_CONTROL 23第23号数字口#define SWITCH_CONTROL_1 25脚,第25号数字口MAX//定义接近开关上对应的单片机的引脚,//定义接近开关上对应的单片机的引#define TIME_SLOT 100差所导致的时间误差,暂定为500ms,可调#define TIME_OUT 1000//定义时间误差范围在500ms以内,位移误//定义超出最大时间范围,即第一个雨刷器与第二个雨刷器同步时间相差一个周期,定义这个周期最大时间为2000ms#define DAC7678_SDA 20 〃定义数字模拟转换模块DAC7678的通信接口,采用二线模拟方式// IIC的时钟线SCL写高// SCL拉低// IIC的数据线SDA写高// SDA拉低#define DAC7678_SCL 21#define SCL_1 digitalWrite(DAC7678_SCL,HIGH)#define SCL_0 digitalWrite(DAC7678_SCL,LOW)#define SDA_1 digitalWrite(DAC7678_SDA,HIGH)// DAC7678模块地址,作为IIC模块//以第一个雨刷器到达接近开关时的时间//第二个雨刷器离开接近开关时的时间#define SDA_0 digitalWrite(DAC7678_SDA,LOW)#define DAC7678 0x90unsigned char IIC_ACK; long referenceTime;作为参考时间referenceTime long referenceTime1;referenceTime1long intervalTime;时间间隔intervalTime boolean startCount = false; int device2Current;int device1_init_1 = 1400; int device2_init_1= 1800;//记录两个雨刷器到达或离开接近开关的//记数标志位//第一个雨刷器速度量化值//第二个雨刷器速度量化值int device1_init_2= 2100; int device2_init_2 = 2700;//第一个雨刷器速度量化值//第二个雨刷器速度量化值int device1_init_3= 2500; int device2_init_3 = 3214;//第一个雨刷器速度量化值//第二个雨刷器速度量化值int device1_init_4= 2800;int device2_init_4= 3600;//第一个雨刷器速度量化值//第二个雨刷器速度量化值int device1_init_5= 3200; int device2_init_5 = 4114;//第一个雨刷器速度量化值//第二个雨刷器速度量化值int device1_init_6= 3500;int device2_init_6= 4500;//第一个雨刷器速度量化值//第二个雨刷器速度量化值//Debouncer for motor speed adjustBounce bouncerKl = Bounce( SPEED_1 , 5 ); //Pin 14, 5 millisecondBounce bouncerK2 = Bounce( SPEED_2,5 ); //Pin 15, 5 millisecondBounce bouncerK3 = Bounce( SPEED_3,5 ); //Pin 16, 5 millisecondBounce bouncerK4 = Bounce( SPEED_4,5 ); //Pin 17, 5 millisecondBounce bouncerK5 = Bounce( SPEED_5,5 ); //Pin 18, 5 millisecondBounce bouncerK6 = Bounce( SPEED_6,5 ); //Pin 19, 5 millisecond〃注册接近开关,防止干扰,添加5ms延时抖动Bounce bouncerK7= Bounce( SWITCH_CONTROL , 5 ); //Pin 23, 5 millisecondBounce bouncerK8= Bounce( SWITCH_CONTROL_1 , 5 ); //Pin 23, 5 millisecondvoid setup(){pinMode(SPEED_1,INPUT);pinMode(SPEED_2,INPUT);pinMode(SPEED_3,INPUT);pinMode(SPEED_4,INPUT);pinMode(SPEED_5,INPUT);pinMode(SPEED_6,INPUT);pinMode(SWITCH_CONTROL ,INPUT_PULLUP); 〃设置接近开关引脚为输入模式,并 且内部上拉到高电平pinMode(SWITCH_CONTROL_1 ,INPUT_PULLUP); 〃设置接近开关引脚 1 为输入模 式,并且内部上拉到高电平pinMode(DAC7678_SDA,OUTPUT); pinMode(DAC7678_SCL,OUTPUT);Start_I2c(); // 启动 IIC 协议SendByte(0x90); //DAC 地址,DDR0 接地了。

      见英文 DATASHEET说明书 28 页 严SendByte(0x80); //Static Mode 启动内部参考 24 页SendByte(OxOO);SendByte(0x10);*/SendByte(0x90); //Flexible Mode 启动内部参考 24 页SendByte(0x40);SendByte(OxOO);〃写端口 0的值〃写端口 1的值〃写端口 2的值〃写端口 3的值〃写端口 4的值〃写端口 5的值〃写端口 6的值〃写端口 7的值Stop_I2c(); // 关闭 IIC 协议DAC(DAC7678,0,0);DAC(DAC7678,1,0);DAC(DAC7678,2,0);DAC(DAC7678,3,0);DAC(DAC7678,4,0);DAC(DAC7678,5,0);DAC(DAC7678,6,0);DAC(DAC7678,7,0);void loop(){bouncerK1.update ( ); //Read the signal K1 bouncerK2.update ( ); //Read the signal K2 bouncerK3.update ( ); //Read the signal K3 bouncerK4.update ( ); //Read the signal K4 bouncerK5.update ( ); //Read the signal K5 bouncerK6.update ( ); //Read the signal K6bouncerK7.update ( ); //Read the signal K7 bouncerK8.update ( ); //Read the signal K8if ( bouncerK1.read() == LOW ) { //value changed, and ready to workDAC(DAC7678,1,device1_init_1); 〃写端口int changedK7 = bouncerK7.update ();if( changedK7 && bouncerK7.read() == HIGH){的上升沿变化referenceTime = millis(); startCount = true;}if( startCount==true ){int changedK8 = bouncerK8.update ();if( changedK8 && (bouncerK8.read() == LOW)){的下降沿变化referenceTime1 = millis();startCount = false;}}intervalTime= referenceTime1-referenceTime;if( intervalTime <= TIME_SLOT){ //雨刷器位移在误差范围内,不需要调整第二个 雨刷器的速度device2Current = device2_init_1+0 ;}if(( TIME_SLOT< intervalTime ) && (intervalTime <= TIME_OUT ) ){ /第二个雨刷器速 度慢,需要增加第二个雨刷器的速度device2Current = device2_init_1 + 500 ;}if(( TIME_OUTv intervalTime ) ){ //第二个雨刷器速度快,需要降低第二个雨刷器的速度device2Current = device2_init_1 - 500 ;}DAC(DAC7678,2,device2Current);值}//if ( bouncerK1.read() == LOW )的值,端口1的输出电压作为参考值//读第一个接近开关的开关电平//检测到第一个接近开关电平//标记时间//记数开始标志置位//读第二个接近开关的开关电平//检测到第二个接近开关电平//标记时间//记数开始标志清零〃写端口2的值,端口2的输出电压作为参考if ( bouncerK2.read() == LOW ) { //value changed, and ready to work DAC(DAC7678,1,device1_init_2 ); 〃写端口int changedK7 = bouncerK7.update ();的值,端口 1的输出电压作为参考值//读第一个接近开关的开关电if( changedK7 && bouncerK7.read() == HIGH){ 的上升沿变化referenceTime = millis();startCount = true;}if( startCount==true ){int ch。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.