Number of Digital Pins - arduino

Why "NUM_DIGITAL_PINS" returns 20 when I'm using Arduino Uno?
How can I get the number of digital pins in arduino?
I'm using Arduino 1.0.5 IDE
Thanks

If you are wondering why the number is 20 when the Uno's digital pins goes from 0-13, is because the six analog pins can actually act as digital pins as well. So the total digital pins is 20.

By convention, NUM_DIGITAL_PINS (all uppercase) is a macro. Its value is determined when you compile. It's in fact done by a literal text replacement. It doesn't "return" anything. Functions would return different values, but they tend to look more like GetNumDigitalPins().

Related

stm32 witch pin PWM capable : datasheet?

I want to build a project with an STM32G070.
I need a couple of PWM pins.
I look at the datasheet and user manual, and I cannot find anyware if all pins of if only some are PWM capable and so, witch one it is.
I want to know because, if i look at the BluePill, not all pin are PWM.
Anyone can guide me ?
To answer the question - no, not all pins can be configured for PWM. However, most STM32s (including the STM32G070) have multiple timers, many with multiple channels which can generate PWM signals, and these can be mapped to many pins. So it's almost guaranteed that you'll find two spare pins that are not used by other peripherals, that you can use for PWM.
As mentioned, PWM signals are generated by timers. You can consult the reference manual for the STM32G070 to see which timers are available, and which ones have channels that can generate PWM signals. And you can reference the datasheet to see which pins they can be mapped to.
If I was designing a board, I'd create (e.g. in STM32CubeIDE) the crucial peripherals first (e.g. any SPI, I2C, UARTs, etc.) Then I'd see which pins are left over that could be used for PWM. There are bound to be several.

Where do the "D" PIN numbers on an Arduino come from?

I am trying to understand the (very confusing) pin numbering on an MKRWIFI1010. The documentation says pin 2 on the header (which is numbered DAC0/A0 physically) is the 10-bit DAC output.
When I check the SAMD21 datasheet, I find that the VOUT signal is on pin 3, which is I/O pin PA02 (which can be found on the Arduino pinout as well, but not in the datasheet).
However, when I want to program it, I have to use the D designation from the Arduino pinout, which is D15, so I need to use analogWrite(15, value).
I can find almost all info on the datasheets, except where that number D15 comes from, neither from the SAMD21 datasheet, or the Arduino datasheet.

Different functions in every pin?

i have this microcontroller arduino ATmega328 for our project but im not familiar with this so im looking for some answers that can help me, so heres my question
1) in what pin can i assign my codes ?
2) is it possible to assign 2 different function ? for example pin# 1 (add) pin #2 (minus)
The chip has its own processor. The pins either sink/source voltage as output pins or they detect presence of or lack of voltage as input pins. Each pin is controlled as part of a group called a register but can be assigned functions and used independently.
Using the above mentioned functions the processor can "sense" or interact with other input or output devices (ie temp sensor as input or LCD screen as output)
What function do you need it to perform?

How do I send arduino a firmata command to turn on a pin

I'm trying to implement the firmata protocol and having a bit of a difficult time deciphering the spec for writing digital pins:
I have noted the following parts of the spec of Firmata 2.3
* type command channel first byte second byte
------------------------------------------------------------------------------
* digital I/O message 0x90 port LSB(bits 0-6) MSB(bits 7-13)
and
/* two byte digital data format, second nibble of byte 0 gives the port number (e.g. 0x92 is the third port, port 2)
* 0 digital data, 0x90-0x9F, (MIDI NoteOn, but different data format)
* 1 digital pins 0-6 bitmask
* 2 digital pin 7 bitmask
*/
I'm having some difficulty interpreting the spec. I've looked at other implementations, but haven't been able to see the relationship between the spec and implementation.
So let's say I am wanting to turn on the Arduino LED (pin 13), I know it will be on the second port, port 1, so the first byte will be #{91}.
I'm getting confused about the bitmask for the second two bytes though. I know what a bitmask is, so I want to enable the right bit for the pin.
Why is the bitmask so large for the digital pins? I'm familiar with using bitmasks on the digital outputs of PLCs, which seems much different (one pin, one bit)
My thought is that pin 13 would be the 7th pin on port 1. Since I don't care about the other pins, I would mark the pin in the 2nd byte #{40} and I don't need any pins set for the third byte #{00}?
I don't think my interpretation of the bitmasks is correct, and it's probably where my error is
Am I on the right track for this? Is this the right command for setting a pin high or low?
After some strace debugging with the firmata test application, I discovered the simple command to turn on Pin 13 was:
#{912000}
and to turn it off:
#{910000}

Arduino: Attach an interrupt to one of the higher pin numbers?

I have an Arduino Mega 2560. Is is possible to attach an interrupt on the higher pin numbers, for instance, D20 to D25? I tried PcInt, but it doesn't work with the higher pin numbers for some reason.
I have a custom board and it's using these pins, so my hands are tied in terms of what pins to use.
The pin mapping of the Mega2560 says that pins 20-25 aren't candidates for PCINTs (but 20 and 21 would have INTs). So the layout of the board makes it simply incompatible for this Arduino.

Resources