
Juggler Position Control Parsing
Dependencies: MODSERIAL mbed Servo
Fork of juggler_mbed_position_control by
Diff: main.cpp
- Revision:
- 3:dcaf3c1e4ed6
- Parent:
- 2:b4aef96e0cd7
- Child:
- 4:a3720ed072d2
--- a/main.cpp Sun Jan 15 03:14:29 2017 +0000 +++ b/main.cpp Sun Jan 15 23:58:28 2017 +0000 @@ -6,6 +6,12 @@ #include <math.h> #define NUM_FLOATS 10 +#define USHRT_MAX 65535 + +#define USHRT_MIN 0 +#define POWER_OFF 32768 +#define BACKWARD_MAX 0 +#define FORWARD_MAX USHRT_MAX MODSERIAL pcSerial(USBTX, USBRX); @@ -13,9 +19,15 @@ // Initialize a pins t//o perform analog and digital output fucntions AnalogOut aout(p18); PwmOut led1(LED1); -// DigitalOut led2(LED2); -//DigitalOut led3(LED3); +DigitalOut led2(LED2); +DigitalOut led3(LED3); + +PwmOut motorPwm(p26); +AnalogOut motorAna(p18); +DigitalOut motorEnable(p12); Ticker aTimer; +AnalogIn potentiometer(p20); +DigitalIn potentiometerEnable(p21); //Serial pc(USBTX, USBRX); float valueFloats[NUM_FLOATS]; @@ -33,51 +45,55 @@ int main(void) { + led2 = 0; + led3 = 0; + motorEnable = 0; // turn off motor + motorAna.write_u16(POWER_OFF); // set motor pwm to zero - float fReceived = 0; - float fToSend = 0; + uint16_t motorCommandReceived = 0; + uint16_t motorCommand = motorCommandReceived; + uint16_t motorCommandToSend = 0; pcSerial.baud(115200); pcSerial.printf("Start!\n"); - - /* - while(true) { - if(serialComm.checkIfNewMessage()) { - valueFloats[0] = serialComm.getFloat();//valueFloats, NUM_FLOATS); - led2 = !led2; - voltage = (abs(valueFloats[0]) > 3.3f) ? 3.3f : abs(valueFloats[0]); - aout = voltage / 3.3f; - // turn on the led if the voltage is greater than 0.5f * VCC - led1 = (aout > 0.5f) ? 1 : 0; // voltage larger than 0.5*3.3 - - } - wait(1.0f); - }*/ - //int i = 0; readyToSendNext = false; //aTimer.attach(&timerFcn, 0.002); // the address of the function to be attached (flip) and the interval (2 seconds) while(1) { - if(serialComm.checkIfNewMessage()) - { - fReceived = serialComm.getFloat(); + + if(serialComm.checkIfNewMessage()) { + //fReceived = serialComm.getFloat(); + motorCommandReceived = serialComm.getUnsignedShort(); + led2 = potentiometerEnable; + + if(potentiometerEnable) { + motorEnable = 1; //CHANGE TO 1 + led3 = 1; + } else { + motorEnable = 0; + led3 = 0; + //motorAna.write_u16(POWER_OFF); + } + + motorCommand = potentiometer.read_u16(); + led1 = potentiometer; + motorAna.write_u16(motorCommand); + + //motorAna.write_u16(motorCommandReceived); + //motorAna.write_u16(USHRT_MAX); + readyToSendNext = true; } -// - if(readyToSendNext == true) - { - fToSend = fReceived; // / 3.3f; + + if(readyToSendNext == true) { + motorCommandToSend = motorCommandReceived; // / 3.3f; //led1 = fToSend; // voltage larger than 0.5*3.3 - + //i++; // led1 = (ftemp > 0.5f) ? !led1 : 0; // voltage larger than 0.5*3.3 - serialComm.sendFloat(fToSend); // write it back - readyToSendNext = false; + serialComm.sendUnsignedShort(motorCommandToSend); // write it back + readyToSendNext = false; } - - // float testFloat = 0.1*i; - - - //wait(0.01f); + } } \ No newline at end of file