Skip to content

Commit b5e839a

Browse files
add MODE_INPUT_PULLUP pin mode
1 parent 526fa5f commit b5e839a

File tree

8 files changed

+69
-13
lines changed

8 files changed

+69
-13
lines changed

Firmata.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,9 @@
8282
#define STEPPER 0x08 // pin configured for stepper motor
8383
#define ENCODER 0x09 // pin configured for rotary encoders
8484
#define MODE_SERIAL 0x0A // pin configured for serial communication
85+
#define MODE_INPUT_PULLUP 0x0B // enable internal pull-up resistor for pin
8586
#define IGNORE 0x7F // pin configured to be ignored by digitalWrite and capabilityResponse
86-
#define TOTAL_PIN_MODES 12
87+
#define TOTAL_PIN_MODES 13
8788

8889
extern "C" {
8990
// callback function types

examples/StandardFirmata/StandardFirmata.ino

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
2121
See file LICENSE.txt for further informations on licensing terms.
2222
23-
Last updated by Jeff Hoefs: October 24th, 2015
23+
Last updated by Jeff Hoefs: October 31st, 2015
2424
*/
2525

2626
#include <Servo.h>
@@ -243,7 +243,7 @@ void setPinModeCallback(byte pin, int mode)
243243
reportAnalogCallback(PIN_TO_ANALOG(pin), mode == ANALOG ? 1 : 0); // turn on/off reporting
244244
}
245245
if (IS_PIN_DIGITAL(pin)) {
246-
if (mode == INPUT) {
246+
if (mode == INPUT || mode == MODE_INPUT_PULLUP) {
247247
portConfigInputs[pin / 8] |= (1 << (pin & 7));
248248
} else {
249249
portConfigInputs[pin / 8] &= ~(1 << (pin & 7));
@@ -273,6 +273,13 @@ void setPinModeCallback(byte pin, int mode)
273273
pinConfig[pin] = INPUT;
274274
}
275275
break;
276+
case MODE_INPUT_PULLUP:
277+
if (IS_PIN_DIGITAL(pin)) {
278+
pinMode(PIN_TO_DIGITAL(pin), INPUT_PULLUP);
279+
pinConfig[pin] = MODE_INPUT_PULLUP;
280+
pinState[pin] = 1;
281+
}
282+
break;
276283
case OUTPUT:
277284
if (IS_PIN_DIGITAL(pin)) {
278285
digitalWrite(PIN_TO_DIGITAL(pin), LOW); // disable PWM
@@ -572,6 +579,8 @@ void sysexCallback(byte command, byte argc, byte *argv)
572579
if (IS_PIN_DIGITAL(pin)) {
573580
Firmata.write((byte)INPUT);
574581
Firmata.write(1);
582+
Firmata.write((byte)MODE_INPUT_PULLUP);
583+
Firmata.write(1);
575584
Firmata.write((byte)OUTPUT);
576585
Firmata.write(1);
577586
}

examples/StandardFirmataChipKIT/StandardFirmataChipKIT.ino

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
2222
See file LICENSE.txt for further informations on licensing terms.
2323
24-
Last updated by Jeff Hoefs: October 24th, 2015
24+
Last updated by Jeff Hoefs: October 31st, 2015
2525
*/
2626

2727
#include <SoftPWMServo.h> // Gives us PWM and Servo on every pin
@@ -254,7 +254,7 @@ void setPinModeCallback(byte pin, int mode)
254254
reportAnalogCallback(PIN_TO_ANALOG(pin), mode == ANALOG ? 1 : 0); // turn on/off reporting
255255
}
256256
if (IS_PIN_DIGITAL(pin)) {
257-
if (mode == INPUT) {
257+
if (mode == INPUT || mode == MODE_INPUT_PULLUP) {
258258
portConfigInputs[pin / 8] |= (1 << (pin & 7));
259259
} else {
260260
portConfigInputs[pin / 8] &= ~(1 << (pin & 7));
@@ -284,6 +284,13 @@ void setPinModeCallback(byte pin, int mode)
284284
pinConfig[pin] = INPUT;
285285
}
286286
break;
287+
case MODE_INPUT_PULLUP:
288+
if (IS_PIN_DIGITAL(pin)) {
289+
pinMode(PIN_TO_DIGITAL(pin), INPUT_PULLUP);
290+
pinConfig[pin] = MODE_INPUT_PULLUP;
291+
pinState[pin] = 1;
292+
}
293+
break;
287294
case OUTPUT:
288295
if (IS_PIN_DIGITAL(pin)) {
289296
digitalWrite(PIN_TO_DIGITAL(pin), LOW); // disable PWM
@@ -583,6 +590,8 @@ void sysexCallback(byte command, byte argc, byte *argv)
583590
if (IS_PIN_DIGITAL(pin)) {
584591
Firmata.write((byte)INPUT);
585592
Firmata.write(1);
593+
Firmata.write((byte)MODE_INPUT_PULLUP);
594+
Firmata.write(1);
586595
Firmata.write((byte)OUTPUT);
587596
Firmata.write(1);
588597
}

examples/StandardFirmataEthernet/StandardFirmataEthernet.ino

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
2121
See file LICENSE.txt for further informations on licensing terms.
2222
23-
Last updated by Jeff Hoefs: October 24th, 2015
23+
Last updated by Jeff Hoefs: October 31st, 2015
2424
*/
2525

2626
/*
@@ -359,7 +359,7 @@ void setPinModeCallback(byte pin, int mode)
359359
reportAnalogCallback(PIN_TO_ANALOG(pin), mode == ANALOG ? 1 : 0); // turn on/off reporting
360360
}
361361
if (IS_PIN_DIGITAL(pin)) {
362-
if (mode == INPUT) {
362+
if (mode == INPUT || mode == MODE_INPUT_PULLUP) {
363363
portConfigInputs[pin / 8] |= (1 << (pin & 7));
364364
} else {
365365
portConfigInputs[pin / 8] &= ~(1 << (pin & 7));
@@ -389,6 +389,13 @@ void setPinModeCallback(byte pin, int mode)
389389
pinConfig[pin] = INPUT;
390390
}
391391
break;
392+
case MODE_INPUT_PULLUP:
393+
if (IS_PIN_DIGITAL(pin)) {
394+
pinMode(PIN_TO_DIGITAL(pin), INPUT_PULLUP);
395+
pinConfig[pin] = MODE_INPUT_PULLUP;
396+
pinState[pin] = 1;
397+
}
398+
break;
392399
case OUTPUT:
393400
if (IS_PIN_DIGITAL(pin)) {
394401
digitalWrite(PIN_TO_DIGITAL(pin), LOW); // disable PWM
@@ -688,6 +695,8 @@ void sysexCallback(byte command, byte argc, byte *argv)
688695
if (IS_PIN_DIGITAL(pin)) {
689696
Firmata.write((byte)INPUT);
690697
Firmata.write(1);
698+
Firmata.write((byte)MODE_INPUT_PULLUP);
699+
Firmata.write(1);
691700
Firmata.write((byte)OUTPUT);
692701
Firmata.write(1);
693702
}

examples/StandardFirmataEthernetPlus/StandardFirmataEthernetPlus.ino

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
2121
See file LICENSE.txt for further informations on licensing terms.
2222
23-
Last updated by Jeff Hoefs: October 24th, 2015
23+
Last updated by Jeff Hoefs: October 31st, 2015
2424
*/
2525

2626
/*
@@ -449,7 +449,7 @@ void setPinModeCallback(byte pin, int mode)
449449
reportAnalogCallback(PIN_TO_ANALOG(pin), mode == ANALOG ? 1 : 0); // turn on/off reporting
450450
}
451451
if (IS_PIN_DIGITAL(pin)) {
452-
if (mode == INPUT) {
452+
if (mode == INPUT || mode == MODE_INPUT_PULLUP) {
453453
portConfigInputs[pin / 8] |= (1 << (pin & 7));
454454
} else {
455455
portConfigInputs[pin / 8] &= ~(1 << (pin & 7));
@@ -479,6 +479,13 @@ void setPinModeCallback(byte pin, int mode)
479479
pinConfig[pin] = INPUT;
480480
}
481481
break;
482+
case MODE_INPUT_PULLUP:
483+
if (IS_PIN_DIGITAL(pin)) {
484+
pinMode(PIN_TO_DIGITAL(pin), INPUT_PULLUP);
485+
pinConfig[pin] = MODE_INPUT_PULLUP;
486+
pinState[pin] = 1;
487+
}
488+
break;
482489
case OUTPUT:
483490
if (IS_PIN_DIGITAL(pin)) {
484491
digitalWrite(PIN_TO_DIGITAL(pin), LOW); // disable PWM
@@ -778,6 +785,8 @@ void sysexCallback(byte command, byte argc, byte *argv)
778785
if (IS_PIN_DIGITAL(pin)) {
779786
Firmata.write((byte)INPUT);
780787
Firmata.write(1);
788+
Firmata.write((byte)MODE_INPUT_PULLUP);
789+
Firmata.write(1);
781790
Firmata.write((byte)OUTPUT);
782791
Firmata.write(1);
783792
}

examples/StandardFirmataPlus/StandardFirmataPlus.ino

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
2121
See file LICENSE.txt for further informations on licensing terms.
2222
23-
Last updated by Jeff Hoefs: October 4th, 2015
23+
Last updated by Jeff Hoefs: October 31st, 2015
2424
*/
2525

2626
/*
@@ -377,7 +377,7 @@ void setPinModeCallback(byte pin, int mode)
377377
reportAnalogCallback(PIN_TO_ANALOG(pin), mode == ANALOG ? 1 : 0); // turn on/off reporting
378378
}
379379
if (IS_PIN_DIGITAL(pin)) {
380-
if (mode == INPUT) {
380+
if (mode == INPUT || mode == MODE_INPUT_PULLUP) {
381381
portConfigInputs[pin / 8] |= (1 << (pin & 7));
382382
} else {
383383
portConfigInputs[pin / 8] &= ~(1 << (pin & 7));
@@ -407,6 +407,13 @@ void setPinModeCallback(byte pin, int mode)
407407
pinConfig[pin] = INPUT;
408408
}
409409
break;
410+
case MODE_INPUT_PULLUP:
411+
if (IS_PIN_DIGITAL(pin)) {
412+
pinMode(PIN_TO_DIGITAL(pin), INPUT_PULLUP);
413+
pinConfig[pin] = MODE_INPUT_PULLUP;
414+
pinState[pin] = 1;
415+
}
416+
break;
410417
case OUTPUT:
411418
if (IS_PIN_DIGITAL(pin)) {
412419
digitalWrite(PIN_TO_DIGITAL(pin), LOW); // disable PWM
@@ -710,6 +717,8 @@ void sysexCallback(byte command, byte argc, byte *argv)
710717
if (IS_PIN_DIGITAL(pin)) {
711718
Firmata.write((byte)INPUT);
712719
Firmata.write(1);
720+
Firmata.write((byte)MODE_INPUT_PULLUP);
721+
Firmata.write(1);
713722
Firmata.write((byte)OUTPUT);
714723
Firmata.write(1);
715724
}

examples/StandardFirmataYun/StandardFirmataYun.ino

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
2222
See file LICENSE.txt for further informations on licensing terms.
2323
24-
Last updated by Jeff Hoefs: October 24th, 2015
24+
Last updated by Jeff Hoefs: October 31st, 2015
2525
*/
2626

2727
/*
@@ -255,7 +255,7 @@ void setPinModeCallback(byte pin, int mode)
255255
reportAnalogCallback(PIN_TO_ANALOG(pin), mode == ANALOG ? 1 : 0); // turn on/off reporting
256256
}
257257
if (IS_PIN_DIGITAL(pin)) {
258-
if (mode == INPUT) {
258+
if (mode == INPUT || mode == MODE_INPUT_PULLUP) {
259259
portConfigInputs[pin / 8] |= (1 << (pin & 7));
260260
} else {
261261
portConfigInputs[pin / 8] &= ~(1 << (pin & 7));
@@ -285,6 +285,13 @@ void setPinModeCallback(byte pin, int mode)
285285
pinConfig[pin] = INPUT;
286286
}
287287
break;
288+
case MODE_INPUT_PULLUP:
289+
if (IS_PIN_DIGITAL(pin)) {
290+
pinMode(PIN_TO_DIGITAL(pin), INPUT_PULLUP);
291+
pinConfig[pin] = MODE_INPUT_PULLUP;
292+
pinState[pin] = 1;
293+
}
294+
break;
288295
case OUTPUT:
289296
if (IS_PIN_DIGITAL(pin)) {
290297
digitalWrite(PIN_TO_DIGITAL(pin), LOW); // disable PWM
@@ -584,6 +591,8 @@ void sysexCallback(byte command, byte argc, byte *argv)
584591
if (IS_PIN_DIGITAL(pin)) {
585592
Firmata.write((byte)INPUT);
586593
Firmata.write(1);
594+
Firmata.write((byte)MODE_INPUT_PULLUP);
595+
Firmata.write(1);
587596
Firmata.write((byte)OUTPUT);
588597
Firmata.write(1);
589598
}

keywords.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ ONEWIRE LITERAL1
7171
STEPPER LITERAL1
7272
ENCODER LITERAL1
7373
MODE_SERIAL LITERAL1
74+
MODE_INPUT_PULLUP LITERAL1
7475
IGNORE LITERAL1
7576

7677
TOTAL_PINS LITERAL1

0 commit comments

Comments
 (0)