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.
Dependencies: BridgeDriver FrontPanelButtons MCP23017 SDFileSystem TextLCD mbed
Diff: DeviceClasses.h
- Revision:
- 0:22618cf06f45
- Child:
- 1:5731f31f96be
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/DeviceClasses.h Tue Sep 16 15:28:59 2014 +0000
@@ -0,0 +1,394 @@
+/*#include "mbed.h"
+#include "LocalPinNames.h"
+#include "TextLCD.h"
+#include "BridgeDriver.h"
+*/
+#include "Device.hpp"
+
+
+/**********************************************************************************************************************************/
+/**********************************************************************************************************************************/
+/*************************** <CLASS: Voltage_Driver> ****************************/
+/**********************************************************************************************************************************/
+/**********************************************************************************************************************************/
+
+class Voltage_Driver{
+
+ public :
+ //uint8_t ch123; //Channel value this device is set to
+ int ch;
+ int test;
+
+ int interpret();
+ int forceBrake();
+ //int forceFloat();
+ float drive();
+
+ //Voltage_Driver();
+ void setChannel(int channel){
+ Voltage_Driver::ch = channel;
+ }
+
+ int getChannel(){
+ return Voltage_Driver::ch;
+ }
+};
+
+//Voltage_Driver::Voltage_Driver(void){
+//}
+
+//A line consists of [ __(Local_Name)__ __(function)__ __(parameter1)__ __(parameter2)__ __(parameter3)__ ... and so on]
+int Voltage_Driver::interpret(){
+ /*
+ lcd.cls(); //clear the display
+ lcd.setAddress(0,3);
+ lcd.printf("Test2 ");
+ lcd.setAddress(0,1);
+ lcd.printf("wrd1: %s", lineData.word[0]);
+ lcd.setAddress(0,2);
+ lcd.printf("wrd2: %s", lineData.word[1]);
+ wait(3);
+*/
+
+
+ char *firstWord = lineData.word[0]; //get the first word in the line
+/*
+ lcd.setAddress(0,2);
+ lcd.printf("fW: %s", firstWord);
+ lcd.setAddress(0,3);
+ lcd.printf("ch: %d", ch);
+ wait(3);*/
+
+ //Initialize the class and device
+ if (strncmp(firstWord,"device", 6) == 0){
+ //Order of Line: Command, Local_Name, VOLTAGE_DRIVER, Channel(1,2,3,4,5,6,7,8)
+
+ test = 10;
+
+ if (lineData.numWords != 4){
+ //Error Check, incorrect number of parameter, error out
+ return 0;
+ }
+
+ char *channel = lineData.word[3]; //Parameter is a number
+ int channelValue = atoi(channel);
+
+ //Channel Value between 1 to 8
+ if (channelValue >= 1 && channelValue <= 8){
+
+ setChannel(channelValue);
+ //ch = channelValue;
+
+ lcd.setAddress(0,2);
+ lcd.printf("fW: %s", firstWord);
+ //lcd.setAddress(0,3);
+ //lcd.printf("ch: %d", getChannel());
+ lcd.setAddress(0,3);
+ lcd.printf("test: %d", test);
+ //lcd.setAddress(0,3);
+ //lcd.printf("chString: %s", chString);
+ wait(2);
+
+ switch (channelValue){
+ case 1:
+ case 2:
+ bridges.enablePwm(BridgeDriver::MOTOR_A, 0);
+ break;
+ case 3:
+ case 4:
+ bridges.enablePwm(BridgeDriver::MOTOR_B, 0);
+ break;
+ case 5:
+ case 6:
+ bridges.enablePwm(BridgeDriver::MOTOR_C, 0);
+ break;
+ case 7:
+ case 8:
+ bridges.enablePwm(BridgeDriver::MOTOR_D, 0);
+ break;
+ }
+ /* lcd.setAddress(0,2);
+ lcd.printf("AchannelVal: %d", channelValue);
+ lcd.setAddress(0,3);
+ lcd.printf("Ach: %d", ch);
+ wait(3);*/
+
+ }
+ else{
+ //ERROR Out
+ //Unacceptable channel, or conversion function failed when converting string to int
+ }
+ }
+
+ //if the first word is not "device" it means that it's trying to perform a function to a specific Motor
+ else{
+
+
+
+ //Order of Line: Local_Name, Function_Name, Param1, Param2, Param3,.......
+ char *localname = lineData.word[0]; //just for the sake of following the variable easily and understanding
+ char *func = lineData.word[1];
+
+ /******************************************************************************/
+ /*** <Func: forceBrake> ***/
+ /******************************************************************************/
+ if (strncmp(func,"forceBrake", 10) == 0){
+
+ if (lineData.numWords != 3){
+ //Error Check, incorrect number of parameter, error out
+ return 0;
+ }
+
+ bridges.forceBrake(ch);
+ }
+
+
+ /******************************************************************************/
+ /*** <Func: drive> ***/
+ /******************************************************************************/
+ else if (strncmp(func,"drive", 5) == 0){
+ //Order of Line: Local_Name, drive
+
+ lcd.setAddress(0,0);
+ lcd.printf("lclN: %s ", localname);
+ lcd.setAddress(0,2);
+ lcd.printf("func: %s ", func);
+ //lcd.setAddress(0,3);
+ //lcd.printf("3ch: %d ", getChannel());
+ lcd.setAddress(0,3);
+ lcd.printf("test: %d", test);
+ //lcd.setAddress(0,3);
+ //lcd.printf("chString: %s ", chString);
+ wait(3);
+
+ if (lineData.numWords != 2){
+ //Error Check, incorrect number of parameter, error out
+ return 0;
+ }
+ /*
+ int State = 2;
+ int channelValue = atoi(chString);
+ State = bridges.drive(channelValue, 1); //Turn channel on
+ lcd.setAddress(0,2);
+ lcd.printf("TEST ch: %d, State: %d", channelValue, State);
+ wait(3);*/
+
+ }
+
+
+ /******************************************************************************/
+ /**** <Func: off> ****/
+ /******************************************************************************/
+ else if (strncmp(func,"drive", 5) == 0){
+ //Order of Line: Local_Name, drive, duration
+
+ if (lineData.numWords != 2){
+ //Error Check, incorrect number of parameter, error out
+ return 0;
+ }
+
+ bridges.drive(getChannel(), 0); //Turn channel off
+ }
+
+ else {
+ return 0;
+
+ }
+ }
+ /*
+ lcd.setAddress(0,3);
+ lcd.printf("ENDch: %d ", getChannel());
+ wait(3);*/
+
+ return 1;
+}
+
+
+
+/**********************************************************************************************************************************/
+/**********************************************************************************************************************************/
+/******************************** <CLASS: Motor> ********************************/
+/**********************************************************************************************************************************/
+/**********************************************************************************************************************************/
+
+class Motor{
+
+ enum BridgeDriver::Motors motor;
+
+ public :
+ int interpret();
+ void enableBrake();
+ int forceBrake();
+ //int forceFloat();
+ float drive();
+
+
+ void setMotor(BridgeDriver::Motors selectedMotor){
+ motor = selectedMotor;
+ }
+
+ enum BridgeDriver::Motors getMotor(){
+ return motor;
+ }
+
+};
+
+//A line consists of [ __(Local_Name)__ __(function)__ __(parameter1)__ __(parameter2)__ __(parameter3)__ ... and so on]
+int Motor::interpret(){
+ /*
+ lcd.cls(); //clear the display
+ lcd.setAddress(0,3);
+ lcd.printf("Test2 ");
+ lcd.setAddress(0,1);
+ lcd.printf("wrd1: %s", lineData.word[0]);
+ lcd.setAddress(0,2);
+ lcd.printf("wrd2: %s", lineData.word[1]);
+ wait(3);
+*/
+
+ char *firstWord = lineData.word[0]; //splits the str based on a space delimeter
+
+ if (strncmp(firstWord,"device", 6) == 0){
+ //Order of Line: Command, Local_Name, VOLTAGE_DRIVER, Channel(1,2,3,4,5,6,7,8)
+
+ if (lineData.numWords != 4){
+ //Error Check, incorrect number of parameter, error out
+ return 0;
+ }
+
+ char channel = *lineData.word[3]; //Parameter is a single character, so dereference the point to the word
+
+ switch (channel){
+ case 'A':
+ case 'a':
+ setMotor(BridgeDriver::MOTOR_A);
+ break;
+ case 'B':
+ case 'b':
+ setMotor(BridgeDriver::MOTOR_B);
+ break;
+ case 'C':
+ case 'c':
+ setMotor(BridgeDriver::MOTOR_C);
+ break;
+ case 'D':
+ case 'd':
+ setMotor(BridgeDriver::MOTOR_D);
+ break;
+ }
+ }
+
+ //if the first word is not "device" it means that it's trying to perform a function to a specific Motor
+ else{
+ //Order of Line: Local_Name, Function_Name, Param1, Param2, Param3,.......
+ char *localname = lineData.word[0]; //just for the sake of following the variable easily and understanding
+ char *func = lineData.word[1];
+
+ /******************************************************************************/
+ /*** <Func: enableBrake> ***/
+ /******************************************************************************/
+ if (strncmp(func,"enableBrake", 11) == 0){
+
+ if (lineData.numWords != 4){
+ //Error Check, incorrect number of parameter, error out
+ return 0;
+ }
+
+ //Initialize and Convert Parameters
+ char *enable = lineData.word[2];
+ int enableValue = atoi(enable);
+
+ bridges.enableBraking(getMotor(), enableValue);
+ }
+
+ /******************************************************************************/
+ /*** <Func: forceBrake> ***/
+ /******************************************************************************/
+ else if (strncmp(func,"forceBrake", 10) == 0){
+
+ if (lineData.numWords != 3){
+ //Error Check, incorrect number of parameter, error out
+ return 0;
+ }
+
+ bridges.forceBrake(getMotor());
+ }
+
+
+ /******************************************************************************/
+ /*** <Func: drive> ***/
+ /******************************************************************************/
+ else if (strncmp(func,"drive", 5) == 0){
+
+ if (lineData.numWords != 4){
+ //Error Check, incorrect number of parameter, error out
+ return 0;
+ }
+
+ //Initialize Parameters
+ char *speed = lineData.word[2];
+ char *dir = lineData.word[3];
+
+ //Initialize Convertion Variables if needed
+ float speedValue;
+ int dirValue = 0;
+
+ //Convert string to usable values
+ //NOTE both atof and atoi functions return 0 if no valid conversion could be performed
+ speedValue = atof(speed) / 100;
+
+ if (speedValue <= 0)
+ return 0; //Error Out because a value gives no functionality or is wrong
+
+ if (strncmp(dir,"CC", 2) == 0 || strncmp(dir,"cc", 2) == 0)
+ dirValue = -1; //Turn Clockwise
+ else if (strncmp(dir,"C", 1) == 0 || strncmp(dir,"c", 1) == 0)
+ dirValue = 1; //Turn CounterClockwise
+ else
+ return 0; //Error Out since the parameter is incorrect
+
+ bridges.drive(getMotor(), dirValue, speedValue); //Turn on the Motor
+ }
+ /******************************************************************************/
+ /**** <Func: off> ****/
+ /******************************************************************************/
+ else if (strncmp(func,"off", 3) == 0){
+
+ if (lineData.numWords != 2){
+ //Error Check, incorrect number of parameter, error out
+ return 0;
+ }
+
+ bridges.drive(getMotor(), 0, 0); //Turn off the Motor
+ }
+
+ else {
+ return 0;
+
+ }
+ }
+
+ return 1;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+