006 - Slider

Welcome back to the RoboRemo tutorial.
In this tutorial I explain how to use the sliders. For the demo I use an RGB LED contorlled via Bluetooth with Arduino Nano.



// RoboRemo Tutorial 6 - Slider (RGB LED used for demo)
// www.roboremo.com

// Copyright 2020 roboremo.com
// 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
// The above copyright notice and disclaimer shall be included
// in all copies or substantial portions of the Software.

// Hardware setup:

// NOTE: My LED has COMMON ANODE (+)

// RGB LED        Arduino
// ANODE -------- 5V
// red ----|__|-- D9
// green --|__|-- D10
// blue ---|__|-- D11
//       3 x 100R

// Bluetooth      Arduino
// GND ---------- GND
// VCC ---------- 5V
// TX-O --------- RX0
// RX-I --------- TX1

#define BAUDRATE 115200

#define PIN_R  9 // LOW = ON, HIGH = OFF
#define PIN_G 10 // LOW = ON, HIGH = OFF
#define PIN_B 11 // LOW = ON, HIGH = OFF

char cmd[100];
int cmdIndex;
int pin;
int brightness;

void execute(char* cmd) {
  
  // cmd example: "r 107" => Slider id = "r", value = 107

       if(cmd[0] == 'r') pin = PIN_R;
  else if(cmd[0] == 'g') pin = PIN_G;
  else if(cmd[0] == 'b') pin = PIN_B;
  else return; // unknown command

  if(cmd[1] != ' ') return; // unknown command

  // get integer number after first 2 characters:
  brightness = atoi(cmd+2);

  // 255-brightness because LED is COMMON ANODE
  analogWrite(pin, 255-brightness);
}

void setup() {
  pinMode(PIN_R, OUTPUT);
  pinMode(PIN_G, OUTPUT);
  pinMode(PIN_B, OUTPUT);
  
  digitalWrite(PIN_R, HIGH);  // OFF
  digitalWrite(PIN_G, HIGH);  // OFF
  digitalWrite(PIN_B, HIGH);  // OFF

  cmdIndex = 0;
  delay(500);
  Serial.begin(115200);
}

void loop() {
  if(Serial.available()) {
    char c = (char)Serial.read();
    if(c=='\r' || c=='\n') {
      cmd[cmdIndex] = 0;
      cmdIndex = 0;
      execute(cmd);
    } else {      
      cmd[cmdIndex++] = c;
    }
  }
}