Skip to content

Commit

Permalink
Merge pull request #180 from facchinm/rp2040_remap_analog_resolution
Browse files Browse the repository at this point in the history
RP2040: adapt NinaPins to be used as class
  • Loading branch information
aentinger authored Jun 10, 2021
2 parents 1f4d488 + 4d012a8 commit 8a22a80
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions src/utility/nano_rp2040_support.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,12 @@
* FUNCTION DEFINITION
******************************************************************************/

#ifdef NINA_PINS_AS_CLASS
#define VAL(x) x.get()
#else
#define VAL(x) static_cast<uint8_t>(x)
#endif

uint8_t toAnalogPin(NinaPin pin)
{
if (pin == A4) return 6; /* ADC1 - CH6 */
Expand All @@ -41,20 +47,20 @@ uint8_t toAnalogPin(NinaPin pin)

void pinMode(NinaPin pin, PinMode mode)
{
WiFiDrv::pinMode(static_cast<uint8_t>(pin), static_cast<uint8_t>(mode));
WiFiDrv::pinMode(VAL(pin), static_cast<uint8_t>(mode));
}

PinStatus digitalRead(NinaPin pin)
{
return WiFiDrv::digitalRead(static_cast<uint8_t>(pin));
return WiFiDrv::digitalRead(VAL(pin));
}

void digitalWrite(NinaPin pin, PinStatus value)
{
if (value == LOW)
WiFiDrv::digitalWrite(static_cast<uint8_t>(pin), 1);
WiFiDrv::digitalWrite(VAL(pin), 1);
else
WiFiDrv::digitalWrite(static_cast<uint8_t>(pin), 0);
WiFiDrv::digitalWrite(VAL(pin), 0);
}

int analogRead(NinaPin pin)
Expand All @@ -64,12 +70,16 @@ int analogRead(NinaPin pin)
if (adc_channel == 0xFF)
return 0;
else
#ifdef NINA_PINS_AS_CLASS
return WiFiDrv::analogRead(adc_channel) >> (12 - pin.analogReadResolution());
#else
return WiFiDrv::analogRead(adc_channel);
#endif
}

void analogWrite(NinaPin pin, int value)
{
WiFiDrv::analogWrite(static_cast<uint8_t>(pin), static_cast<uint8_t>(value));
WiFiDrv::analogWrite(VAL(pin), static_cast<uint8_t>(value));
}

#endif /* ARDUINO_NANO_RP2040_CONNECT */

0 comments on commit 8a22a80

Please sign in to comment.