Can a Cayenne Button attached to a Virtual Pin be turned ON/OFF using code within the sketch?

For reference to hopefully assist anyone else trying to tackle a similar project, here’s my final code (note: you need three Cayenne buttons addressed V1, V2, and V3):

/*
Cayenne valves
*/

//#define CAYENNE_DEBUG // Uncomment to show debug messages
#define CAYENNE_PRINT Serial // Comment this out to disable prints and save space
#include <CayenneEthernet.h>

int IRR = 0;
int RO = 0;
int LAKE = 0;
int IRR_LED1=2;
int RO_LED2=3;
int LAKE_LED3=4;
int IRR_RELAY1=6;
int RO_RELAY2=7;
int LAKE_RELAY3=8;

// Cayenne authentication token. This should be obtained from the Cayenne Dashboard.
char token = “xxxxxxxx”;

void setup()
{
Serial.begin(9600);
Cayenne.begin(token);

pinMode(IRR_LED1, OUTPUT);
pinMode(RO_LED2, OUTPUT);
pinMode(LAKE_LED3, OUTPUT);
pinMode(IRR_RELAY1, OUTPUT);
pinMode(RO_RELAY2, OUTPUT);
pinMode(LAKE_RELAY3, OUTPUT);

}

// VOID LOOP
void loop() {

Cayenne.run();

}

CAYENNE_IN(V1)
{
int currentValue = getValue.asInt();
if (currentValue == 1)
{
IRR=1;
LAKE = 0;
Cayenne.virtualWrite(V3,LOW);
digitalWrite(IRR_LED1, HIGH);
digitalWrite(LAKE_LED3, LOW);
digitalWrite(IRR_RELAY1, HIGH);
digitalWrite(LAKE_RELAY3, LOW);

//
Serial.print(" IRR=“);
Serial.print(IRR);
Serial.print(” LAKE=“);
Serial.print(LAKE);
Serial.println(” “);
}
else
{
IRR = 0;
digitalWrite(IRR_LED1, LOW);
digitalWrite(IRR_RELAY1, LOW);
Serial.print(” IRR=“);
Serial.print(IRR);
Serial.print(” LAKE=“);
Serial.print(LAKE);
Serial.println(” ");
}
}

CAYENNE_IN(V2)
{
int currentValue = getValue.asInt();
if (currentValue == 1)
{
RO=1;
LAKE = 0;
Cayenne.virtualWrite(V3,LOW);
digitalWrite(RO_LED2, HIGH);
digitalWrite(LAKE_LED3, LOW);
digitalWrite(RO_RELAY2, HIGH);
digitalWrite(LAKE_RELAY3, LOW);
Serial.print(" RO=“);
Serial.print(RO);
Serial.print(” LAKE=“);
Serial.print(LAKE);
Serial.println(” “);
}
else
{
RO = 0;
digitalWrite(RO_LED2, LOW);
digitalWrite(RO_RELAY2, LOW);
Serial.print(” RO=“);
Serial.print(RO);
Serial.print(” LAKE=“);
Serial.print(LAKE);
Serial.println(” ");
}
}

CAYENNE_IN(V3)
{
int currentValue = getValue.asInt();
if (currentValue == 1){
LAKE=1;
IRR = 0;
RO = 0;
digitalWrite(IRR_LED1, LOW);
digitalWrite(RO_LED2, LOW);
digitalWrite(LAKE_LED3, HIGH);
digitalWrite(IRR_RELAY1, LOW);
digitalWrite(RO_RELAY2, LOW);
digitalWrite(LAKE_RELAY3, HIGH);
Cayenne.virtualWrite(V1,LOW);
Cayenne.virtualWrite(V2,LOW);
Serial.print(" LAKE=“);
Serial.print(LAKE);
Serial.print(” IRR=“);
Serial.print(IRR);
Serial.print(” RO=“);
Serial.print(RO);
Serial.println(” “);
}
else
{
LAKE = 0;
digitalWrite(LAKE_LED3, LOW);
digitalWrite(LAKE_RELAY3, LOW);
Serial.print(” LAKE=“);
Serial.print(LAKE);
Serial.print(” IRR=“);
Serial.print(IRR);
Serial.print(” RO=“);
Serial.print(RO);
Serial.println(” ");
}
}

1 Like