/****************************************************************************** * Initial() * * This subroutine performs all initializations of variables and registers. * It enables TMR1 and sets CCP1 for compare, and enables LoPri interrupts for * both. ******************************************************************************/ void Initial() { IOconfig(); SPIconfig(); CCPconfig(); LCDconfig(); ADCconfig(); USARTconfig(); TMRconfig(); INTconfig(); // Startup LEDs D6 = 0; //D6 Off D2 = 1; //D2 On Delay10KTCYx(125); //500ms Delay D2 = 0;//D2 Off D3 = 1;//D3 On Delay10KTCYx(125); //500ms Delay D3 = 0;//D3 Off D4 = 1;//D4 On Delay10KTCYx(125); //500ms Delay D4 = 0;//D4 Off }
void manageSerialSettings(void) { if(serialCmd.fingerNum != BLANK) { MYSERIAL.print("\n"); MYSERIAL.print("Finger "); MYSERIAL.println(serialCmd.fingerNum); MYSERIAL.print("Direction "); if(serialCmd.direction != BLANK) MYSERIAL.println(textString.open_close[serialCmd.direction]); else { int fingerDir = !finger[serialCmd.fingerNum].readDir(); MYSERIAL.println(textString.open_close[fingerDir]); } MYSERIAL.print("Stop Position "); if(serialCmd.stopPos != BLANK) MYSERIAL.println(serialCmd.stopPos); else MYSERIAL.println("None"); MYSERIAL.print("Speed "); if(serialCmd.speed != BLANK) MYSERIAL.println(serialCmd.speed); else MYSERIAL.println(finger[serialCmd.fingerNum].readTargetSpeed()); fingerControl(serialCmd.fingerNum, serialCmd.stopPos, serialCmd.direction, serialCmd.speed); } else if(serialCmd.gripNum != BLANK) { MYSERIAL.print("Grip "); MYSERIAL.println(textString.grips[serialCmd.gripNum]); MYSERIAL.print("Direction "); if(serialCmd.direction != BLANK) MYSERIAL.println(textString.open_close[serialCmd.direction]); else MYSERIAL.println("None"); MYSERIAL.print("Stop Position "); if(serialCmd.stopPos != BLANK) MYSERIAL.println(serialCmd.stopPos); else MYSERIAL.println((100 * serialCmd.direction)); MYSERIAL.print("Speed "); if(serialCmd.speed != BLANK) MYSERIAL.println(serialCmd.speed); else { int fingerToRead = (serialCmd.gripNum==THUMBSUP_GRIP)?FINGER0:FINGER1; MYSERIAL.println(finger[fingerToRead].readTargetSpeed()); } MYSERIAL.print("\n"); gripMovement(serialCmd.gripNum, serialCmd.stopPos, serialCmd.direction, serialCmd.speed); } else if(serialCmd.instructionsFlag != BLANK) { printInstructions(); } else if(serialCmd.advancedFlag != BLANK) { switch(serialCmd.advancedFlag) { case 0: // demo mode advancedSettings.demoFlag = !advancedSettings.demoFlag; // toggle flag demoFlag = advancedSettings.demoFlag; MYSERIAL.print("Demo mode toggled "); MYSERIAL.println(textString.off_on[advancedSettings.demoFlag]); // print ON/OFF break; case 1: // serial instructions advancedSettings.instructionsFlag = !advancedSettings.instructionsFlag; // toggle flag MYSERIAL.print("Initial serial instructions toggled "); MYSERIAL.println(textString.off_on[advancedSettings.instructionsFlag]); // print ON/OFF break; case 2: // muscle graph advancedSettings.muscleGraphFlag = !advancedSettings.muscleGraphFlag; // toggle flag MYSERIAL.print("Muscle graph mode toggled "); MYSERIAL.println(textString.off_on[advancedSettings.muscleGraphFlag]); // print ON/OFF break; case 3: // motor enable/disable advancedSettings.motorEnable = !advancedSettings.motorEnable; // toggle flag MYSERIAL.print("Motors "); MYSERIAL.println(textString.disabled_enabled[advancedSettings.motorEnable]); // print Disabled/Enabled for(int i=0;i<NUM_FINGERS;i++) { if(advancedSettings.motorEnable) finger[i].enableMotor(); else finger[i].disableMotor(); } break; case 5: // motors emergency stop stopMotors(); MYSERIAL.println("Stop Motors"); break; case 10: advancedSettings.researchFlag = !advancedSettings.researchFlag; MYSERIAL.print("Research mode 1 toggled "); MYSERIAL.println(textString.off_on[advancedSettings.researchFlag]); break; #ifdef HANDLE_EN case 11: advancedSettings.HANDle_en = !advancedSettings.HANDle_en; MYSERIAL.print("HANDle mode "); MYSERIAL.println(textString.disabled_enabled[advancedSettings.HANDle_en]); EEPROM_writeStruct(ADVANCED_CTRL_LOC, advancedSettings); break; case 12: toggleHANDleSerial(); break; #endif default: break; } EEPROM_writeStruct(ADVANCED_CTRL_LOC,advancedSettings); // save settings to EEPROM } else if(serialCmd.muscleCtrlFlag != BLANK) { switch(serialCmd.muscleCtrlFlag) { case -1: // default break; case 0: // muscle control off advancedSettings.muscleCtrlFlag = 0; MYSERIAL.println("Muscle control OFF "); digitalWrite(LED_KNUCKLE,LOW); // turn off muscle control LED in knuckle break; case 1: // standard muscle control advancedSettings.muscleCtrlFlag = 1; MYSERIAL.println("Standard muscle control ON"); digitalWrite(LED_KNUCKLE,HIGH); // turn on muscle control LED in knuckle break; case 2: // position muscle control advancedSettings.muscleCtrlFlag = 2; MYSERIAL.println("Muscle position control ON"); digitalWrite(LED_KNUCKLE,HIGH); // turn on muscle control LED in knuckle break; case 3: // print muscle readings if(advancedSettings.muscleCtrlFlag != 0) { printADCvals = !printADCvals; MYSERIAL.print("Display muscle readings "); MYSERIAL.println(textString.off_on[printADCvals]); // print ON/OFF } break; default: break; } EEPROM_writeStruct(ADVANCED_CTRL_LOC,advancedSettings); // store muscle mode in EEPROM } else if(serialCmd.handFlag != BLANK) // if 'H#' { if(serialCmd.handFlag != 0) { advancedSettings.handFlag = serialCmd.handFlag; IOconfig(); // reconfigure finger pins EEPROM_writeStruct(ADVANCED_CTRL_LOC,advancedSettings); // store hand in EEPROM } MYSERIAL.print("Hand is "); MYSERIAL.println(textString.right_left[advancedSettings.handFlag-1]); // print which hand is entered } else if(serialCmd.demoFlag == 0) // if 'D' { demoFlag = 1; MYSERIAL.println("Demo Mode"); MYSERIAL.println(" The hand is only responsive to serial commands\n at the end of each demo cycle"); } else if(serialCmd.sensitivityAdjust != BLANK) { if(serialCmd.sensitivityAdjust != 0) { userSettings.sensitivityOffset = serialCmd.sensitivityAdjust; EEPROM_writeStruct(USER_SETTINGS_LOC,userSettings); } MYSERIAL.print("Muscle sensor sensitivity "); MYSERIAL.println(userSettings.sensitivityOffset); } else if(serialCmd.noiseFloor != BLANK) { runNoiseFloorCalc(); } else if(serialCmd.holdTime != BLANK) { if(serialCmd.holdTime != 0) { userSettings.holdTime = serialCmd.holdTime; EEPROM_writeStruct(USER_SETTINGS_LOC,userSettings); } MYSERIAL.print("Grip change hold duration "); MYSERIAL.println(userSettings.holdTime); } // if research mode == 1, and no other command is recognised, use CSV string as target motor positions else if (advancedSettings.researchFlag == 1) // if 'A10' { researchMode_CSV_RX(serialCmd.cmdBuff); } clearAll(); // clear all serial commands (clear serialCmd.buffs) }