Last active
October 9, 2020 20:17
-
-
Save nmaupu/16f648cbfe8f119de1d80a90b94431f4 to your computer and use it in GitHub Desktop.
trim wheel arduino test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Using Spad.next serial capabilities | |
#include <CmdMessenger.h> // CmdMessenger | |
#include <stdio.h> | |
#define GUID "{65472db3-e462-4525-9a40-3eb584dd14c8}" | |
#define CMD_REQUEST 0 | |
#define CMD_COMMAND 1 | |
#define CMD_EVENT 2 | |
#define CMD_DEBUG 3 | |
#define CMD_SIM_COMMAND 4 | |
#define CMD_TRIM_UP 10 | |
#define CMD_TRIM_DN 11 | |
#define ROTARY_PIN_A 2 | |
#define ROTARY_PIN_B 4 | |
#define ROTARY_SWITCH 3 | |
#define ELEV_TRIM_INCREMENT 75 | |
#define MAX_ELEV_TRIM 16384 | |
#define MIN_ELEV_TRIM -16384 | |
CmdMessenger messenger(Serial); | |
bool isReady = false; | |
char buf[64]; | |
volatile int elevTrim = 0; | |
volatile byte flag = 0; | |
void rotaryProcessing(); | |
void switchProcessing(); | |
void attachCommandCallbacks(); | |
void setup() { | |
// put your setup code here, to run once: | |
Serial.begin(115200); | |
pinMode(ROTARY_PIN_A, INPUT_PULLUP); | |
pinMode(ROTARY_PIN_B, INPUT); | |
pinMode(ROTARY_SWITCH, INPUT_PULLUP); | |
attachInterrupt(digitalPinToInterrupt(ROTARY_PIN_A), rotaryProcessing, FALLING); | |
attachInterrupt(digitalPinToInterrupt(ROTARY_SWITCH), switchProcessing, FALLING); | |
attachCommandCallbacks(); | |
// Setting trim to zero | |
messenger.sendCmdStart(CMD_SIM_COMMAND); | |
messenger.sendCmdArg("SIMCONNECT:ELEVATOR_TRIM_SET"); | |
messenger.sendCmdArg(elevTrim); | |
messenger.sendCmdEnd(); | |
} | |
void loop() { | |
// Process incoming serial data, and perform callbacks | |
messenger.feedinSerialData(); | |
if(flag) { // Interrupt occurred | |
messenger.sendCmdStart(CMD_SIM_COMMAND); | |
messenger.sendCmdArg("SIMCONNECT:ELEVATOR_TRIM_SET"); | |
messenger.sendCmdArg(elevTrim); | |
messenger.sendCmdEnd(); | |
flag = 0; | |
} | |
} | |
void rotaryProcessing() { | |
// pin A is falling to zero | |
byte bState = digitalRead(ROTARY_PIN_B); | |
if(bState == 0) { | |
// CW | |
elevTrim += ELEV_TRIM_INCREMENT; | |
} else if(bState == 1) { | |
// CCW | |
elevTrim -= ELEV_TRIM_INCREMENT; | |
} | |
if(elevTrim >= MAX_ELEV_TRIM) { | |
elevTrim = MAX_ELEV_TRIM; | |
} else if(elevTrim <= MIN_ELEV_TRIM) { | |
elevTrim = MIN_ELEV_TRIM; | |
} | |
flag = 1; | |
} | |
void switchProcessing() { | |
sprintf(buf, "Switch clicked"); | |
messenger.sendCmd(CMD_DEBUG, buf); | |
} | |
void attachCommandCallbacks() { | |
messenger.attach(onUnknownCommand); | |
messenger.attach(CMD_REQUEST, onIdentifyRequest); | |
messenger.attach(CMD_TRIM_UP, onTrimUp); | |
messenger.attach(CMD_TRIM_DN, onTrimDn); | |
} | |
void onUnknownCommand() { | |
messenger.sendCmd(CMD_DEBUG, "Unknown command"); | |
} | |
void onIdentifyRequest() { | |
char*szReq = messenger.readStringArg(); | |
if(strcmp("INIT", szReq) == 0) { | |
messenger.sendCmdStart(CMD_REQUEST); | |
messenger.sendCmdArg("SPAD"); | |
messenger.sendCmdArg(F(GUID)); | |
messenger.sendCmdArg("Arduino trim wheel"); | |
messenger.sendCmdEnd(); | |
return; | |
} | |
if(strcmp("PING", szReq) == 0) { | |
messenger.sendCmdStart(CMD_REQUEST); | |
messenger.sendCmdArg("PONG"); | |
messenger.sendCmdArg(messenger.readInt32Arg()); | |
messenger.sendCmdEnd(); | |
return; | |
} | |
if(strcmp("CONFIG", szReq) == 0) { | |
messenger.sendCmdStart(CMD_COMMAND); | |
messenger.sendCmdArg("SUBSCRIBE"); | |
messenger.sendCmdArg(CMD_TRIM_DN); | |
messenger.sendCmdArg("SIMCONNECT:ELEV_TRIM_DN"); | |
messenger.sendCmdEnd(); | |
messenger.sendCmdStart(CMD_COMMAND); | |
messenger.sendCmdArg("SUBSCRIBE"); | |
messenger.sendCmdArg(CMD_TRIM_UP); | |
messenger.sendCmdArg("SIMCONNECT:ELEV_TRIM_UP"); | |
messenger.sendCmdEnd(); | |
// tell SPAD.neXT we are done with config | |
messenger.sendCmd(CMD_REQUEST, "CONFIG"); | |
isReady = true; | |
return; | |
} | |
} | |
void onTrimUp() { | |
int32_t val = messenger.readInt32Arg(); | |
sprintf(buf, "%010d", val); | |
messenger.sendCmd(CMD_DEBUG, buf); | |
} | |
void onTrimDn() { | |
int32_t val = messenger.readInt32Arg(); | |
sprintf(buf, "%10d", val); | |
messenger.sendCmd(CMD_DEBUG, buf); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment