Initial Commit
Dependencies: mbed HC05 QEI MODSERIAL SWSPI mbed-rtos
main.cpp
- Committer:
- harshb
- Date:
- 2014-10-21
- Revision:
- 6:5ab1735265a9
- Parent:
- 5:eb706d3e512c
File content as of revision 6:5ab1735265a9:
// FORMAT_CODE_START
#include "QEI.h"
#include "mbed.h"
#include "robot.h"
#include "rtos.h"
#include "MPU6050.h"
#include "I2Cdev.h"
#include "tone.h"
#include "ultrasonic.h"
#include "bt_shell.h"
#include "bt_shell_f.h"
int Current_Right_pulse=0;
int Current_Left_pulse=0;
int Linput=0;
int Rinput=0;
int Change_Right_pulse=0;
int Change_Left_pulse=0;
int Previous_Left_pulse=0;
int Previos_Right_pulse=0;
int time_int = 50;
int time_factor=1000/time_int ;
int Error_Right=0;
int Error_Left=0;
float L_Kp=0.1;
float R_Kp=0.1;
int Last_Error_Left=0;
int Last_Error_Right=0;
int previous_Linput= 0 ;
int previous_Rinput= 0 ;
RtosTimer *Motor_controller_Timer;
void Motorcontroller(void const *args)
{
Current_Right_pulse= right.getPulses()/10;
Current_Left_pulse=left.getPulses()*(-1)/9.85;
Change_Right_pulse=Current_Right_pulse- Previos_Right_pulse;
Change_Left_pulse=Current_Left_pulse- Previous_Left_pulse;
Previous_Left_pulse=Current_Left_pulse;
Previos_Right_pulse=Current_Right_pulse;
Error_Right=(Rmotor_speed- (Change_Right_pulse*time_factor) );
Error_Left=(Lmotor_speed- (Change_Left_pulse*time_factor));
Linput=(Linput+Error_Left*L_Kp);
Rinput=(Rinput+Error_Right*R_Kp);
if(Linput>100)
Linput=100;
else if (Linput<-100)
Linput= -100;
if(Rinput>100)
Rinput=100;
else if(Rinput<-100)
Rinput= -100;
if(Error_Right==0) {
Last_Error_Right++;
} else {
Last_Error_Right=0;
}
if(Error_Left==0) {
Last_Error_Left++;
} else {
Last_Error_Left=0;
}
if(Last_Error_Right==100) {
Rinput=0;
}
if(Last_Error_Left==100) {
Linput=0;
}
*motors.Left = Linput; // HARSH change to -Linput for black and Linput for blue
*motors.Right = -Rinput; //// HARSH change to Rinput for black and -Rinput for blue
}
char c;
char buffer[10];
void bt_shell_thr(void const *args)
{
while(true) {
if(Selected_robot=='A') {
bt_shell_run();
} else if(Selected_robot=='F') {
bt_shell_f_run();
}
Thread::wait(50);
}
}
int main()
{
initRobot();
while(buffer[3] != 'O') {
while(buffer[3] != 'E') {
if(bt.readable()) {
bt.gets(buffer, 5);
if(buffer[3] == 'E') {
bt.printf(">>1B");
} else if(buffer[3] == '?') {
bt.printf("eBot#2");
}
}
}
if(bt.readable()) {
bt.gets(buffer, 5);
}
}
bt_connected=true;
bt.gets(buffer, 2);
if(buffer[0]=='A') {
Selected_robot='A';
//imperial_march();
} else if(buffer[0]=='F') {
Selected_robot='F';
Led_on();
}
Thread bt_shell_th(bt_shell_thr, NULL, osPriorityNormal, 2048, NULL);
Thread IMU_th(Imu_yaw, NULL, osPriorityNormal, 2048, NULL);
Thread Encoder_th(encoder_thread, NULL, osPriorityNormal, 2048, NULL);
Motor_controller_Timer = new RtosTimer(&Motorcontroller, osTimerPeriodic, NULL);
Motor_controller_Timer->start(time_int);
while(1) {
if(Selected_robot=='A') {
if(ldrread2()>0.6) {
Led_on();
} else {
Led_off();
}
}
ultrasonic_run();
Thread::yield();
}
}