Samenwerking Groep 12
Dependencies: Encoder MODSERIAL HIDScope mbed
Foo
main.cpp
- Committer:
- ThomasBNL
- Date:
- 2015-09-22
- Revision:
- 26:6bdfc1856531
- Parent:
- 25:75cce8f86272
File content as of revision 26:6bdfc1856531:
//------------------------------------------------------------------------------------------------------------------------------------ // GROUP 12: THE CHENNE ROBOT (bottle xylophone) //------------------------------------------------------------------------------------------------------------------------------------ //INCLUDE LIBRARY //------------------------------------------------------------------------------------------------------------------------------------ #include "mbed.h" #include "HIDScope.h" #include "encoder.h" #include "MODSERIAL.h" //------------------------------------------------------------------------------------------------------------------------------------ // Defining inputs/outputs/constants //------------------------------------------------------------------------------------------------------------------------------------ // MOTOR 2 SIGNALS DigitalOut motor2direction(D4); //D4 and D5 are Motor 2 inputs PwmOut motor2speed(D5); // D5 is an input on the motor that controls the speed of motor number 2 DigitalIn button(PTA4); // PTA4 is used as a button controller (0 when pressed and 1 when not pressed) Encoder motor2(D13,D12,true); // The encoder is able to read and set position/speed values Ticker TickerController; // This adds a Ticker to the function +TickerController //AnalogIn potmeter2(A0); // NOT IMPLEMENTED YET // OUTPUT DATA MODSERIAL pc(USBTX,USBRX); // This input is used to send data to the pc HIDScope scope(2); // This adds two HIDScope channels (1) and (0) to display signals to HIDScope // DEFINING CONSTANTS double counts_per_rev=4200; // Counts per revolution DERIVED FROM TESTS (NOG DOEN) double degrees_per_turn=360; // Degrees for one revolution double counts_per_degree=counts_per_rev/degrees_per_turn; // 11.67 counts/degree //divide counts by 11.67 to obtain degrees const double motor2_Kp = 1; // Controller gain which will be multiplied with the error (*how fast will the error be corrected) const double reference = 400; // Reference value to what position (counts) shall the motor return //------------------------------------------------------------------------------------------------------------------------------------ // Defining functions //------------------------------------------------------------------------------------------------------------------------------------ // FUNCTION 1: P-controller double P(double error, const double Kp) //returns error * controller gain { return Kp*error; } // FUNCTION 2: Calculates the errors and puts the value into function 1 double motor2_controller() { double position=motor2.getPosition(); //current motor position double error=reference-position; scope.set(0,motor2.getPosition()); scope.send(); pc.printf("ik doe het positie = %d en error =%d en reference=%d \r\n", position, error, reference); return P(error,motor2_Kp); } //------------------------------------------------------------------------------------------------------------------------------------ // Execution of the programm (MAIN) //------------------------------------------------------------------------------------------------------------------------------------ // MAIN int main() // Begin main loop 1 { // CALLIBRATION STARTING POSITION pc.baud(9600); // baud rate at which the information is processed to the computer //motor2.setPosition(0); // calls the current position of the motor zero // CALLIBRATION POSITION OF MOTOR // The position is limited to number of counts per revolution while ((motor2.getPosition()>counts_per_rev) || (motor2.getPosition()<-counts_per_rev)) // If value is outside -4200 and 4200 (number of counts equal to one revolution) reset to zero { motor2.setPosition(0); pc.printf(" HE \r\n LLO \r\n WO \r\n RLD \r\n !!! \r\n FOO! \r\n"); break; } while(true) { // while loop 1 // IF BUTTON IS PRESSED if (button.read() < 0.5) { // start if else loop 1 motor2direction = 0; // clockwise motor rotation (front view) motor2speed = 0.5f; // motorspeed pc.printf("positie = %d \r\n", motor2.getPosition()); } // IF BUTTON IS NOT PRESSED else { double output_motor = motor2_controller(); //extract value from motor2_controller //Case 1 while(output_motor>0) // Value to correct for by the motor >0 { motor2speed=output_motor; //then apply this value motor2direction=1; //to the motor in anti-clockwise direction break; // abort the loop and continue the script } //Case 2 while(output_motor<0) // Value to correct for by the motor <0 { motor2speed=fabs(output_motor);// then apply the absolute value motor2direction=0; // to the motor in clockwise direction break; // then abort the loop and continue the script } // ATTACHING TICKER { TickerController.attach(&motor2_controller,0.01f);//100Hz pc.printf("else loop controller"); } } // end of if-else loop 1 } // end of while loop 1 } // end of main //------------------------------------------------------------------------------------------------------------------------------------