Dateien nach "/" hochladen
This commit is contained in:
parent
c2032cd261
commit
a3f6275014
|
@ -0,0 +1,140 @@
|
|||
#ifndef DVT_CMDHANDLERCLASS_H
|
||||
#define DVT_CMDHANDLERCLASS_H
|
||||
|
||||
#include "DVT_GantryClass.h"
|
||||
#include "DVT_VariacClass.h"
|
||||
#include "DVT_MainClass.h"
|
||||
#include "DVT_EncoderClass.h"
|
||||
#include "DVT_FilamentClass.h"
|
||||
#include "DVT_XRayClass.h"
|
||||
|
||||
typedef struct {
|
||||
String Name;
|
||||
int Value;
|
||||
bool unknown;
|
||||
int ID;
|
||||
} cmd_t;
|
||||
|
||||
class CommandHandler{
|
||||
private:
|
||||
String cmdList[13];
|
||||
public:
|
||||
CommandHandler(String cmdList[13]){
|
||||
for (int i = 0; i < sizeof(commandList) / sizeof(*commandList); i++) {
|
||||
this->cmdList[i] = commandList[i];
|
||||
}
|
||||
}
|
||||
void issueOrder(cmd_t cmd);
|
||||
void Recognize(String cmdstr);
|
||||
String GetCommandByID(int ID);
|
||||
cmd_t lastCommand;
|
||||
};
|
||||
|
||||
CommandHandler cmds = CommandHandler(commandList);
|
||||
#endif
|
||||
|
||||
void CommandHandler::issueOrder(cmd_t cmd){
|
||||
debugMSG("issueOrder");
|
||||
|
||||
switch (cmd.ID) {
|
||||
case PULS:
|
||||
CONTROLMSG("Command : " + cmd.Name + " Value : " + String(cmd.Value));
|
||||
ENCODE.SetPos(cmd.Value);
|
||||
break;
|
||||
case ANGL:
|
||||
CONTROLMSG("Command : " + cmd.Name + " Value : " + String(cmd.Value));
|
||||
ENCODE.SetPos(cmd.Value * ENCODE.puls_per_angle);
|
||||
break;
|
||||
case SPCL:
|
||||
CONTROLMSG("Command : " + cmd.Name + " Value : " + String(cmd.Value));
|
||||
GANTRY.SetClSpeed(cmd.Value);
|
||||
break;
|
||||
case SPCC:
|
||||
CONTROLMSG("Command : " + cmd.Name + " Value : " + String(cmd.Value));
|
||||
GANTRY.SetCcSpeed(cmd.Value);
|
||||
break;
|
||||
case RES:
|
||||
CONTROLMSG("Command : " + cmd.Name + " Value : " + String(cmd.Value));
|
||||
ENCODE.Reset();
|
||||
break;
|
||||
case VARF:
|
||||
CONTROLMSG("Command : " + cmd.Name + " Value : " + String(cmd.Value));
|
||||
break;
|
||||
case VARB:
|
||||
CONTROLMSG("Command : " + cmd.Name + " Value : " + String(cmd.Value));
|
||||
break;
|
||||
case TEST:
|
||||
CONTROLMSG("Command : " + cmd.Name + " Value : " + String(cmd.Value));
|
||||
sysMSG(ENCODE.GetEncoderPos());
|
||||
break;
|
||||
case RXON:
|
||||
XRAY.SetTime(cmd.Value);
|
||||
XRAY.Signal();
|
||||
CONTROLMSG("Command : " + cmd.Name + " Value : " + String(cmd.Value));
|
||||
break;
|
||||
case STFI:
|
||||
CONTROLMSG("Command : " + cmd.Name + " Value : " + String(cmd.Value));
|
||||
FILAMENT.SetFilamentState(cmd.Value);
|
||||
break;
|
||||
case RXSH:
|
||||
CONTROLMSG("Command : " + cmd.Name + " Value : " + String(cmd.Value));
|
||||
break;
|
||||
case SCAN:
|
||||
CONTROLMSG("Command : " + cmd.Name + " Value : " + String(cmd.Value));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CommandHandler::Recognize(String cmdstr){
|
||||
cmd_t cmdbuffer;
|
||||
debugMSG("CommandRecognize");
|
||||
cmdstr.toUpperCase();
|
||||
cmdstr.replace("\n", "");
|
||||
|
||||
if (cmdstr.indexOf(';') > 0) {
|
||||
cmdbuffer.Name = cmdstr.substring(0, cmdstr.indexOf(';'));
|
||||
cmdbuffer.Value = cmdstr.substring(cmdstr.indexOf(';') + 1).toInt();
|
||||
} else {
|
||||
cmdbuffer.Name = cmdstr;
|
||||
cmdbuffer.Value = 0;
|
||||
}
|
||||
|
||||
for (int i = 0; i < sizeof(cmdList) / sizeof(*cmdList); i++) {
|
||||
if (cmdbuffer.Name == cmdList[i]) {
|
||||
cmdbuffer.unknown = false;
|
||||
cmdbuffer.ID = i;
|
||||
break;
|
||||
} else {
|
||||
cmdbuffer.unknown = true;
|
||||
}
|
||||
}
|
||||
|
||||
this->lastCommand = cmdbuffer;
|
||||
debugMSG("Command Name : " + this->lastCommand.Name);
|
||||
debugMSG("Command Value : " + String(this->lastCommand.Value));
|
||||
|
||||
switch (lastCommand.unknown) {
|
||||
case 0:
|
||||
debugMSG("Available");
|
||||
break;
|
||||
case 1:
|
||||
debugMSG("Unknown Command");
|
||||
break;
|
||||
};
|
||||
|
||||
debugMSG(' ');
|
||||
if (this->lastCommand.unknown) {
|
||||
CONTROLMSG("Available Commandlist :");
|
||||
for (int i = 0; i < sizeof(this->cmdList) / sizeof(*this->cmdList); i++) {
|
||||
CONTROLMSG(this->cmdList[i]);
|
||||
}
|
||||
CONTROLMSG(' ');
|
||||
} else {
|
||||
this->issueOrder(this->lastCommand);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
String CommandHandler::GetCommandByID(int ID){
|
||||
return this->cmdList[ID];
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
#ifndef DVT_ENCODERCLASS_H
|
||||
#define DVT_ENCODERCLASS_H
|
||||
|
||||
|
||||
#include "DVT_Types.h"
|
||||
#include "DVT_MainClass.h"
|
||||
#include "DVT_GantryClass.h"
|
||||
|
||||
|
||||
long CurEncoderPos;
|
||||
long NewEncoderPos;
|
||||
|
||||
void IRAM_ATTR ISREncoderSteps() {
|
||||
if (NewEncoderPos > CurEncoderPos)
|
||||
{
|
||||
if (NewEncoderPos - 5000 <= CurEncoderPos) {
|
||||
//GANTRY.SetCcSpeed(NtCcSpeedSlow);
|
||||
} else {
|
||||
GANTRY.SetCcSpeed(NtCcSpeed);
|
||||
}
|
||||
CurEncoderPos++;
|
||||
}
|
||||
else if (NewEncoderPos < CurEncoderPos)
|
||||
{
|
||||
if (NewEncoderPos + 5000 >= CurEncoderPos) {
|
||||
//GANTRY.SetCcSpeed(NtClSpeedSlow);
|
||||
} else {
|
||||
GANTRY.SetCcSpeed(NtClSpeed);
|
||||
}
|
||||
CurEncoderPos--;
|
||||
}
|
||||
else
|
||||
{
|
||||
detachInterrupt(ENCODER.GetPin());
|
||||
GANTRY.Stop();
|
||||
}
|
||||
}
|
||||
|
||||
void IRAM_ATTR ISREncoderSwitch() {
|
||||
sysMSG("ISREncoderSwitch Trigger" + String(CurEncoderPos));
|
||||
CurEncoderPos = 0;
|
||||
}
|
||||
|
||||
class Encoder {
|
||||
public:
|
||||
Encoder(long CurPos) {
|
||||
CurEncoderPos = CurPos;
|
||||
attachInterrupt(INDUCT_SWITCH.GetPin(), ISREncoderSwitch, RISING);
|
||||
}
|
||||
void SetPos(int Pos) {
|
||||
GANTRY.Start();
|
||||
NewEncoderPos = Pos;
|
||||
debugMSG("Pos : " + String(NewEncoderPos));
|
||||
if (CurEncoderPos > NewEncoderPos) {
|
||||
GANTRY.CcRotation();
|
||||
} else {
|
||||
GANTRY.ClRotation();
|
||||
}
|
||||
attachInterrupt(ENCODER.GetPin(), ISREncoderSteps, RISING);
|
||||
}
|
||||
|
||||
int GetEncoderPos() {
|
||||
debugMSG("CurEncoderPos : " + String(CurEncoderPos));
|
||||
return CurEncoderPos;
|
||||
}
|
||||
void Reset() {
|
||||
CurEncoderPos = -1;
|
||||
}
|
||||
|
||||
|
||||
double puls_per_angle = 113108 / 360;
|
||||
};
|
||||
|
||||
Encoder ENCODE = Encoder(0);
|
||||
|
||||
#endif
|
|
@ -0,0 +1,53 @@
|
|||
#ifndef DVT_MAINCLASS_H
|
||||
#define DVT_MAINCLASS_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <analogWrite.h>
|
||||
#include "DVT_Types.h"
|
||||
|
||||
class Pin {
|
||||
private:
|
||||
byte pin;
|
||||
byte pinMODE;
|
||||
DVT_State_t pinSTATE;
|
||||
public:
|
||||
Pin(byte pin, byte pinMODE, bool pinSTATE) {
|
||||
this->pin = pin;
|
||||
this->pinMODE = pinMODE;
|
||||
this->pinSTATE.State = pinSTATE;
|
||||
|
||||
pinMode(pin, pinMODE);
|
||||
if (this->pinMODE == OUTPUT)
|
||||
digitalWrite(this->pin, this->pinSTATE.State);
|
||||
}
|
||||
void SetState(bool pinSTATE){
|
||||
digitalWrite(this->pin, pinSTATE);
|
||||
}
|
||||
void SetAnalogState(int pinSTATE){
|
||||
analogWrite(this->pin,pinSTATE);
|
||||
}
|
||||
bool GetState() {
|
||||
return this->pinSTATE.State;
|
||||
}
|
||||
bool ReadState(){
|
||||
return digitalRead(this->pin);
|
||||
}
|
||||
byte GetPin(){
|
||||
return this->pin;
|
||||
}
|
||||
};
|
||||
|
||||
Pin INDUCT_SWITCH = Pin(PIN_INDUCT_SWITCH,INPUT,LOW);
|
||||
Pin ENCODER = Pin(PIN_ENCODER,INPUT,LOW);
|
||||
Pin VARIAC_LIMIT_BACK = Pin(PIN_VARIAC_LIMIT_BACK,INPUT,LOW);
|
||||
Pin VARIAC_LIMIT_FOR = Pin(PIN_VARIAC_LIMIT_FOR,INPUT,LOW);
|
||||
Pin ARM_STOP = Pin(PIN_ARM_STOP,OUTPUT,LOW);
|
||||
Pin ARM_SPEED = Pin(PIN_ARM_SPEED,OUTPUT,LOW);
|
||||
Pin ARM_DIRECT = Pin(PIN_ARM_DIRECT,OUTPUT,HIGH);
|
||||
Pin STEPMOTOR_ABLE = Pin(PIN_STEPMOTOR_ABLE,OUTPUT,HIGH);
|
||||
Pin STEPMOTOR_DIRECT = Pin(PIN_STEPMOTOR_DIRECT,OUTPUT,HIGH);
|
||||
Pin STEPMOTOR_CLOCK = Pin(PIN_STEPMOTOR_CLOCK,OUTPUT,HIGH);
|
||||
Pin XRAY_SWITCH = Pin(PIN_XRAY,OUTPUT,LOW);
|
||||
Pin FILAMENT_SWITCH = Pin(PIN_FILAMENT_SWITCH,OUTPUT,LOW);
|
||||
|
||||
#endif
|
|
@ -0,0 +1,9 @@
|
|||
#ifndef DVT_TYPES_H
|
||||
#define DVT_TYPES_H
|
||||
|
||||
typedef struct {
|
||||
bool State;
|
||||
long Time;
|
||||
}DVT_State_t;
|
||||
|
||||
#endif
|
|
@ -0,0 +1,35 @@
|
|||
#include "DVT_CmdHandlerClass.h"
|
||||
#include "DVT_EncoderClass.h"
|
||||
#include "DVT_FilamentClass.h"
|
||||
#include "DVT_XRayClass.h"
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
|
||||
CONTROLMSG(' ');
|
||||
CONTROLMSG("#DVT Control");
|
||||
CONTROLMSG(' ');
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
long shuffle=0;
|
||||
bool Status=false;
|
||||
|
||||
void TESTSignal(){
|
||||
if (millis() >= shuffle){
|
||||
Status = !Status;
|
||||
digitalWrite(PIN_STEPMOTOR_DIRECT,Status);
|
||||
shuffle+=10;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void loop() {
|
||||
while (Serial.available()) {
|
||||
cmds.Recognize(Serial.readString());
|
||||
}
|
||||
XRAY.RunTime();
|
||||
FILAMENT.Heated();
|
||||
}
|
Loading…
Reference in New Issue