Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <DcsBios.h>
- #include <Servo.h>
- #include <LedControl.h>
- /* BEGIN 74HC165 SHIFT REGISTER PART */
- /* BEGIN DEFINE THE PINS CONNECTED TO THE ARDUINO FOR THE 74HC165 SHIFT REGISTERS */
- int ploadPin74HC165 = 2; // Connects to Parallel load pin the 165
- int dataPin74HC165 = 3; // Connects to the Q7 pin the 165
- int clockPin74HC165 = 4; // Connects to the Clock pin the 165
- //int clockEnablePin74HC165 = 5; // Connects to Clock Enable pin the 165 // NOT NEEDED SAVES A PIN
- /* END DEFINE THE PINS CONNECTED TO THE ARDUINO FOR THE 74HC165 SHIFT REGISTERS */
- /* BEGIN 74HC165 SHIFT REGISTER VARIABLES PART */
- unsigned long long pinValues = read_shift_regs(); // FIRST VARIABLE TO STORE THE BITS FROM THE FIRST SERIES OF SHIFT REGISTERS. 64BITS VARIABLE (LONG LONG)
- unsigned long long oldPinValues; // 64B VARIABLE FOR PREVIOUS STATE OF BITS FOR FIRST SERIES OF SHIFT REGISTERS
- unsigned long long pinValues2 = read_shift_regs2(); // SECOND VARIABLE TO STORE THE BITS FROM THE SECOND SERIES OF SHIFT REGISTERS. 64BITS VARIABLE (LONG LONG)
- unsigned long long oldPinValues2; // 64B VARIABLE FOR PREVIOUS STATE OF BITS FOR SECOND SERIES OF SHIFT REGISTERS
- /* END 74HC165 SHIFT REGISTER VARIABLES PART */
- // BEGIN INPUTS FOR 74HC165 SHIFT REGISTERS//
- /* INSERT THE CODE FOR INPUTS DIRECTLY FROM THE CONTROL REFERENCE. TO USE WITH SHIFT REGISTERS THE FOLLOWING MODIFICATIONS ARE NEEDED IN THE CONSTRUCTOR:
- - "SR" AFTER THE TYPE OF INPUT .
- - THE PINS USED BY YOUR SHIFT REGISTERS. O-7 FOR THE FIRST SHIFT REGISTER, 8-15 FOR THE SECOND AND SO ON. RESET THE COUNT OF PINS FOR EACH VARIABLE/SERIES OF IC (SO START AGAIN AT PIN 0 FOR THE FIRST PIN ON THE FIRST SHIFT REGISTER OF EACH VARIABLE)
- - POINT TO THE VARIABLE WHERE THE BITS ARE STORED.
- EXAMPLE:
- DEFAULT VERSION : DcsBios::Switch2Pos eppApuGenPwr("EPP_APU_GEN_PWR", PIN);
- SHIFT REGISTER VERSION : DcsBios::Switch2PosSR eppApuGenPwr("EPP_APU_GEN_PWR", 0, &VARIABLE_NAME ); // "Switch2PosSR" NOTICE THE "SR" AFTER THE DEFAULT "Switch2Pos". DIG0 (FIRST INPUT) ON THE SHIFT REGISTER. "VARIABLE_NAME" IS WHATEVER YOU'VE CALLED YOUR VARIABLE WHERE THE SHIFT REGISTER INFO IS STORED.
- SHIFT REGISTER VERSION : DcsBios::ActionButtonSR eppApuGenPwrToggle("EPP_APU_GEN_PWR", "TOGGLE", 1, &VARIABLE_NAME);
- RESET COUNT OF PINS EXAMPLE:
- FIRST VARIABLE : DcsBios::Switch2PosSR eppApuGenPwr("EPP_APU_GEN_PWR", 0, &VARIABLE_NAME_1 ) // THE SWITCH/BUTTON/WHATVER IS CONNECTED TO THE FIRST INPUT (DIG0) OF THE FIRST SHIFT REGISTER READ TO THE FIRST VARIABLE.
- SECOND VARIABLE : DcsBios::Switch2PosSR eppBatteryPwr("EPP_BATTERY_PWR", 0, &VARIABLE_NAME_2 ) // THE SWITCH/BUTTON/WHATVER IS CONNECTED TO THE FIRST INPUT (DIG0) OF THE FIRST SHIFT REGISTER READ TO THE SECOND VARIABLE. IF USING 64B VARIABLES, THIS IS THE 9TH SHIFT REGISTER.
- THIRD VARIABLE : DcsBios::Switch2PosSR eppAcGenPwrL("EPP_AC_GEN_PWR_L", 0, &VARIABLE_NAME_3 ) // THE SWITCH/BUTTON/WHATVER IS CONNECTED TO THE FIRST INPUT (DIG0) OF THE FIRST SHIFT REGISTER READ TO THE THIRD VARIABLE. IF USING 64B VARIABLES, THIS IS THE 17TH SHIFT REGISTER.
- */
- // BEGIN ROTARIES FOR RADIOS//
- //1. VHF AM//
- DcsBios::RotaryEncoderSR vhfamFreq1("VHFAM_FREQ1", "DEC", "INC",0, 1, &pinValues);
- DcsBios::RotaryEncoderSR vhfamFreq2("VHFAM_FREQ2", "DEC", "INC", 2, 3, &pinValues );
- DcsBios::RotaryEncoderSR vhfamFreq3("VHFAM_FREQ3", "DEC", "INC", 5, 6, &pinValues);
- DcsBios::RotaryEncoderSR vhfamFreq4("VHFAM_FREQ4", "DEC", "INC", 7, 8, &pinValues );
- //2. VHF FM//
- DcsBios::RotaryEncoderSR vhffmFreq1("VHFFM_FREQ1", "DEC", "INC", 9, 10, &pinValues );
- DcsBios::RotaryEncoderSR vhffmFreq2("VHFFM_FREQ2", "DEC", "INC", 11, 12, &pinValues );
- DcsBios::RotaryEncoderSR vhffmFreq3("VHFFM_FREQ3", "DEC", "INC", 13, 14, &pinValues );
- DcsBios::RotaryEncoderSR vhffmFreq4("VHFFM_FREQ4", "DEC", "INC", 16, 17, &pinValues );
- //3. UHF//
- DcsBios::RotaryEncoderSR uhf100mhzSel("UHF_100MHZ_SEL", "DEC", "INC", 18, 19, &pinValues );
- DcsBios::RotaryEncoderSR uhf10mhzSel("UHF_10MHZ_SEL", "DEC", "INC", 20, 21, &pinValues );
- DcsBios::RotaryEncoderSR uhf1mhzSel("UHF_1MHZ_SEL", "DEC", "INC", 22, 23, &pinValues );
- DcsBios::RotaryEncoderSR uhfPoint1mhzSel("UHF_POINT1MHZ_SEL", "DEC", "INC", 24, 25, &pinValues );
- DcsBios::RotaryEncoderSR uhfPoint25Sel("UHF_POINT25_SEL", "DEC", "INC", 26, 27, &pinValues );
- // END ROTARIES FOR RADIOS//
- // BEGIN OTHER INPUTS//
- DcsBios::Switch2PosSR efcpSpdbkEmerRetr("EFCP_SPDBK_EMER_RETR", 0, &pinValues2);
- DcsBios::Switch2PosSR efcpFlapsEmerRetr("EFCP_FLAPS_EMER_RETR", 1, &pinValues2);
- DcsBios::ActionButtonSR eppAcGenPwrLToggle("EPP_AC_GEN_PWR_L", "TOGGLE", 7, &pinValues2);
- DcsBios::ActionButtonSR eppAcGenPwrRToggle("EPP_AC_GEN_PWR_R", "TOGGLE", 8, &pinValues2);
- DcsBios::ActionButtonSR eppApuGenPwrToggle("EPP_APU_GEN_PWR", "TOGGLE", 9, &pinValues2);
- DcsBios::ActionButtonSR eppBatteryPwrToggle("EPP_BATTERY_PWR", "TOGGLE", 15, &pinValues2);
- DcsBios::ActionButtonSR eppEmerFloodToggle("EPP_EMER_FLOOD", "TOGGLE", 16, &pinValues2);
- DcsBios::Switch3PosSR eppInverter("EPP_INVERTER", 17, 23, &pinValues2);
- //DcsBios::ActionButtonSR efcpFlapsEmerRetrToggle("EFCP_FLAPS_EMER_RETR", "TOGGLE", 24);
- DcsBios::Switch3PosSR efcpAileronEmerDisengage("EFCP_AILERON_EMER_DISENGAGE", 24, 31, &pinValues2);
- DcsBios::Switch3PosSR efcpElevatorEmerDisengage("EFCP_ELEVATOR_EMER_DISENGAGE", 32, 39, &pinValues2);
- //DcsBios::ActionButtonSR efcpMrfcsToggle("EFCP_MRFCS", "TOGGLE", 40);
- //const byte efcpMrfcsPins[2] = {28, 29};
- //DcsBios::SwitchMultiPosSR efcpMrfcs("EFCP_MRFCS", efcpMrfcsPins, 2);
- const byte envcpAcOperPins[4] = {40, 41, 47, 48};
- DcsBios::SwitchMultiPosSR envcpAcOper("ENVCP_AC_OPER", envcpAcOperPins, 4, &pinValues2);
- // END OTHER INPUTS//
- // END INPUTS FOR 74HC165 SHIFT REGISTERS//
- // ********************** //
- /* BEGIN MAIN ROUTINES FOR 74HC165 SHIFT REGISTERS */
- /* BEGIN ROUTINE 1 */
- unsigned long long read_shift_regs() // ROUTINE FOR READING/STORING FIRST SERIES OF 74HC165 SHIFT REGISTERS. MAX 8 CHIPS. "LONG LONG" = 64BITS"
- {
- long long bitVal; // 64B VARIABLE FOR READING THE DATA
- unsigned long long bytesVal = 0; //64B VARIABLE FOR STORING THE DATA
- /* Trigger a parallel Load to latch the state of the data lines,
- */
- //digitalWrite(clockEnablePin, HIGH); // NOT NEEDED SAVES A PIN
- digitalWrite(ploadPin74HC165, LOW);
- delayMicroseconds(5);
- digitalWrite(ploadPin74HC165, HIGH);
- //digitalWrite(clockEnablePin, LOW); // NOT NEEDED SAVES A PIN
- /* Loop to read each bit value from the serial out line
- * of the SN74HC165N.
- */
- for(int i = 0; i < 112; i++) // I=0 AND < NUMBER OF TOTAL INPUTS NEEDED FOR ALL IC ROUTINES. SO MULTIPLY TOTAL NUMBER OF SHIFT REGISTERS IN THE CIRCUIT BY NUMBER OF INPUTS USED ON EACH (100 SHIFT REGISTERS X 8 = 800)
- {
- bitVal = digitalRead(dataPin74HC165);
- /* Set the corresponding bit in bytesVal.
- */
- bytesVal |= (bitVal << ((112-1) - i)); // NUMBER OF TOTAL INPUTS NEEDED - 1
- /* Pulse the Clock (rising edge shifts the next bit).
- */
- digitalWrite(clockPin74HC165, HIGH);
- delayMicroseconds(5);
- digitalWrite(clockPin74HC165, LOW);
- }
- return(bytesVal);
- }
- /* END ROUTINE 1 */
- /* BEGIN ROUTINE 2 */
- unsigned long long read_shift_regs2() // ROUTINE FOR READING/STORING SECOND SERIES OF 74HC165 SHIFT REGISTERS. MAX 8 CHIPS. "LONG LONG" = 64BITS". ADD MORE ROUTINES FOR MORE SERIES OF CHIPS
- {
- long long bitVal; // 64B VARIABLE FOR READING THE DATA
- unsigned long long bytesVal = 0; //64B VARIABLE FOR STORING THE DATA
- /* Trigger a parallel Load to latch the state of the data lines,
- */
- // digitalWrite(clockEnablePin74HC165, HIGH); // NOT NEEDED SAVES A PIN
- digitalWrite(ploadPin74HC165, LOW);
- delayMicroseconds(5);
- digitalWrite(ploadPin74HC165, HIGH);
- //digitalWrite(clockEnablePin, LOW); // NOT NEEDED SAVES A PIN
- /* Loop to read each bit value from the serial out line
- * of the SN74HC165N.
- */
- for(int i = 64; i < 112; i++) //I=64 (NUMBER OF BITS READ IN THE FIRST ROUTINE/SERIES OF CHIPS. SO IF USING 32B VARIABLE, I=32) AND < NUMBER OF TOTAL INPUTS NEEDED FOR ALL IC ROUTINES. SO MULTIPLY TOTAL NUMBER OF SHIFT REGISTERS IN THE CIRCUIT BY NUMBER OF INPUTS USED ON EACH (100 SHIFT REGISTERS X 8 = 800)
- {
- bitVal = digitalRead(dataPin74HC165);
- /* Set the corresponding bit in bytesVal.
- */
- bytesVal |= (bitVal << ((112-1) - i)); // NUMBER OF TOTAL INPUTS NEEDED - 1
- /* Pulse the Clock (rising edge shifts the next bit).
- */
- digitalWrite(clockPin74HC165, HIGH);
- delayMicroseconds(5);
- digitalWrite(clockPin74HC165, LOW);
- }
- return(bytesVal);
- }
- /* END ROUTINE 2 */
- /* END MAIN ROUTINES FOR 74HC165 SHIFT REGISTERS */
- /* END 74HC165 SHIFT REGISTER PART */
- /* BEGIN MAX 7219 PART */
- /* BEGIN MAX7219 PIN DEFINITION */
- LedControl lc=LedControl(10,9,8,3); // DATAIN TO ARDUINO PIN 10, CLOCK TO ARDUINO PIN 9, LOAD TO ARDUINO PIN 8, NUMBER OF MAX7219 USED = 3 MAX7219. CHANGE THESE ACCORDINGLY
- /* we always wait a bit between updates of the display */
- unsigned long delaytime=500;
- /* END MAX7219 PIN DEFINITION */
- /* BEGIN EXPORT TO 7SEG . FREQUENCIES WITH MORE THAN ONE BIT (DIGIT) ARE EXPORTED AS STRINGS AND GO HERE. 0-9 = 1BIT, 10-99 = 2BITS, 100-999 = 3BITS ETC*/
- /* VHF AM FREQUENCIES */
- // 1. VHF AM 1
- void onVhfamFreq1Change(char* newValue) {
- for(int i=0;i<2;i++) { //I< THE NUMBER OF BITS TO BE DISPLAYED.0-9 = 1BIT, 10-99 = 2BITS, 100-999 = 3BITS ETC. HERE I<NUMBER OF BITS SO I<2 BECAUSE VHF AM 1 CAN RANGE FROM 3-15
- lc.setChar(0,i,newValue[i],false); // THE MAX7219 TO USE, DIGIT NUMBER ON THE 7SEG DISPLAY, VALUE TO SHOW, DECIMAL POINT ON/OFF. DIGIT 1 AND 2 ON THE FIRST DISPLAY WILL BE USED TO SHOW THE 2BIT NUMBER EXPORTED
- }
- }
- DcsBios::StringBuffer<2> vhfamFreq1StrBuffer(0x1190, onVhfamFreq1Change);
- // 1. VHF AM 4
- void onVhfamFreq4Change(char* newValue) {
- for(int i=0;i<2;i++) { //I< THE NUMBER OF BITS TO BE DISPLAYED.0-9 = 1BIT, 10-99 = 2BITS, 100-999 = 3BITS ETC. HERE I<NUMBER OF BITS SO I<2 BECAUSE VHF AM 4 CAN RANGE FROM "00" "25" "50" "75"
- lc.setChar(0,i+4,newValue[i],false); // I+4 MEANS THAT DIGIT 5 AND 6 ON THE FIRST DISPLAY WILL BE USED TO SHOW THE 2BIT NUMBER EXPORTED
- }
- }
- DcsBios::StringBuffer<2> vhfamFreq4StrBuffer(0x1192, onVhfamFreq4Change);
- /* VHF FM FREQUENCIES */
- // 1. VHF FM 1
- void onVhffmFreq1Change(char* newValue) {
- for(int i=0;i<2;i++) { //I< THE NUMBER OF BITS TO BE DISPLAYED.0-9 = 1BIT, 10-99 = 2BITS, 100-999 = 3BITS ETC. HERE I<NUMBER OF BITS SO I<2 BECAUSE VHF FM 1 CAN RANGE FROM 3-15
- lc.setChar(1,i,newValue[i],false); // THE MAX7219 TO USE, DIGIT NUMBER ON THE 7SEG DISPLAY, VALUE TO SHOW, DECIMAL POINT ON/OFF. DIGIT 1 AND 2 ON THE SECOND DISPLAY WILL BE USED TO SHOW THE 2BIT NUMBER EXPORTED
- }
- }
- DcsBios::StringBuffer<2> vhffmFreq1StrBuffer(0x119a, onVhffmFreq1Change);
- // 2. VHF FM 4
- void onVhffmFreq4Change(char* newValue) {
- for(int i=0;i<2;i++) { //I< THE NUMBER OF BITS TO BE DISPLAYED.0-9 = 1BIT, 10-99 = 2BITS, 100-999 = 3BITS ETC. HERE I<NUMBER OF BITS SO I<2 BECAUSE VHF FM 4 CAN RANGE FROM "00" "25" "50" "75"
- lc.setChar(1,i+4,newValue[i],false); // I+4 MEANS THAT DIGIT 5 AND 6 ON THE SECOND DISPLAY WILL BE USED TO SHOW THE 2BIT NUMBER EXPORTED
- }
- }
- DcsBios::StringBuffer<2> vhffmFreq4StrBuffer(0x119e, onVhffmFreq4Change);
- /* UHF FREQUENCIES */
- // 1. UHF 1
- void onUhf100mhzSelChange(char* newValue) {
- for(int i=0;i<1;i++) { // 100MHZ SELECTOR IS EXPORTED AS STRING BECAUSE IT CONTAINS A POSSIBLE VALUE OF "A" THEREFORE CANNOT BE EXPORTED AS INTEGER AND MUST GO HERE. IT'S ONE BIT SO i<1
- lc.setChar(2,i,newValue[i],false); // THE MAX7219 TO USE, DIGIT NUMBER ON THE 7SEG DISPLAY, VALUE TO SHOW, DECIMAL POINT ON/OFF. DIGIT 1 WILL BE USED TO SHOW THE 1BIT NUMBER EXPORTED
- }
- }
- DcsBios::StringBuffer<1> uhf100mhzSelStrBuffer(0x1178, onUhf100mhzSelChange);
- // 2. UHF 5
- void onUhfPoint25SelChange(char* newValue) {
- for(int i=0;i<2;i++) { //I< THE NUMBER OF BITS TO BE DISPLAYED.0-9 = 1BIT, 10-99 = 2BITS, 100-999 = 3BITS ETC. HERE I<NUMBER OF BITS SO I<2 BECAUSE UHF .25MHZ CAN RANGE FROM "00" "25" "50" "75"
- lc.setChar(2,i+4,newValue[i],false); // I+4 MEANS THAT DIGIT 5 AND 6 ON THE THIRD DISPLAY WILL BE USED TO SHOW THE 2BIT NUMBER EXPORTED
- }
- }
- DcsBios::StringBuffer<2> uhfPoint25SelStrBuffer(0x117a, onUhfPoint25SelChange);
- /* END EXPORT TO 7SEG . FREQUENCIES WITH MORE THAN ONE BIT (DIGIT) ARE EXPORTED AS STRINGS AND GO HERE. 0-9 = 1BIT, 10-99 = 2BITS, 100-999 = 3BITS ETC*/
- /* END MAX 7219 PART */
- /* BEGIN 74HC595 SHIFT REGISTER PART */
- /* BEGIN DEFINE THE PINS CONNECTED TO THE ARDUINO FOR THE 74HC595 SHIFT REGISTERS */
- int latchPin74HC595 = 5; // 74HC595 LATCH PIN GOES TO ARDUINO PIN 5. CHANGE ACCORDINGLY!
- int clockPin74HC595 = 6; // 74HC595 CLOCK PIN GOES TO ARDUINO PIN 6. CHANGE ACCORDINGLY!
- int dataPin74HC595 = 7; // 74HC595 DATA PIN GOES TO ARDUINO PIN 7. CHANGE ACCORDINGLY!
- /* END DEFINE THE PINS CONNECTED TO THE ARDUINO FOR THE 74HC595 SHIFT REGISTERS */
- /* BEGIN 74HC595 SHIFT REGISTER VARIABLES PART */
- // EACH 74HC595 NEEDS A SEPARATE VARIABLE. WE HAVE THREE 74HC595 SO WE USE THREE VARIABLES.
- unsigned int leds =0;
- unsigned int leds2 =0;
- unsigned int leds3 =0;
- /* END 74HC595 SHIFT REGISTER VARIABLES PART */
- /* BEGIN OUTPTUS FOR 74HC595 SHIFT REGISTERS */
- /* INSERT THE CODE FOR OUTPTUS DIRECTLY FROM THE CONTROL REFERENCE. TO USE WITH SHIFT REGISTERS THE FOLLOWING MODIFICATIONS ARE NEEDED IN THE CONSTRUCTOR:
- - "SR" AFTER THE TYPE OF INPUT .
- - THE PINS USED BY YOUR SHIFT REGISTERS. O-7 FOR EACH 8BIT SHIFT REGISTER (SO START AGAIN AT PIN 0 FOR EACH SHIFT REGISTER AND EACH VARIABLE)
- - POINT TO THE VARIABLE WHERE THE BITS ARE STORED. REMEMBER THAT EACH 74HC595 NEEDS ITS OWN DIFFERENT VARIABLE!
- EXAMPLE:
- DEFAULT VERSION : DcsBios::LED canopyUnlocked(0x10da, 0x0004, PIN);;
- SHIFT REGISTER VERSION : DcsBios::LEDSR2 canopyUnlocked(0x10da, 0x0004, 0, &VARIABLE_NAME); // "LEDSR2" NOTICE THE "SR" AFTER THE DEFAULT "LED". '0' (FIRST OUTPUT) ON THE SHIFT REGISTER. "VARIABLE_NAME" IS WHATEVER YOU'VE CALLED YOUR VARIABLE WHERE THE SHIFT REGISTER INFO IS STORED.
- SHIFT REGISTER VERSION : DcsBios::LEDSR2 gunReady(0x1026, 0x8000, 2, &VARIABLE_NAME);
- RESET COUNT OF PINS EXAMPLE:
- FIRST VARIABLE : DcsBios::LEDSR2 gunReady(0x1026, 0x8000, 0, &VARIABLE_NAME_1); // THE LED IS CONNECTED TO THE FIRST OUTPUT (DIG0) OF THE FIRST SHIFT REGISTER AND THE FIRST VARIABLE.
- SECOND VARIABLE : DcsBios::LEDSR2 canopyUnlocked(0x10da, 0x0004, 0, &VARIABLE_NAME_2 ) // THE LED IS CONNECTED TO THE FIRST OUTPUT (DIG0) OF THE SECOND SHIFT REGISTER AND THE FIRST VARIABLE.
- THIRD VARIABLE : DcsBios::LEDSR2 handleGearWarning(0x1026, 0x4000, 0, &VARIABLE_NAME_3 ) // THE LED IS CONNECTED TO THE FIRST OUTPUT (DIG0) OF THE THIRD SHIFT REGISTER AND THE FIRST VARIABLE.
- */
- DcsBios::LEDSR2 gunReady(0x1026, 0x8000, 2, &leds);
- DcsBios::LEDSR2 canopyUnlocked(0x10da, 0x0004, 2, &leds2);
- DcsBios::LEDSR2 handleGearWarning(0x1026, 0x4000, 2, &leds3 );
- DcsBios::LEDSR2 masterCaution(0x1012, 0x0800, 4, &leds3);
- DcsBios::LEDSR2 oxyFlow(0x112a, 0x0800, 5, &leds3);
- //DcsBios::LEDSR lEngFire(0x10da, 0x0008, 2);
- //DcsBios::LEDSR rEngFire(0x10da, 0x0020, 3);
- DcsBios::LEDSR2 dvadrRec(0x11ba, 0x0080, 4, &leds);
- DcsBios::LEDSR2 gearLSafe(0x1026, 0x1000, 5, &leds2);
- DcsBios::LEDSR2 gearNSafe(0x1026, 0x0800, 6, &leds3);
- DcsBios::LEDSR2 gearRSafe(0x1026, 0x2000, 7, &leds);
- /* END OUTPTUS FOR 74HC595 SHIFT REGISTERS */
- /**** In most cases, you do not have to change anything below this line ****/
- /* Instantiate a ProtocolParser object to parse the DCS-BIOS export stream */
- DcsBios::ProtocolParser parser;
- void setup() {
- Serial.begin(115000); // DONT GO TOO FAST OR STRANGE THINGS WILL HAPPEN. REMEMBER TO SET MATCHING BAUD RATE IN DCSBIOS
- /* BEGIN 74HC165 PART */
- /* INITIALIZE 74HC165 SHIFT REGISTER ARDUINO PINS */
- pinMode(ploadPin74HC165, OUTPUT);
- // pinMode(clockEnablePin, OUTPUT); // NOT NEEDED SAVES A PIN
- pinMode(clockPin74HC165, OUTPUT);
- pinMode(dataPin74HC165, INPUT);
- digitalWrite(clockPin74HC165, LOW);
- digitalWrite(ploadPin74HC165, HIGH);
- /* Read in and display the pin states at startup.
- */
- pinValues = read_shift_regs(); // READ ONCE THE FIRST SERIES OF SHIFT REGISTERS (FIRST VARIABLE)
- oldPinValues = pinValues;
- pinValues2 = read_shift_regs2(); // READ ONCE THE SECOND SERIES OF SHIFT REGISTERS (SECOND VARIABLE)
- oldPinValues2 = pinValues2;
- /* END 74HC165 PART */
- /* BEGIN MAX7219 PART */
- /*
- The MAX72XX is in power-saving mode on startup,
- we have to do a wakeup call
- */
- /* FIRST MAX7219 */
- lc.shutdown(0,false);
- /* Set the brightness to a medium values. POSSIBLE VALUES 0-15 */
- lc.setIntensity(0,1);
- /* and clear the display */
- lc.clearDisplay(0);
- /* SECOND MAX7219 */
- lc.shutdown(1,false);
- /* Set the brightness to a medium values. POSSIBLE VALUES 0-15 */
- lc.setIntensity(1,1);
- /* and clear the display */
- lc.clearDisplay(1);
- /* THIRD MAX7219 */
- lc.shutdown(2,false);
- /* Set the brightness to a medium values. POSSIBLE VALUES 0-15 */
- lc.setIntensity(2,1);
- /* and clear the display */
- lc.clearDisplay(2);
- /* END MAX7219 PART */
- /* BEGIN 74HC595 PART */
- /* INITIALIZE 74HC595 SHIFT REGISTER ARDUINO PINS */
- pinMode(latchPin74HC595, OUTPUT);
- pinMode(dataPin74HC595, OUTPUT);
- pinMode(clockPin74HC595, OUTPUT);
- /* END 74HC595 PART */
- }
- /*
- Your main loop needs to pass data from the DCS-BIOS export
- stream to the parser object you instantiated above.
- It also needs to call DcsBios::PollingInput::pollInputs()
- to detect changes in the state of connected controls and
- pass them on to DCS.
- */
- void loop() {
- // feed incoming data to the parser
- while (Serial.available()) {
- parser.processChar(Serial.read());
- }
- // poll inputs
- DcsBios::PollingInput::pollInputs();
- /* BEGIN 74HC165 SHIFT REGISTER PART */
- /* ENTER HERE ALL THE READING ROUTINES NEEDED FOR THE SHIFT REGISTERS */
- pinValues = read_shift_regs(); // CONTINUOUSLY READ THE SHIFT REGISTER BITS IN THE FIRST SERIES OF IC TO THE FIRST VARIABLE
- oldPinValues = pinValues;
- pinValues2 = read_shift_regs2(); // CONTINUOUSLY READ THE SHIFT REGISTER BITS IN THE SECOND SERIES OF IC TO THE SECOND VARIABLE
- oldPinValues2 = pinValues2;
- /* END 74HC165 SHIFT REGISTER PART */
- }
- /*
- You need to define
- void sendDcsBiosMessage(const char* msg, const char* arg)
- so that the string msg, followed by a space, the string arg
- and a newline gets sent to the DCS-BIOS import stream.
- In this example we send it to the serial port, so you need to
- run socat to read the data from the serial port and send it
- over UDP to DCS-BIOS.
- If you are using an Ethernet Shield, you would probably want
- to send a UDP packet from this subroutine.
- */
- void sendDcsBiosMessage(const char* msg, const char* arg) {
- Serial.write(msg);
- Serial.write(' ');
- Serial.write(arg);
- Serial.write('\n');
- }
- /*
- This subroutine gets called every time a message is received
- from the export stream (you need to define it even if it
- does nothing).
- Use this to handle outputs which are not covered by the
- DcsBios Arduino library (e.g. displays).
- */
- void onDcsBiosWrite(unsigned int address, unsigned int value) {
- /* BEGIN MAX 7219 PART */
- /* BEGIN EXPORT TO 7SEG . FREQUENCIES WITH ONE BIT (DIGIT) ARE EXPORTED AS STRINGS AND GO HERE. 0-9 = 1BIT, 10-99 = 2BITS, 100-999 = 3BITS ETC*/
- /* VHF AM FREQUENCIES */
- // 1. VHF AM 2
- if (address == 0x118e) {
- unsigned int vhfamFreq2Value = (value & 0x00f0) >> 4;
- lc.setChar(0,2,vhfamFreq2Value,true); // THE MAX7219 TO USE, DIGIT NUMBER ON THE 7SEG DISPLAY, VALUE TO SHOW, DECIMAL POINT ON/OFF
- }
- // 2. VHF AM 3
- if (address == 0x118e) {
- unsigned int vhfamFreq3Value = (value & 0x0f00) >> 8;
- lc.setChar(0,3,vhfamFreq3Value,false); // THE MAX7219 TO USE, DIGIT NUMBER ON THE 7SEG DISPLAY, VALUE TO SHOW, DECIMAL POINT ON/OFF
- }
- /* VHF FM FREQUENCIES */
- // 1. VHF FM 2
- if (address == 0x119c) {
- unsigned int vhffmFreq2Value = (value & 0x000f) >> 0;
- lc.setChar(1,2,vhffmFreq2Value,true); // THE MAX7219 TO USE, DIGIT NUMBER ON THE 7SEG DISPLAY, VALUE TO SHOW, DECIMAL POINT ON/OFF
- }
- // 2. VHF FM 3
- if (address == 0x119c) {
- unsigned int vhffmFreq3Value = (value & 0x00f0) >> 4;
- lc.setChar(1,3,vhffmFreq3Value,false); // THE MAX7219 TO USE, DIGIT NUMBER ON THE 7SEG DISPLAY, VALUE TO SHOW, DECIMAL POINT ON/OFF
- }
- /* UHF FREQUENCIES */
- // 1. UHF 2
- if (address == 0x1170) {
- unsigned int uhf10mhzSelValue = (value & 0x3c00) >> 10;
- lc.setChar(2,1,uhf10mhzSelValue,false); // THE MAX7219 TO USE, DIGIT NUMBER ON THE 7SEG DISPLAY, VALUE TO SHOW, DECIMAL POINT ON/OFF
- }
- // 2. UHF 3
- if (address == 0x1178) {
- unsigned int uhf1mhzSelValue = (value & 0x0f00) >> 8;
- lc.setChar(2,2,uhf1mhzSelValue,false); // THE MAX7219 TO USE, DIGIT NUMBER ON THE 7SEG DISPLAY, VALUE TO SHOW, DECIMAL POINT ON/OFF
- }
- // 3. UHF 4
- if (address == 0x1178) {
- unsigned int uhfPoint1mhzSelValue = (value & 0xf000) >> 12;
- lc.setChar(2,3,uhfPoint1mhzSelValue,false); // THE MAX7219 TO USE, DIGIT NUMBER ON THE 7SEG DISPLAY, VALUE TO SHOW, DECIMAL POINT ON/OFF
- }
- /* END EXPORT TO 7SEG . FREQUENCIES WITH ONE BIT (DIGIT) ARE EXPORTED AS STRINGS AND GO HERE. 0-9 = 1BIT, 10-99 = 2BITS, 100-999 = 3BITS ETC*/
- /* END MAX 7219 PART */
- /* BEGIN 74HC595 SHIFT REGISTER PART */
- if (address == 0xfffe) {
- updateShiftRegister(); //CALL THE 74HC595 SHIFTOUT ROUTINE WHEN THE LAST DATA FOR EACH FRAME BY THE UPDATE COUNTER IS SENT OUT. ~30MS
- }
- /* END 74HC595 SHIFT REGISTER PART */
- }
- /* BEGIN SHIFTOUT FOR 74HC595 SHIFT REGISTER PART */
- void updateShiftRegister()
- {
- digitalWrite(latchPin74HC595, LOW);
- shiftOut(dataPin74HC595, clockPin74HC595, MSBFIRST, leds); // EACH 74HC595 AND VARIABLE NEEDS ITS OWN SHIFTOUT. MSBFIRST = SHIFT BITS FROM THE LEFT. LSBFIRST = SHIFT BITS FROM THE RIGHT
- shiftOut(dataPin74HC595, clockPin74HC595, MSBFIRST, leds2); // EACH 74HC595 AND VARIABLE NEEDS ITS OWN SHIFTOUT. MSBFIRST = SHIFT BITS FROM THE LEFT. LSBFIRST = SHIFT BITS FROM THE RIGHT
- shiftOut(dataPin74HC595, clockPin74HC595, MSBFIRST, leds3); // EACH 74HC595 AND VARIABLE NEEDS ITS OWN SHIFTOUT. MSBFIRST = SHIFT BITS FROM THE LEFT. LSBFIRST = SHIFT BITS FROM THE RIGHT
- digitalWrite(latchPin74HC595, HIGH);
- }
- /* END SHIFTOUT FOR 74HC595 SHIFT REGISTER PART */
Advertisement
Add Comment
Please, Sign In to add comment