Skip to content

Raspberry Pi Pico pinMode question. #1101

Description

@NormanDunbar

Apologies if I'm talking rubbish here, however....

The .arduno15/packages/arduino/hardware/mbed_rp2040/4.4.1/variants/RASPBERRY_PI_PICO/pinmode_arduino.h file defines the following enumeration for the allowable pin modes. I have added comments to show the actual values the enumeration entries represent.

typedef enum {
/* 0 */     PullNone          = TempPullNone,
/* 1 */     PullUp            = TempPullUp,
/* 2 */     PullDown          = TempPullDown,
/* 3 */     OpenDrainPullUp   = TempOpenDrainPullUp,
/* 4 */     OpenDrainNoPull   = TempOpenDrainNoPull,
/* 5 */     OpenDrainPullDown = TempOpenDrainPullDown,
/* 0 */     PushPullNoPull    = TempPushPullNoPull,
/* 1 */     PushPullPullUp    = TempPushPullPullUp,
/* 2 */     PushPullPullDown  = TempPushPullPullDown,
/* 3 */     OpenDrain         = TempOpenDrain,
/* 0 */     PullDefault       = TempPullDefault,
/* 0 */     INPUT = TempINPUT,
/* 1 */     OUTPUT = TempOUTPUT,
/* 2 */     INPUT_PULLUP = TempINPUT_PULLUP,
/* 3 */     INPUT_PULLDOWN = TempINPUT_PULLDOWN
} PinMode;

As far as I can see, any of these enum values can be used in the pinMode() function. However, the cross correspondence for some of them makes no sense.

For example,

INPUT = PullNone = PushPullNoPull.
OUTPUT = PullUp = PushPullPullUp.
INPUT_PULLUP = PullDown = PushPullPullDown.
INPUT_PULLDOWN = OpenDrainPullUp = OpenDrain.

Here we have OUTPUT pins with the same name as inputs with pull ups enabled; INPUT_PULLUP pins with the same name as pull down pins and so on.

Has there been some error made in the transcribing of these enumeration values, or am I completely barking mad? 😉

I mean, the following Blink sketch works perfectly, but is obviously confusing!

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, PullUp);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);  // turn the LED on (HIGH is the voltage level)
  delay(1000);                      // wait for a second
  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW
  delay(1000);                      // wait for a second
}

Regards,
Norman.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions