FSX switches, rotary encoders & continues buttons
Arduino reads on / off switches, rotary encoders and buttons when pressing continues I use this code to read switches for FSX
Components and supplies
1
Arduino Mega 2560
1
Toggle Switch, Toggle
1
Rotary Encoder with Push-Button
1
4PDT STOMP FOOT / PEDAL SWITCH LATCHING
Project description
Code
Code read all input switches, rotary encoders etc
csharp
Arduino code to read switches, rotary encoders etc
1//FSX Arduino connect with FSXAmphiConnect application 2// 3//ARDUINO No A 4// 5//digital switches and rotary encoder switches / buttons inputs 6 7const String ArduinoName = "A"; 8const int StartDigitalPin = 2; 9const int EndDigitalPin = 70; 10const int EncoderPinRotary38 = 38; 11const int EncoderPinRotary44 = 44; 12const int EncoderPinRotary42 = 42; 13const int EncoderPinRotary43 = 43; 14const int ContinuesButtonsPressed66 = 66; 15const int ContinuesButtonsPressed69 = 69; 16 17int LastButtonState[EndDigitalPin + EndDigitalPin]; 18int EncoderRotaryReaderState[EndDigitalPin + EndDigitalPin]; 19int ShowOnceNumberWhereIsNoPressed[EndDigitalPin + EndDigitalPin]; 20 21void setup() 22{ 23 for (int DigitalOutPin = StartDigitalPin; DigitalOutPin <= EndDigitalPin; DigitalOutPin++) 24 { 25 pinMode(DigitalOutPin, INPUT); 26 digitalWrite(DigitalOutPin, HIGH); 27 LastButtonState[DigitalOutPin] = HIGH; 28 ShowOnceNumberWhereIsNoPressed[DigitalOutPin] = LOW; 29 } 30 31 Serial.begin(115200); 32} 33 34void loop() 35{ 36 for (int DigitalOutPin = StartDigitalPin; DigitalOutPin <= EndDigitalPin; DigitalOutPin++) 37 { 38 //Encoder switch 38 or 44, 42 or 43 39 if (DigitalOutPin == EncoderPinRotary38 || DigitalOutPin == EncoderPinRotary44 || 40 DigitalOutPin == EncoderPinRotary42 || DigitalOutPin == EncoderPinRotary43) 41 { 42 //Encoder Rotary 43 ReadEncoderRotaryPin(DigitalOutPin); 44 } 45 else 46 { 47 if (DigitalOutPin == ContinuesButtonsPressed66 || DigitalOutPin == ContinuesButtonsPressed69) 48 { 49 //Switch Continues Buttons Pressed 50 ReadContinuesButtonsPressedPin(DigitalOutPin, digitalRead(DigitalOutPin), LOW); 51 } 52 else 53 { 54 //Switch Buttons on/off 55 ReadSwitchPin(DigitalOutPin, digitalRead(DigitalOutPin)); 56 } 57 } 58 } 59} 60 61void ReadEncoderRotaryPin(int SwitchPin) 62{ 63 int LastButtonStateNumber = SwitchPin; 64 int EncoderPinRotaryA; 65 int EncoderPinRotaryB; 66 67 if (SwitchPin == EncoderPinRotary38 || SwitchPin == EncoderPinRotary44) 68 { 69 EncoderPinRotaryA = EncoderPinRotary38; 70 EncoderPinRotaryB = EncoderPinRotary44; 71 } 72 if (SwitchPin == EncoderPinRotary42 || SwitchPin == EncoderPinRotary43) 73 { 74 EncoderPinRotaryA = EncoderPinRotary42; 75 EncoderPinRotaryB = EncoderPinRotary43; 76 } 77 78 EncoderRotaryReaderState[SwitchPin] = digitalRead(EncoderPinRotaryA); 79 80 if ((LastButtonState[SwitchPin] == HIGH) && (EncoderRotaryReaderState[SwitchPin] == LOW)) 81 { 82 if (digitalRead(EncoderPinRotaryB) == LOW) 83 { 84 PrintSwitchPinCode(EncoderPinRotaryB, 0); 85 delay(0); 86 } 87 else 88 { 89 PrintSwitchPinCode(EncoderPinRotaryA, 0); 90 delay(0); 91 } 92 } 93 LastButtonState[SwitchPin] = EncoderRotaryReaderState[SwitchPin]; 94} 95 96void ReadSwitchPin(int SwitchPin, int ButtonState) 97{ 98 if (LastButtonState[SwitchPin] == LOW && ButtonState == HIGH) 99 { 100 LastButtonState[SwitchPin] = ButtonState; 101 PrintSwitchPinCode(SwitchPin, ButtonState); 102 delay(150); 103 } 104 else 105 { 106 if (LastButtonState[SwitchPin] == HIGH && ButtonState == LOW) 107 { 108 LastButtonState[SwitchPin] = ButtonState; 109 PrintSwitchPinCode(SwitchPin, ButtonState); 110 delay(150); 111 } 112 } 113} 114 115void ReadContinuesButtonsPressedPin(int SwitchPin, int ButtonState, int NumberWhereIsNoPressed) 116{ 117 if (NumberWhereIsNoPressed == LOW && ButtonState == HIGH) 118 { 119 ShowOnceNumberWhereIsNoPressed[SwitchPin] = HIGH; 120 PrintSwitchPinCode(SwitchPin, ButtonState); 121 delay(10); 122 } 123 if (ShowOnceNumberWhereIsNoPressed[SwitchPin] == HIGH && ButtonState == LOW) 124 { 125 ShowOnceNumberWhereIsNoPressed[SwitchPin] = LOW; 126 PrintSwitchPinCode(SwitchPin, ButtonState); 127 delay(100); 128 } 129} 130 131void PrintSwitchPinCode(int SwitchPin, int ButtonState) 132{ 133 int PinLength = String(SwitchPin).length(); 134 135 Serial.print (ArduinoName); 136 if (PinLength == 1) 137 { 138 Serial.print ("0"); 139 } 140 Serial.print (SwitchPin); //Print the digital number 141 Serial.println (ButtonState); //Print the state after the digital number 142}
Code read all input switches, rotary encoders etc
csharp
Arduino code to read switches, rotary encoders etc
1//FSX Arduino connect with FSXAmphiConnect application 2// 3//ARDUINO 4 No A 5// 6//digital switches and rotary encoder switches / buttons inputs 7 8const 9 String ArduinoName = "A"; 10const int StartDigitalPin = 2; 11const int EndDigitalPin 12 = 70; 13const int EncoderPinRotary38 = 38; 14const int EncoderPinRotary44 = 44; 15const 16 int EncoderPinRotary42 = 42; 17const int EncoderPinRotary43 = 43; 18const int 19 ContinuesButtonsPressed66 = 66; 20const int ContinuesButtonsPressed69 = 69; 21 22int 23 LastButtonState[EndDigitalPin + EndDigitalPin]; 24int EncoderRotaryReaderState[EndDigitalPin 25 + EndDigitalPin]; 26int ShowOnceNumberWhereIsNoPressed[EndDigitalPin + EndDigitalPin]; 27 28void 29 setup() 30{ 31 for (int DigitalOutPin = StartDigitalPin; DigitalOutPin <= EndDigitalPin; 32 DigitalOutPin++) 33 { 34 pinMode(DigitalOutPin, INPUT); 35 digitalWrite(DigitalOutPin, 36 HIGH); 37 LastButtonState[DigitalOutPin] = HIGH; 38 ShowOnceNumberWhereIsNoPressed[DigitalOutPin] 39 = LOW; 40 } 41 42 Serial.begin(115200); 43} 44 45void loop() 46{ 47 48 for (int DigitalOutPin = StartDigitalPin; DigitalOutPin <= EndDigitalPin; DigitalOutPin++) 49 50 { 51 //Encoder switch 38 or 44, 42 or 43 52 if (DigitalOutPin == 53 EncoderPinRotary38 || DigitalOutPin == EncoderPinRotary44 || 54 DigitalOutPin 55 == EncoderPinRotary42 || DigitalOutPin == EncoderPinRotary43) 56 { 57 //Encoder 58 Rotary 59 ReadEncoderRotaryPin(DigitalOutPin); 60 } 61 else 62 63 { 64 if (DigitalOutPin == ContinuesButtonsPressed66 || DigitalOutPin == 65 ContinuesButtonsPressed69) 66 { 67 //Switch Continues Buttons Pressed 68 69 ReadContinuesButtonsPressedPin(DigitalOutPin, digitalRead(DigitalOutPin), 70 LOW); 71 } 72 else 73 { 74 //Switch Buttons on/off 75 76 ReadSwitchPin(DigitalOutPin, digitalRead(DigitalOutPin)); 77 } 78 79 } 80 } 81} 82 83void ReadEncoderRotaryPin(int SwitchPin) 84{ 85 int 86 LastButtonStateNumber = SwitchPin; 87 int EncoderPinRotaryA; 88 int EncoderPinRotaryB; 89 90 91 if (SwitchPin == EncoderPinRotary38 || SwitchPin == EncoderPinRotary44) 92 { 93 94 EncoderPinRotaryA = EncoderPinRotary38; 95 EncoderPinRotaryB = EncoderPinRotary44; 96 97 } 98 if (SwitchPin == EncoderPinRotary42 || SwitchPin == EncoderPinRotary43) 99 100 { 101 EncoderPinRotaryA = EncoderPinRotary42; 102 EncoderPinRotaryB = EncoderPinRotary43; 103 104 } 105 106 EncoderRotaryReaderState[SwitchPin] = digitalRead(EncoderPinRotaryA); 107 108 109 if ((LastButtonState[SwitchPin] == HIGH) && (EncoderRotaryReaderState[SwitchPin] 110 == LOW)) 111 { 112 if (digitalRead(EncoderPinRotaryB) == LOW) 113 { 114 PrintSwitchPinCode(EncoderPinRotaryB, 115 0); 116 delay(0); 117 } 118 else 119 { 120 PrintSwitchPinCode(EncoderPinRotaryA, 121 0); 122 delay(0); 123 } 124 } 125 LastButtonState[SwitchPin] = EncoderRotaryReaderState[SwitchPin]; 126} 127 128void 129 ReadSwitchPin(int SwitchPin, int ButtonState) 130{ 131 if (LastButtonState[SwitchPin] 132 == LOW && ButtonState == HIGH) 133 { 134 LastButtonState[SwitchPin] = ButtonState; 135 136 PrintSwitchPinCode(SwitchPin, ButtonState); 137 delay(150); 138 } 139 140 else 141 { 142 if (LastButtonState[SwitchPin] == HIGH && ButtonState == LOW) 143 144 { 145 LastButtonState[SwitchPin] = ButtonState; 146 PrintSwitchPinCode(SwitchPin, 147 ButtonState); 148 delay(150); 149 } 150 } 151} 152 153void ReadContinuesButtonsPressedPin(int 154 SwitchPin, int ButtonState, int NumberWhereIsNoPressed) 155{ 156 if (NumberWhereIsNoPressed 157 == LOW && ButtonState == HIGH) 158 { 159 ShowOnceNumberWhereIsNoPressed[SwitchPin] 160 = HIGH; 161 PrintSwitchPinCode(SwitchPin, ButtonState); 162 delay(10); 163 164 } 165 if (ShowOnceNumberWhereIsNoPressed[SwitchPin] == HIGH && ButtonState == 166 LOW) 167 { 168 ShowOnceNumberWhereIsNoPressed[SwitchPin] = LOW; 169 PrintSwitchPinCode(SwitchPin, 170 ButtonState); 171 delay(100); 172 } 173} 174 175void PrintSwitchPinCode(int 176 SwitchPin, int ButtonState) 177{ 178 int PinLength = String(SwitchPin).length(); 179 180 181 Serial.print (ArduinoName); 182 if (PinLength == 1) 183 { 184 Serial.print 185 ("0"); 186 } 187 Serial.print (SwitchPin); //Print the digital 188 number 189 Serial.println (ButtonState); //Print the state after the digital 190 number 191}
Downloadable files
schematic_yBffllcRIC.JPG
schematic_yBffllcRIC.JPG
Comments
Only logged in users can leave comments