Juggler Position Control Parsing

Dependencies:   MODSERIAL mbed Servo

Fork of juggler_mbed_position_control by Robert Katzschmann

main.cpp

Committer:
Symplectomorphism
Date:
2017-01-15
Revision:
3:dcaf3c1e4ed6
Parent:
2:b4aef96e0cd7
Child:
4:a3720ed072d2

File content as of revision 3:dcaf3c1e4ed6:

#include "mbed.h"
#include "MODSERIAL/MODSERIAL.h"
#include "SerialComm/SerialComm.h"
#include <stdlib.h>
#include <stdio.h>
#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);

// Initialize a pins t//o perform analog and digital output fucntions
AnalogOut  aout(p18);
PwmOut led1(LED1);
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];
float voltage;

SerialComm serialComm(&pcSerial);

bool readyToSendNext;

void timerFcn()
{
    readyToSendNext = true;
}


int main(void)
{
    led2 = 0;
    led3 = 0;
    motorEnable = 0; // turn off motor
    motorAna.write_u16(POWER_OFF); // set motor pwm to zero
    
    uint16_t motorCommandReceived = 0;
    uint16_t motorCommand = motorCommandReceived;
    uint16_t motorCommandToSend = 0;
    pcSerial.baud(115200);
    pcSerial.printf("Start!\n");

    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();
            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) {
            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.sendUnsignedShort(motorCommandToSend); // write it back
            readyToSendNext = false;
        }

    }
}