Inverted Pendulum / Mbed 2 deprecated IP-Interface

Dependencies:   mbed QEI

Committer:
dlweakley
Date:
Wed Nov 16 00:18:37 2016 +0000
Revision:
14:67a4e886387f
Parent:
11:ed9539245ea0
Child:
15:a0b5c4306246
test;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Snay22 5:74fcd196ff96 1 #include "QEI.h"
dlweakley 6:8d2171811f14 2 #include "Motor.h"
dlweakley 8:2abfdbf5a3b8 3 #include "pot.h"
dlweakley 4:41bbbaecd322 4
Snay22 5:74fcd196ff96 5 Serial pc(USBTX, USBRX);
Snay22 5:74fcd196ff96 6 //Use X4 encoding.
Snay22 5:74fcd196ff96 7 //QEI wheel(p29, p30, NC, 624, QEI::X4_ENCODING);
Snay22 5:74fcd196ff96 8 //Use X2 encoding by default.
dlweakley 8:2abfdbf5a3b8 9 QEI encoder (PTC16, PTC17, PTB9, 512);
dlweakley 11:ed9539245ea0 10 Motor motor(PTC4, PTD0, PTC3, PTC12, PTB23, 2000);
dlweakley 11:ed9539245ea0 11 Pot pend(PTC10,0);
dlweakley 8:2abfdbf5a3b8 12 void test_distance(){
dlweakley 8:2abfdbf5a3b8 13 int wait = 1000;
dlweakley 8:2abfdbf5a3b8 14 int steps = 100;
dlweakley 8:2abfdbf5a3b8 15 while (wait > 500){
dlweakley 8:2abfdbf5a3b8 16 while (steps > 10){
dlweakley 8:2abfdbf5a3b8 17 printf("steps: %i wait: %i \r\n", steps, wait);
dlweakley 8:2abfdbf5a3b8 18 for( int i = 0; i < 3; i++){
dlweakley 8:2abfdbf5a3b8 19 encoder.reset();
dlweakley 8:2abfdbf5a3b8 20 motor.step_clockwise(steps, wait);
dlweakley 8:2abfdbf5a3b8 21 int pulses_cw = encoder.getPulses();
dlweakley 8:2abfdbf5a3b8 22 wait_ms(200);
dlweakley 8:2abfdbf5a3b8 23 int coast_pulses_cw = encoder.getPulses();
dlweakley 8:2abfdbf5a3b8 24
dlweakley 8:2abfdbf5a3b8 25
dlweakley 8:2abfdbf5a3b8 26 encoder.reset();
dlweakley 8:2abfdbf5a3b8 27 motor.step_anticlockwise(steps, wait);
dlweakley 8:2abfdbf5a3b8 28 int pulses_ccw = encoder.getPulses();
dlweakley 8:2abfdbf5a3b8 29 wait_ms(200);
dlweakley 8:2abfdbf5a3b8 30 int coast_pulses_ccw = encoder.getPulses();
dlweakley 8:2abfdbf5a3b8 31 printf("trial: %i \tclockwise pluses: \t%i \tanticlockwise pluses: \t%i \r\n", i + 1, pulses_cw, pulses_ccw);
dlweakley 8:2abfdbf5a3b8 32 printf("\t\tpulses after coast: \t%i \tpulses after coast: \t%i\r\n", coast_pulses_cw, coast_pulses_ccw);
dlweakley 8:2abfdbf5a3b8 33 }
dlweakley 8:2abfdbf5a3b8 34 steps -=10;
dlweakley 8:2abfdbf5a3b8 35 printf("\r\n");
dlweakley 8:2abfdbf5a3b8 36 }
dlweakley 8:2abfdbf5a3b8 37
dlweakley 8:2abfdbf5a3b8 38 wait-=100;
dlweakley 8:2abfdbf5a3b8 39 steps=100;
dlweakley 8:2abfdbf5a3b8 40 }
dlweakley 8:2abfdbf5a3b8 41 }
dlweakley 6:8d2171811f14 42
dlweakley 8:2abfdbf5a3b8 43
dlweakley 8:2abfdbf5a3b8 44 void test_pendulum(){
Snay22 5:74fcd196ff96 45 while(1){
dlweakley 8:2abfdbf5a3b8 46 printf("angle: %f \r\n", pend.get_angle());
Snay22 0:44fc57e03a56 47 }
dlweakley 8:2abfdbf5a3b8 48 }
dlweakley 11:ed9539245ea0 49 void calibrate_pendulum(){
dlweakley 11:ed9539245ea0 50 encoder.reset();
dlweakley 11:ed9539245ea0 51 while(1){
dlweakley 14:67a4e886387f 52 printf("voltage %%: %f pulse: %i \r\n", pend.get_voltage(), encoder.getPulses());
dlweakley 11:ed9539245ea0 53 }
dlweakley 11:ed9539245ea0 54 }
dlweakley 11:ed9539245ea0 55 void move_pulses(int pulses){ // find number of pulses from the encoder going from one end to the other.
dlweakley 11:ed9539245ea0 56 int start = encoder.getPulses();
dlweakley 11:ed9539245ea0 57 if(pulses >=0){
dlweakley 11:ed9539245ea0 58 while(encoder.getPulses() < start + pulses){
dlweakley 11:ed9539245ea0 59 motor.clockwise();
dlweakley 11:ed9539245ea0 60 }
dlweakley 11:ed9539245ea0 61 }else{
dlweakley 11:ed9539245ea0 62 while(encoder.getPulses() > start + pulses)
dlweakley 11:ed9539245ea0 63 motor.anticlockwise();
dlweakley 11:ed9539245ea0 64 }
dlweakley 11:ed9539245ea0 65 }
dlweakley 8:2abfdbf5a3b8 66 int main() {
dlweakley 14:67a4e886387f 67 calibrate_pendulum();
dlweakley 8:2abfdbf5a3b8 68 //motor.step_clockwise(100,1500);
dlweakley 8:2abfdbf5a3b8 69 //motor.step_clockwise(100,1000);
dlweakley 8:2abfdbf5a3b8 70 //motor.step_clockwise(100,700);
dlweakley 8:2abfdbf5a3b8 71
dlweakley 8:2abfdbf5a3b8 72
Snay22 5:74fcd196ff96 73
dlweakley 8:2abfdbf5a3b8 74 }