001 - Button and LED

Welcome to the new RoboRemo tutorial.
In this first episode, I show simple use of button and LED in RoboRemo. I connect to an Arduino Nano via USB OTG cable. I press the button in RoboRemo and turn on the LED on the Arduino. I press a button attached to the Arduino and turn ON the LED in RoboRemo.
With the second sketch, the system becomes a 2-way switch. Both LEDs turn ON and OFF simultaneously, triggered by any of the 2 buttons. I press the button in RoboRemo and both LEDs turn ON, then I press the button on the Arduino and both LEDs turn OFF. Same with buttons in the reversed order.



Both Arduino sketches can be found below:

// RoboRemo Tutorial 1 - Button and LED
// 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:
// Arduino ---<OTG cable>--- Android phone/tablet
// D3---PUSHBUTTON---GND

#define BUTTON 3

int buttonState;
int oldButtonState;
char cmd[100];
int cmdIndex;

void execute(char* cmd) {
  if(strcmp(cmd, "led 1")==0) digitalWrite(LED_BUILTIN, HIGH);
  if(strcmp(cmd, "led 0")==0) digitalWrite(LED_BUILTIN, LOW);
}

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);
  
  pinMode(BUTTON, INPUT_PULLUP);
  oldButtonState = HIGH;
  
  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;
    }
  }

  buttonState = digitalRead(BUTTON);
  if(buttonState != oldButtonState) {
    if(buttonState == LOW) Serial.print("led 1\n"); // virtual LED -> ON
    else                   Serial.print("led 0\n"); // virtual LED -> OFF
    oldButtonState = buttonState;
  }
}



// RoboRemo Tutorial 1 - Two way switch
// 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:
// Arduino ---<OTG cable>--- Android phone/tablet
// D3---PUSHBUTTON---GND

#define BUTTON 3

boolean switchON;
int b;
char cmd[100];
int cmdIndex;

void execute(char* cmd) {
  if(strcmp(cmd, "led 1")==0) {
    switchON = !switchON;
    if(switchON) {
      digitalWrite(LED_BUILTIN, HIGH); // LED -> ON
      Serial.print("led 1\n"); // virtual LED -> ON
    } else {
      digitalWrite(LED_BUILTIN, LOW);  // LED -> OFF
      Serial.print("led 0\n"); // virtual LED -> OFF
    }
  }
}

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);
  
  pinMode(BUTTON, INPUT_PULLUP);
  switchON = false;
  
  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;
    }
  }

  // b is used for debouncing the pushbutton
  if(digitalRead(BUTTON) == HIGH) {
    // pushbutton not pressed
    b = 0;
  } else {
    // pushbutton pressed
    if(b < 100) {
      b++;
      delay(1);
    }
    // if still pressed, b will stall to 100
  }

  if(b == 99) {
    // this will get true only once
    // while pushbutton pressed
    execute("led 1");
  }
}