Admin, please move if I'm in the wrong section of the forum.
I'm trying to use a button on the PS4 controller to swith headlights on my RC truck. Ideally I wish to use one button (SQUARE) to switch between off, low and high beam using a relay and the digitalWrite() funtion.
If I do like this I'm only able to switch it off once, and not on again.
if(PS4.getButtonClick(SQUARE)){
digitalWrite(lowbeam, HIGH);
From other examples this should be enough to switch both on and off pins.
Could someone explain how to read and count button-pushes from a PS4 controller?
I've also attached my sketch if someone want's to take a look.
BT_Scania_setup.ino (3.94 KB)
Create a global variable to keep track of the beam state.
uint8_t SquareCount = 0; // 0=off,1=low, 2=high
The following will cycle from 0-1-2 the back to 0.
if (PS4.getButtonClick(SQUARE)) {
SquareCount++;
Serial.print(F("SquareCount=")); Serial.println(SquareCount);
switch (SquareCount) {
default:SquareCount = 0;
/* fall through */
case 0: digitalWrite(...); // turn off
break;
case 1: digitalWrite(...); // low beam
break;
case 2: digitalWrite(...); // high beam
break;
}
}
Thanks gdsports! Code works perfect, the case method was new to me.
I can't see any reset function, guess it resets once it run out of cases?
When the value goes to 3 (or any value other than 0, 1, 2), the default: case forces the counter back to 0.