|
我最近想做一个东西,但苦于不知道如何控制它。可能是C语言不行,亦或者是没有Arduino编程思想,弄了好几天都没什么结果。好了废话不多说,我讲一下我的问题吧。
大概想法就是:拿一个直滑式电位器(线性的)作为“定位器”,根据滑杆的位置换算出电机应该运动的时间,首先,我把从电位器引脚读取的值等分成三段0~341,341~682,682~1024,处在0~341段的就前进,前进的时间根据滑杆的位置;处在341~682段的停止;处在682~1023段的后退。可是在编程的时候出现了问题,让它动起来容易,但是它根本停不下来。 - int R_pin = 14;//定义模拟引脚1
- void setup()
- {
- pinMode(8,OUTPUT);//定义电机需要的引脚
- pinMode(9,OUTPUT);
- pinMode(10,OUTPUT);
- pinMode(5,OUTPUT);
- pinMode(6,OUTPUT);
- pinMode(7,OUTPUT);
- pinMode(14,INPUT);
- Serial.begin(9600);
- }
- void qianjin()//前进
- {
-
- digitalWrite(10,300);
- digitalWrite(5,300);
- digitalWrite(7,HIGH);//使直流电机(左)逆时针转
- digitalWrite(6,LOW);
- digitalWrite(8,LOW);//使直流电机(右)顺时针转
- digitalWrite(9,HIGH);
- }
- void tingzhi()//停止
- {
- digitalWrite(6,HIGH);//使直流电机(左)制动
- digitalWrite(7,HIGH);
- digitalWrite(8,HIGH);//使直流电机(右)制动
- digitalWrite(9,HIGH);
- }
- void houtui()
- {
- digitalWrite(10,300);//输入模拟值进行设定速度
- digitalWrite(5,300);
- digitalWrite(6,HIGH);//使直流电机(左)逆时针转
- digitalWrite(7,LOW);
- digitalWrite(8,HIGH);//使直流电机(右)顺时针转
- digitalWrite(9,LOW);
- }
- void loop()
- { int R,x,s,val=0,old_val=0;
- unsigned long startTime=0;
- float t;
- val= analogRead(R_pin);
- Serial.println(val);
- if(old_val == val)
- {
- startTime = millis(); //用来计时
- if(val< 341){
- t=0.0088*(341-val);
- qianjin();
- delay(t*1000+1000);
- houtui();
- delay(1000);
- qianjin();
- delay(1000);
- houtui();
- delay(t*1000+1000);
- if(millis()-startTime<=5000)
- tingzhi();
- }
- if(341 <= val <= 682)
- tingzhi();
- if(val>682){
- t=0.0088*(val-682);
- houtui();
- delay(t*1000+1000);
- qianjin();
- delay(1000);
- houtui();
- delay(1000);
- qianjin();
- delay(1000);
- tingzhi();
- }
- }
- old_val = val;
- }
复制代码
我想着就是:滑杆到某个位置时,只要一次那样的动作(前进,后退,前进,后退,停止),停止后,再手动归位(就是手动把滑杆推到中间的位置,也就是模拟值在341~682的地方),如果下次再推动滑杆的时候还能继续那样的动作。
然而上述程序的结果是:一直前进,后退.............
求解啊!!!!希望大神级人物能够给个思路,让我继续走下去...
|
|