Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int val, pos, last, oldpos, oldposition;
- unsigned long lastTime, now, prevTime;
- double mSpeed;
- int next[4] = {1,3,0,2};
- int lastAff = 0;
- int nowAff =0;
- int posFin = 0;
- bool first = true;
- #define BACK 0;
- #define FORW 1
- void setup(){
- Serial.begin(9600);
- attachInterrupt(digitalPinToInterrupt(2), TachEncoder1, CHANGE);
- attachInterrupt(digitalPinToInterrupt(3), TachEncoder1, CHANGE);
- pinMode(8,OUTPUT);
- pinMode(9,OUTPUT);
- pinMode(11,OUTPUT);
- last = 2*digitalRead(2)+digitalRead(3);
- Serial.println(2);
- Serial.println(2^2);
- lastTime = 0;
- now = 0;
- oldpos = 0;
- }
- void loop(){
- /*now = millis();
- if(now-lastTime>=40){
- speed = (double)(pos-oldpos)/((double)(now-lastTime)/1000.0);
- lastTime= now;
- oldpos = pos;
- Serial.print("Speed : ");
- Serial.println(speed);
- if(posFin!=0){
- Serial.print("Pos : ");
- Serial.println(pos-posFin);
- }
- }
- if(millis()>5000){
- if(first){
- Serial.print("Speed : ");
- Serial.println(speed);
- }
- analogWrite(11,255);
- digitalWrite(8,LOW);
- digitalWrite(9,LOW);
- if(first)
- posFin=pos;
- first = false;
- }*/
- move(90);
- delay(4000);
- //Serial.println(pos);
- }
- double vitFromReste(int reste){
- if(reste > 180)
- return 270;
- else
- return 1.5*(double)reste;
- }
- int outputFromVit(int speedW,int speedA, int output){
- //return output + (speedW-speedA)/25
- return speedW<speedA? output-10:output+5;
- }
- double getSpeed(){
- now = millis();
- //Serial.println(now-prevTime);
- double dista = (pos-oldposition)*1000;
- double timeLaps = now - prevTime;
- double vit = dista/timeLaps;
- oldposition = pos;
- prevTime = now;
- return vit;
- }
- void move(int angle){
- if(angle==0)
- return;
- pos = 0;
- int but = 2*angle;
- int reste = but-pos;
- double speedW ;
- int dir = ((reste/abs(reste))+1)/2;
- int output = 60;
- oldposition = 0;
- prevTime = 0;
- long lastT = 0;
- while(abs(reste)>4 || abs(mSpeed)>100){
- /*long mom = millis();
- if(mom-lastT<40)
- continue;
- mom = lastT;
- Serial.println(mom);*/
- mSpeed = getSpeed();
- /* if(abs((double)mSpeed*0.116+42.5-(double)reste)<2){
- brake();
- delay(20);
- reste = but-pos;
- continue;
- }*/
- speedW = vitFromReste(abs(reste));
- //Serial.println(speed);
- //Serial.println(speedW);
- output = outputFromVit(speedW,mSpeed, output);
- if((double)reste*mSpeed <0){
- speedW = 100;
- output = 80;
- dir = !dir;
- }
- if(output<60){
- brake();
- }
- else{
- digitalWrite(8,dir);
- digitalWrite(9,!dir);
- analogWrite(11,output);
- }
- delay(20);
- reste = but-pos;
- }
- brake();
- Serial.println(mSpeed);
- delay(30);
- Serial.println(pos);
- pos = 0;
- oldposition = 0;
- }
- void brake(){
- digitalWrite(8,0);
- digitalWrite(9,0);
- analogWrite(11,255);
- }
- void TachEncoder1(){
- //val = val ^ 2;
- val = 2*digitalRead(2)+digitalRead(3);
- if(val == next[last])
- pos+=1;
- else
- pos-=1;
- last = val;
- }
- void TachEncoder2(){
- val = val ^ 1;
- if(val == next[last])
- pos+=1;
- else
- pos-=1;
- last = val;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement