Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
RTOS-Threads/src/Task4.cpp
- Committer:
- pHysiX
- Date:
- 2014-05-19
- Revision:
- 50:8a0accb23007
- Parent:
- 44:4be5c01c6de2
- Child:
- 51:04c6af4319e1
File content as of revision 50:8a0accb23007:
/* File: Task4.h
* Author: Trung Tin Ian HUA
* Date: May 2014
* Purpose: Thread4: ESC pulsewidth update. Note this is INDEPENDENT of the pulse frequency.
* Settings: 400Hz
* 200Hz <= PWM frequency <= 400Hz
* Frequency: 400Hz
* Refer to tasks.h to change PWM frequency
* Timing:
*/
#include "tasks.h"
#include "setup.h"
Semaphore sem_Task4(1);
volatile int ESCpower[4] = {0, 0, 0, 0};
int stallESC = 0;
bool armed = false;
bool ESC_check = false;
bool calibration_mode = false;
// ==================
// === ESC UPDATE ===
// ==================
void Task4(void const *argurment)
{
if (armed) {
if (calibration_mode) {
for (int i = 0; i < 4; i++)
ESC[i].pulsewidth_us(RCCommand[3]);
} else if (RCCommand[3] > 1100) {
if (counterESC) {
for (int i = 0; i < 3; i++)
adjust[i] /= 2.0;
int throttle = RCCommand[3] * 9/10;
ESCpower[0] = constrainESC(throttle + (adjust[1]) + (adjust[2]) - adjust[0]);
ESCpower[1] = constrainESC(throttle + (adjust[1]) - (adjust[2]) + adjust[0]);
ESCpower[2] = constrainESC(throttle - (adjust[1]) - (adjust[2]) - adjust[0]);
ESCpower[3] = constrainESC(throttle - (adjust[1]) + (adjust[2]) + adjust[0]);
for (int i = 0; i < 4; i++)
ESC[i].pulsewidth_us(ESCpower[i]);
counterESC = false;
} else {
//stallESC++;
//if (stallESC > 1) {
// imu.debugSerial.printf("ESC NOT UPDATED FAST ENOUGH!\n");
// BT.printf("ESC NOT UPDATED FAST ENOUGH!\n");
// stallESC = 0;
//}
}
} else {
for (int i = 0; i < 4; i++) {
ESCpower[i] = 1000;
ESC[i].pulsewidth_us(ESCpower[i]);
}
}
} else {
if (ESC_check) {
BT.printf("Need to ARM to check ESC output!\n");
ESC_check = false;
}
for (int i = 0; i < 4; i++) {
ESCpower[i] = 990;
ESC[i].pulsewidth_us(ESCpower[i]);
}
}
}
// ************************
// *** Helper functions ***
// ************************
void Task4_ISR(void const *argument)
{
//sem_Task4.release();
}
int constrainESC(float input)
{
if (input < 1100.0)
return 1100;
else if (input > 2000.0)
return 2000;
else
return (int) input;
}