Motor control for robotic arm

Dependencies:   MCP23017 WattBob_TextLCD mbed

Fork of Balanced Arm by Balanced Arm

HandShake/HandShake.cpp

Committer:
ADAMSTRUTT
Date:
2016-02-01
Revision:
11:7f74fb17c328
Parent:
10:d7cce35b7bfd

File content as of revision 11:7f74fb17c328:

//*********************************************************************
// Author: Adam Strutt
// File: (PS2C.cpp) PlayStation 2 controller
// Version: 1.0v
// Date: 11/12/2015
//*********************************************************************

#include <string>
#include "HandShake.h"
#include "mbed.h"
#include "MCP23017.h"
#include "WattBob_TextLCD.h"
#include "AX12.h"
    
    MCP23017 *par_port;
    WattBob_TextLCD *lcd;
    Serial ax12_bus(p28, p27);
    AX12 my_AX12(ax12_bus, p29, 1);

//*********************************************************************
// Object: PC_HandShake
// Description: To create a HandShake object. 
//*********************************************************************

PC_HandShake::PC_HandShake(Serial& PCbus) 
    : _PCbus(PCbus){
        
        par_port = new MCP23017(p9, p10, 0x40);
        par_port->config(0x0F00, 0x0F00, 0x0F00);
        lcd = new WattBob_TextLCD(par_port);
        par_port->write_bit(1, BL_BIT);
}

//*********************************************************************
// Method: PC_Connect
// Description: This method is used to connect the PC to the mbed.
//*********************************************************************

void PC_HandShake::PC_Connect(void){
    lcd->cls();
    lcd->printf("Connecting");
    lcd->locate(1,0);
    lcd->printf("to PC");
    while('s' != _PCbus.getc()){
        }
    while('s' != _PCbus.getc()){
        }
    lcd->cls();
    lcd->printf("Conneced\n");
    wait(2);
}

void PC_HandShake::PC_Read(void){
    
    char Command[8];
    
    lcd->cls();
    lcd->printf("Reading PC");
    
    while(_PCbus.readable()==0){}
    Command[0] = _PCbus.getc();
    if(Command[0]=='s')
    {
        while(_PCbus.readable()==0){}
        Command[1] = _PCbus.getc();
        if(Command[1]=='c')
        {
    for(int x=2;x<=7;x++)
    {
        while(_PCbus.readable()==0){}
        Command[x] = _PCbus.getc();
    }
    
    lcd->cls();
    lcd->printf("%s", Command);
    wait(1);
        switch(Command[2]){
                case '0':
                    char angle[3];
                    angle[0] = Command[4];
                    angle[1] = Command[5];
                    angle[2] = Command[6];
                    int angle2 = atoi(angle);
                    lcd->cls();
                    lcd->printf("%i", angle2);
                    my_AX12.SetGoal(angle2);
                    break;
                default:
                    break;
                }
        }
        wait(1);
    }
}

void PC_HandShake::PC_WriteLoad(char _servo){
    
    char _data[3];
    char _returnToPC[8];
    
    lcd->cls();
    lcd->printf("Writing to PC");
    
    my_AX12.GetLoad(_data);
    
    //lcd->cls();
//    lcd->printf("%s", _data);
    
    _returnToPC[0] = 'S';
    _returnToPC[1] = 'D';
    _returnToPC[2] = '0';
    _returnToPC[3] = _servo;
    _returnToPC[4] = _data[0];
    _returnToPC[5] = _data[1];
    _returnToPC[6] = _data[2];
    _returnToPC[7] = '0';
    
    _PCbus.printf(_returnToPC);
    wait(1);
}