After a few hours figuring out this library I am now able to compile and upload to the xiao-rp2040. However the valve doesn't actuate which seems more likely to be a hardware problem. Looks like I'm going to need to get an oscilloscope to see if we are emitting the correct signal.
Definitely some more figuring out to do, thanks for the help so far!
Code:
//This is a very simple PWM Valve controller that opens or closes a valve fully at the push of a button.
#include <RP2040_PWM.h>
RP2040_PWM* PWM_Instance;
const int buttonIN = 26;
const int ledOUT = 27;
const int valveOUT = 28;
const int frequency = 130;
int buttonState = 0;
int lastButtonState = 0;
int buttonCount = 0;
int dutyCycle = 0;
void setup() {
pinMode(buttonIN, INPUT);
pinMode(ledOUT, OUTPUT);
PWM_Instance = new RP2040_PWM(valveOUT, frequency, dutyCycle);
if (PWM_Instance) {
PWM_Instance->setPWM();
}
Serial.begin(9600);
}
void loop() {
buttonState = digitalRead(buttonIN);
if (buttonState != lastButtonState) {
if (buttonState == HIGH) {
buttonCount++;
Serial.print("Button Pressed ");
}
else {
Serial.print("Button not Pressed ");
}
delay(50);
}
Serial.println(buttonCount);
if (buttonCount % 2 == 0) {
open();
}
else {
close();
}
}
void open() {
Serial.print("Valve Open ");
digitalWrite(ledOUT, HIGH);
dutyCycle = 10;
Serial.print(dutyCycle);
PWM_Instance->setPWM(valveOUT, frequency, dutyCycle);
delay(100);
}
void close() {
Serial.print("Valve Closed ");
digitalWrite(ledOUT, LOW);
dutyCycle = 90;
Serial.print(dutyCycle);
PWM_Instance->setPWM(valveOUT, frequency, dutyCycle);
delay(100);
}