12 years, 1 month ago.

DigitalIn (NC) not working

I want my code to be able to 'know' if a pin has been defined


#include "mbed.h"

//#define BAUDRATE 57600
#define BAUDRATE 115200
//#define BAUDRATE 19200
//#define BAUDRATE 921600
//#define BAUDRATE 19200
//#define BAUDRATE 9600

DigitalOut myled(LED1);

DigitalOut Pin_A (p6);
DigitalOut Pin_B (p7);
DigitalOut Pin_C (NC);
DigitalOut Pin_D (p9);

Serial pc (USBTX,USBRX);

int main() 
{

    pc.baud(BAUDRATE);
    
    if (Pin_A != NC) pc.printf ("Pin_A is defined .. \r\n"); else pc.printf ("Pin A NOT defined !\r\n");
    if (Pin_B != NC) pc.printf ("Pin_B is defined .. \r\n"); else pc.printf ("Pin B NOT defined !\r\n");
    if (Pin_C != NC) pc.printf ("Pin_C is defined .. \r\n"); else pc.printf ("Pin C NOT defined !\r\n");
    if (Pin_D != NC) pc.printf ("Pin_D is defined .. \r\n"); else pc.printf ("Pin D NOT defined !\r\n");


    while(1) {
        myled = 1;
        wait(0.2);
        myled = 0;
        wait(0.2);
    }
}

results in ..

Pin_A is defined .. 
Pin_B is defined .. 
Pin_C is defined .. 
Pin_D is defined .. 

I am designing building some hardware, and want to be able to selectively enable / disable selected pins.

Very weird, because I am sure this used to work.

After all this is how i would define, for example an SPI with no MISO ..

SPI MySPI_TX_Only (p8, NC, P10, p23); // MOSI, MISO, CLOCK, CS

Thanks in advance

Ceri

1 Answer

12 years, 1 month ago.

Problem is if you do a DigitalIn == ..., it will read the DigitalIn and return 1 or 0. So that has never worked like this. If you have for example a class that uses a pin, it will have a PinName in the constructor, and you can check if that is equal to NC.

Struggeling a bit here !

how can i read from the constructor, to test if the pin is NC or not ?

Cheers

Ceri

posted by ceri clatworthy 12 Jul 2013

I meant in the constructor, so lets say you got:

MyClass::MyClass(PinName _pin) {
  if (_pin == NC)
    printf("NC");
  else
    printf("non-NC");
}
posted by Erik - 12 Jul 2013