ONE BOX: ONLINE MEETING PLATFORM CONTROL BOX USING ARDUINO

 ONE BOX: ONLINE MEETING PLATFORM CONTROL BOX USING ARDUINO


INDEX

 1. INTRODUCTION 
 2. PROBLEM DEFINITION
 3. LITERATURE REVIEW
 4. BLOCK DIAGRAM 
 5. IMPORTANT MODULES USED OF ARDUINO BOARD
 6. COMPONENTS
 7. CIRCUIT DIAGRAM
 8. PROGRAMMING CODE
 9. SOFTWARE USED
10.HARDWARE RESULTS SNAPSHOTS
11.COMMENTS ON THE RESULTS
12.SUMMARY 
13.CONCLUSION
14.REFERENCES

 



1. INTRODUCTION 


Once the pandemic hit, the world shifted its pace to online work. Rather only a few percentage were even aware of the online meeting platforms like Zoom, Google Meet, MS Teams, etc. However, it grew upon us as a part of the “New Normal”.

 These Online meetings have taken over the world. Many people alternate between running classes or attending clients or even colleagues’ meetings. There are so many platforms, and each one operates a little differently. 

So, to have an easy control while attending all meetings that would keep one aware of their camera and mic status, is where this ONE BOX comes in.

2 Problem Definition


To have an easy control while attending meetings on different platforms (zoom, meet and teams) that would keep one aware of their camera and mic status just at the touch of a click.

 

3 LITERATURE REVIEW


Back in April 2020, a hobbyist put up an interesting Instructable project on a Zoom Physical Mute button. Later in Mid-November, another hobbyist built a project called ZOOM CONTROL BOX which could control zoom meetings. It was plugged into a USB port, emulated a keyboard, and generated the 6 Zoom hotkeys that he found to be most useful. Since most of the online meeting softwares have "Hotkey" combinations that can trigger actions like muting, chat, video toggles, etc.; after some research, we came up with the idea to build this project that can control not just one but three online meeting platforms namely Zoom, Google Meet, MS Teams online meeting platforms which are the most popular ones in today’s times. This project could also have been made by using the Arduino Uno board whilst keeping the remainder of the components same. However, the Arduino UNO has ATmega328P as its microcontroller while the ARDUINO micro pro which is used here has the microcontroller, ATmega32u4. Now although both belong to the same 8-bit microcontroller family, the 32u4 handles USB communication internally. The 328P doesn’t know how to talk to USB cable so it needs a USB-to-Serial converter for programming. Controlling its own USB connection makes the 32u4 more flexible than 328P. Hence, we have built this project around the Arduino Micro Pro. It is very small in size compared to the UNO and has direct USB communication capabilities. It is also able to utilize internal "Pull-up" resistors, so fewer external circuit components are needed. This means that each button only needs to switch to common (ground) and No external power will be needed, as this will all be powered through the USB cable. This makes the project more efficient and reliable compared to others.


4. Block Diagram 


▪ Power Source: Connected to the Arduino via a micro-USB cable 
▪ Push buttons: For sending signals to the Arduino to perform a specific task 
▪ Arduino: Receives signal and processes the task to provide the output
 ▪ LEDs: Indicate task executed successfully

5. Important Modules used of Arduino board


In this project, the 12 digital I/O pins available on the Arduino micro pro board have been used that are either input, or output based on the requirement by using pinMode(), digitalWrite(), and digitalRead() functions in the code. Here, we have used digital pins D2- D7 for reading key presses which in this case are the push buttons and pins D8- D15 for indication LEDs that tell us about the Mic/Cam/Share status, as well as the mode in which it is operated. The pins for TXI, RXO, RAW, RST, VCC, A0, A1, A2, A3 are not used here. Hence, the main functions of the Arduino board used here are input, processing and output. The used pins are either OFF or ON. When they are ON, they receive a voltage of 5V being considered HIGH and when they are OFF, they receive a voltage of 0V being considered LOW. These pins are referenced in the Arduino IDE over an integer value between 0 and 21.

6. Components


▪ Arduino Pro Micro 5V 16M Development Board 
▪ Pushbuttons – x 6 
▪ Bussed resistor – x 1 
▪ Headers – x 2
▪ LEDs – x 6 
▪ Breadboard 
▪ USB to micro-USB cable

7. Circuit Diagram


8. Programming Code

 // The first part of the programming, which is the following lines, all the way until the "void setup ( )" line, are all used to tell the Arduino about the different connections we have made to it, and the types of data we are wanting to store.
 
#include "HID-Project.h"        
// This is a library that contains the keyboard and volume and mute commands. We need to designate that we are including the library so we can also then access the commands.
#include "OneButton.h"         
// This is a library that allows us to multi-mode from a single input device. We need to designate that we are including the library so we can also then access the commands.
 
int modepin = 2; 
// Assigns a type (integer) and name to the pin connected to the mode button int audiopin = 3; 
// Assigns a type (integer) and name to the pin connected to the audio button int videopin = 4; 
// Assigns a type (integer) and name to the pin connected to the video button int screenpin = 5; 
// Assigns a type (integer) and name to the pin connected to the share button int louderpin = 6;  
// Assigns a type (integer) and name to the pin connected to the volume up button                           int quieterpin = 7; 
// Assigns a type (integer) and name to the pin connected to the volume down button
 
int screenled = 8;  
// Assigns a type (integer) and name to the pin connected to the screen status LED int videoled = 9; 
// Assigns a type (integer) and name to the pin connected to the video status LED int audioled = 10;  
// Assigns a type (integer) and name to the pin connected to the audio status LED
int teamsled = 16; 
// Assigns a type (integer) and name to the pin connected to the teams-status LED int meetled = 14; 
// Assigns a type (integer) and name to the pin connected to the meet status LED int zoomled = 15; 
// Assigns a type (integer) and name to the pin connected to the zoom status LED
 
// The following 8 integer types of data are being created just to store numerical data in our program until we can use it.  
int LEDA; int LEDV; int LEDS; int LEDZ;
 
int LEDT; int LEDM; int ZMT;
 
// The following boolean data types are going to be used to store data as one of only two states. 
bool ZoomMode; bool TeamsMode; bool MeetMode; bool Vup; bool Vdown; bool Mute;
 
int LED_OBIO = 17; 
// This is an onboard LED on the pro micro. Technically it is a serial communications status LED (for RX, or Receive), but it can be called and used for testing stuff.  
 
// We need to name some data in the OneButton library to use it.  Each button controlled by the OneButton library needs to have a distinct name assigned to it, as well as be as associated with one of the pins we named earlier.
OneButton ModeCalls(modepin, true);
// Assigns a Onebutton name and ties it to the Mode button integer
OneButton AudioCalls(audiopin, true);
// Assigns a Onebutton name and ties it to the Audio button integer
OneButton VideoCalls(videopin, true);
// Assigns a Onebutton name and ties it to the Video button integer
OneButton ScreenCalls(screenpin, true);
// Assigns a Onebutton name and ties it to the Screen button integer
 
// This next section, all the way until the "void loop()" line, is used for commands we want to have setup when this is powered on.  After that initial setup run, these lines all get ignored.
void setup() {
  pinMode(LED_OBIO, OUTPUT); 
//This is where we can define that we want to use the onboard LED as an output.  We aren't using it, but it's handy to have around for testing.
 
// The following six pin names, which we named earlier, are now setup as outputs.  We need to do this, as those pins could be used as either inputs or outputs and the arduino needs to know which it is.
  pinMode(audioled, OUTPUT);   pinMode(videoled, OUTPUT);   pinMode(screenled, OUTPUT);   pinMode(meetled, OUTPUT);   pinMode(zoomled, OUTPUT);   pinMode(teamsled, OUTPUT);
 
 
 
// The Volume pins which we named earlier are setup as inputs that are using the internal Pullup. We need to do this, as those pins could be used as either inputs or outputs and the arduino needs to know which it is.
  pinMode(louderpin, INPUT_PULLUP);   pinMode(quieterpin, INPUT_PULLUP); // The following 7 lines are used to set the initial status of the leds when we turn this on.
  digitalWrite(audioled, LOW);   digitalWrite(videoled, LOW);   digitalWrite(screenled, LOW);   digitalWrite(teamsled, LOW);   digitalWrite(zoomled, HIGH);   digitalWrite(meetled, LOW);
 
// This initializes the keyboard library we included earlier so we can use it for keystrokes and audio commands
  Consumer.begin();
  BootKeyboard.begin();
 
//The following 12 lines are used to set up each of the OneButton functions we earlier defined and lets the program know that we will be using short clicks, long press, and double-clicks.
  BootKeyboard.begin();
  ModeCalls.attachClick(clickmode);
  ModeCalls.attachLongPressStart(longPressStartmode);
  ModeCalls.attachDoubleClick(doubleclickmode);
  AudioCalls.attachClick(clickaudio);
  AudioCalls.attachLongPressStart(longPressStartaudio);
  AudioCalls.attachDoubleClick(doubleclickaudio);
  VideoCalls.attachClick(clickvideo);
  VideoCalls.attachLongPressStart(longPressStartvideo);
  VideoCalls.attachDoubleClick(doubleclickvideo);
  ScreenCalls.attachClick(clickscreen);
  ScreenCalls.attachLongPressStart(longPressStartscreen);
  ScreenCalls.attachDoubleClick(doubleclickscreen);
}
 
// This is now the main program loop void loop() {
// The following "if-else" statement is always checking how many times the camera button has been pressed.  It does this by taking the count of the button presses and dividing it down by 2 to see if it has a remainder or not.  If there is a remainder then it is odd and it sets the LED on. If there is no remainder then it is even and it sets the LED off.   if (LEDV % 2 == 0) {     digitalWrite(videoled, LOW);   // set the video light off
  }  else {     digitalWrite(videoled, HIGH);    // set the video light on   }
 
// The following "if-else" statement is always checking how many times the mic button has been pressed.  It does this by taking the count of the button presses and dividing it down by 2 to see if it has a remainder or not.  If there is a remainder then it is odd and it sets the LED on.
If there is no remainder then it is even and it sets the LED off.
  if (LEDA % 2 == 0) {     digitalWrite(audioled, LOW);   // set the audio light off
  }  else {     digitalWrite(audioled, HIGH);    // set the audio light on   }
 
// The following "if-else" statement is always checking how many times the screen button has been pressed.  It does this by taking the count of the button presses and dividing it down by 2 to see if it has a remainder or not.  If there is a remainder then it is odd and it sets the LED on.
If there is no remainder then it is even and it sets the LED off.   if (LEDS % 2 == 0) {
    digitalWrite(screenled, LOW);   // set the screen light off
  }  else {
    digitalWrite(screenled, HIGH);    // set the screen light on   } 
// The following is used to check if the volume buttons are pressed or not.
   Vup = digitalRead(louderpin) == LOW;    Vdown = digitalRead(quieterpin) == LOW;   if (Vup == HIGH && Mute == LOW) {     Consumer.write(MEDIA_VOL_UP);
    delay (200);
  }
  if (Vdown == HIGH && Mute == LOW) {     Consumer.write(MEDIA_VOL_DOWN);
    delay(200);
  }
  if (Vdown && Vup == HIGH) {
    Mute = !Mute;    
    Consumer.write(MEDIA_VOL_MUTE);
    delay(400);
  }
 
  if (ZMT == 0) {  
// This runs anytime we are set into Zoom Mode     ZoomMode = true;     digitalWrite(zoomled, HIGH);     TeamsMode = false;     digitalWrite(teamsled, LOW);     MeetMode = false;     digitalWrite(meetled, LOW);
  }
 
 
  if (ZMT == 1) { 
// This runs anytime we are set into Meet Mode     ZoomMode = false;     digitalWrite(zoomled, LOW);     TeamsMode = false;     digitalWrite(teamsled, LOW);     MeetMode = true;     digitalWrite(meetled, HIGH);
  }  
 
  if (ZMT == 2) { 
// This runs anytime we are set into Teams Mode     ZoomMode = false;     digitalWrite(zoomled, LOW);     TeamsMode = true;     digitalWrite(teamsled, HIGH);     MeetMode = false;     digitalWrite(meetled, LOW);
  }
 
  if (ZMT > 2) {
    ZMT = 0;     ZoomMode = true;     digitalWrite(zoomled, HIGH);     TeamsMode = false;     digitalWrite(teamsled, LOW);     MeetMode = false;     digitalWrite(meetled, LOW);
  }
 
// The following 4 lines are an important part of the main program loop, telling it to go back and check with the OneButton library code to see if has reported anything new on the button front.
  ModeCalls.tick();
  AudioCalls.tick();
  VideoCalls.tick();
  ScreenCalls.tick();
}
 
// This is the end of the main program loop.  Everything below this is now the special one-off mini programs that get executed anytime the OneButton program "ticks" report an action on the buttons.
 
// This function will be called once, when the video button is pressed for a Short time.
void clickvideo() {   if (ZMT == 0) {   // This runs anytime we are set into Zoom Mode
 
    // Open participants Panel with Alt+U
    BootKeyboard.press(KEY_LEFT_CTRL);
    BootKeyboard.press(KEY_LEFT_ALT);     BootKeyboard.press(KEY_LEFT_SHIFT);
    delay(50);
    BootKeyboard.release(KEY_LEFT_CTRL);     BootKeyboard.release(KEY_LEFT_SHIFT);     delay(50);+
    BootKeyboard.press(KEY_U);     delay(50);
    BootKeyboard.release(KEY_U);
    BootKeyboard.release(KEY_LEFT_ALT);
  }
  if (ZMT == 1) { 
// This runs anytime we are set into Meet Mode
  }
  if (ZMT == 2) { 
// This runs anytime we are set into Teams Mode
  }
}
// clickvideo ends
 
// This function will be called once, when the video button is pressed for a long time.
void longPressStartvideo() {   if (ZMT == 0) {  
// This runs anytime we are set into Zoom Mode
    // Toggle the camera with Alt+V
    BootKeyboard.press(KEY_LEFT_CTRL);
    BootKeyboard.press(KEY_LEFT_ALT);     BootKeyboard.press(KEY_LEFT_SHIFT);
    delay(50);
BootKeyboard.release(KEY_LEFT_CTRL);     BootKeyboard.release(KEY_LEFT_SHIFT);
    delay(50);
    BootKeyboard.press(KEY_V);     delay(50);
    BootKeyboard.release(KEY_V);
    BootKeyboard.release(KEY_LEFT_ALT);
    ++LEDV;
  }
  if (ZMT == 1) { 
// This runs anytime we are set into Meet Mode
    // Toggle the camera with Ctrl+E
    BootKeyboard.press(KEY_LEFT_CTRL);     BootKeyboard.press(KEY_E);     delay(50);
    BootKeyboard.release(KEY_E);
 
    BootKeyboard.release(KEY_LEFT_CTRL);
    ++LEDV;
  }
  if (ZMT == 2) { 
// This runs anytime we are set into Teams Mode
    // Toggle the camera with Ctrl+Shift+O
    BootKeyboard.press(KEY_LEFT_CTRL);
    BootKeyboard.press(KEY_LEFT_SHIFT);     BootKeyboard.press(KEY_O);     delay(50);
    BootKeyboard.release(KEY_LEFT_CTRL);
    BootKeyboard.release(KEY_LEFT_SHIFT);
    BootKeyboard.release(KEY_O);
    ++LEDV;
  }

// longPressStartvideo ends
 
// This function will be called once, when the video button is double-clicked. void doubleclickvideo() {   if (ZMT == 0) {  
// This runs anytime we are set into Zoom Mode     // Change the view from gallery to speaker     static int view = LOW;     view = !view;     if (view == HIGH) { 
// Gallery view
      BootKeyboard.press(KEY_LEFT_CTRL);
      BootKeyboard.press(KEY_LEFT_ALT);       BootKeyboard.press(KEY_LEFT_SHIFT);
      delay(50);
      BootKeyboard.release(KEY_LEFT_CTRL);       BootKeyboard.release(KEY_LEFT_SHIFT);
      delay(50);
      BootKeyboard.press(KEY_F2);       delay(50);
      BootKeyboard.release(KEY_F2);
      BootKeyboard.release(KEY_LEFT_ALT);
    } else {
      BootKeyboard.press(KEY_LEFT_CTRL);
      BootKeyboard.press(KEY_LEFT_ALT);       BootKeyboard.press(KEY_LEFT_SHIFT);
      delay(50);
      BootKeyboard.release(KEY_LEFT_CTRL);       BootKeyboard.release(KEY_LEFT_SHIFT);
      delay(50);
      BootKeyboard.press(KEY_F1);
 
      delay(50);
      BootKeyboard.release(KEY_F1);
      BootKeyboard.release(KEY_LEFT_ALT);
}
  }
  if (ZMT == 1) { 
// This runs anytime we are set into meet Mode
  }
  if (ZMT == 2) { 
// This runs anytime we are set into Teams Mode
  }
}
// doubleclickvideo ends
 
// This function will be called once, when the audio button is pressed for a Short time.
void clickaudio() {   if (ZMT == 0) {  
// This runs anytime we are set into Zoom Mode
    // Toggle mic through Alt+A
    BootKeyboard.press(KEY_LEFT_CTRL);
    BootKeyboard.press(KEY_LEFT_ALT);     BootKeyboard.press(KEY_LEFT_SHIFT);     delay(50);
    BootKeyboard.release(KEY_LEFT_CTRL);     BootKeyboard.release(KEY_LEFT_SHIFT);     delay(50);
    BootKeyboard.press(KEY_A);     delay(50);
    BootKeyboard.release(KEY_A);
    BootKeyboard.release(KEY_LEFT_ALT);
    ++LEDA;
  }
  if (ZMT == 1) { 
// This runs anytime we are set into Meet Mode
    // Toggle mic through Ctrl+D
    BootKeyboard.press(KEY_LEFT_CTRL);
    BootKeyboard.press(KEY_D); delay(50);     BootKeyboard.release(KEY_D);
    BootKeyboard.release(KEY_LEFT_CTRL);
    ++LEDA;
  }
  if (ZMT == 2) { 
// This runs anytime we are set into Teams Mode
    // Toggle mic through Ctrl+Shift+M
    BootKeyboard.press(KEY_LEFT_CTRL);
    BootKeyboard.press(KEY_LEFT_SHIFT);
 
    BootKeyboard.press(KEY_M);     delay(50);
    BootKeyboard.release(KEY_M);
    BootKeyboard.release(KEY_LEFT_CTRL);
    BootKeyboard.release(KEY_LEFT_SHIFT);
    ++LEDA;
  }

// clickaudio ends
 
// This function will be called once, when the audio button is pressed for a long time.
void longPressStartaudio() {   if (ZMT == 0) {  
// This runs anytime we are set into Zoom Mode
    // Mute all other participants (if you are the meeting host) with Alt+M
    BootKeyboard.press(KEY_LEFT_CTRL);
    BootKeyboard.press(KEY_LEFT_ALT);     BootKeyboard.press(KEY_LEFT_SHIFT);
    delay(50);
    BootKeyboard.release(KEY_LEFT_CTRL);     BootKeyboard.release(KEY_LEFT_SHIFT);     delay(50);
    BootKeyboard.press(KEY_M); delay(50);     BootKeyboard.release(KEY_M);
    BootKeyboard.release(KEY_LEFT_ALT);
  }
  if (ZMT == 1) { 
// This runs anytime we are set into Teams Mode
  }
  if (ZMT == 2) { 
// This runs anytime we are set into Meet Mode
  }
}
// longPressStartaudio ends
 
// This function will be called once, when the audio button is double-clicked. void doubleclickaudio() {   if (ZMT == 0) {  
// This runs anytime we are set into Zoom Mode
    //Raise hand (if particpant and not host) through Alt+Y
    BootKeyboard.press(KEY_LEFT_CTRL);
    BootKeyboard.press(KEY_LEFT_ALT);     BootKeyboard.press(KEY_LEFT_SHIFT);
    delay(50);
    BootKeyboard.release(KEY_LEFT_CTRL);
    BootKeyboard.release(KEY_LEFT_SHIFT);
 
    delay(50);
    BootKeyboard.press(KEY_Y);     delay(50);
    BootKeyboard.release(KEY_Y);
    BootKeyboard.release(KEY_LEFT_ALT);
  }
 
  if (ZMT == 1) { 
// This runs anytime we are set into Teams Mode
  }
  if (ZMT == 2) { 
// This runs anytime we are set into Meet Mode
  }
}
// doubleclickaudio ends
 
// This function will be called once, when the screen button is pressed for a Short time.
void clickscreen() {   if (ZMT == 0) {  
// This runs anytime we are set into Zoom Mode
    // Freeze the Shared Screen with Alt+T
    BootKeyboard.press(KEY_LEFT_CTRL);
    BootKeyboard.press(KEY_LEFT_ALT);     BootKeyboard.press(KEY_LEFT_SHIFT);     delay(50);
    BootKeyboard.release(KEY_LEFT_CTRL);     BootKeyboard.release(KEY_LEFT_SHIFT);     delay(50);
    BootKeyboard.press(KEY_T);     delay(50);
    BootKeyboard.release(KEY_T);
    BootKeyboard.release(KEY_LEFT_ALT);
  }
  if (ZMT == 1) { 
// This runs anytime we are set into Teams Mode
  }
  if (ZMT == 2) { 
// This runs anytime we are set into Meet Mode
  }

// clickscreen ends
 
// This function will be called once, when the screen button is pressed for a long time.
void longPressStartscreen() {
  if (ZMT == 0) { 
// This runs anytime we are set into Zoom Mode
    // Open Screen-sharing panel with Alt+S
 
    BootKeyboard.press(KEY_LEFT_CTRL);
    BootKeyboard.press(KEY_LEFT_ALT);     BootKeyboard.press(KEY_LEFT_SHIFT);
    delay(50);
    BootKeyboard.release(KEY_LEFT_CTRL);     BootKeyboard.release(KEY_LEFT_SHIFT);
    delay(50);
    BootKeyboard.press(KEY_S);     delay(50);
    BootKeyboard.release(KEY_S);
    BootKeyboard.release(KEY_LEFT_ALT);
    ++LEDS;
  }
  if (ZMT == 1) { 
// This runs anytime we are set into Meet Mode
  }
  if (ZMT == 2) { 
// This runs anytime we are set into Teams Mode
    // Open Screen sharing panel with Ctrl+Shift+E
    BootKeyboard.press(KEY_LEFT_CTRL);
    BootKeyboard.press(KEY_LEFT_SHIFT);     BootKeyboard.press(KEY_E);     delay(50);
    BootKeyboard.release(KEY_LEFT_CTRL);
    BootKeyboard.release(KEY_LEFT_SHIFT);
    BootKeyboard.release(KEY_E);
    ++LEDS;    
  }

// longPressStartscreen ends
 
// This function will be called once, when the screen button is double-clicked.
void doubleclickscreen() {     // There is nothing in this call   if (ZMT == 0) {  
// This runs anytime we are set into Zoom Mode
  }
  if (ZMT == 2) { 
// This runs anytime we are set into Teams Mode
    // There is nothing in this call 
  }
  if (ZMT == 1) { 
// This runs anytime we are set into Meet Mode
  }
}
 
 
 
// This function will be called once, when the mode button is pressed for a Short time. void clickmode() {
  // Surface the meeting Ctrl+Shift+Alt   if (ZMT == 0) { 
 // This runs anytime we are set into Zoom Mode
    BootKeyboard.press(KEY_LEFT_CTRL);
    BootKeyboard.press(KEY_LEFT_ALT);     BootKeyboard.press(KEY_LEFT_SHIFT);     delay(50);
    BootKeyboard.release(KEY_LEFT_CTRL);
    BootKeyboard.release(KEY_LEFT_ALT);
    BootKeyboard.release(KEY_LEFT_SHIFT);
  }
  if (ZMT == 1) { 
// This runs anytime we are set into Meet Mode
  }
  if (ZMT == 2) {
// This runs anytime we are set into Teams Mode
  }

// clickmode ends
 
// This function will be called once, when the mode button is pressed for a long time. void longPressStartmode() {   if (ZMT == 0) {  
// This runs anytime we are set into Zoom Mode
    // Leave meeting throug Alt+Q
    BootKeyboard.press(KEY_LEFT_CTRL);
    BootKeyboard.press(KEY_LEFT_ALT);     BootKeyboard.press(KEY_LEFT_SHIFT);
    delay(50);
    BootKeyboard.release(KEY_LEFT_CTRL);     BootKeyboard.release(KEY_LEFT_SHIFT);     delay(50);
    BootKeyboard.press(KEY_Q);     delay(50);
    BootKeyboard.release(KEY_Q);
    BootKeyboard.release(KEY_LEFT_ALT);
    delay(50);
    BootKeyboard.press(KEY_TAB);
    delay(50);
    BootKeyboard.release(KEY_TAB);     delay(50);
    BootKeyboard.write(KEY_RETURN);     if (LEDV > 0) {
      LEDV = 0;
    }
 
    if (LEDA > 0) {       LEDA = 0;
    }
    if (LEDS > 0) {
      LEDS = 0;
    }
  }
  if (ZMT == 1) { 
// This runs anytime we are set into Meet Mode
    // It just clears all LEDS     if (LEDV > 0) {
      LEDV = 0;
    }
    if (LEDA > 0) {
      LEDA = 0;
    }
    if (LEDS > 0) {
      LEDS = 0;
    }
  }
  if (ZMT == 2) { 
// This runs anytime we are set into Teams Mode
    // Leave meeting through Ctrl+Shift+B
    BootKeyboard.press(KEY_LEFT_CTRL);
    BootKeyboard.press(KEY_LEFT_SHIFT);     BootKeyboard.press(KEY_B);     delay(50);
    BootKeyboard.release(KEY_B);
    BootKeyboard.release(KEY_LEFT_CTRL);     BootKeyboard.release(KEY_LEFT_SHIFT);     if (LEDV > 0) {
      LEDV = 0;
    }
    if (LEDA > 0) {
      LEDA = 0;
    }
    if (LEDS > 0) {
      LEDS = 0;
    }
  }

// longPressStartmode ends
 
// This function will be called once, when the mode button is double-clicked. void doubleclickmode() {
  ++ZMT; 
// Everytime that this happens, this integer will increase by one.
 
  if (LEDV > 0) {
    LEDV = 0;
  }
  if (LEDA > 0) {
    LEDA = 0;
  }
  if (LEDS > 0) {
    LEDS = 0;
  }

// doubleclickmode ends   
   

9. Software Used

 Software used to load and run the code in Arduino micro pro : Arduino IDE



(Note – We directly implemented the project via Hardware and hence didn’t make use of any simulation tool or software other than the one used to load and run the program code i.e., Arduino IDE whose snapshot is attached above)

10. Hardware results snapshots


Volume up/down

Here, the switches have been labeled as per the tasks they perform. Also, the led’s which glow on clicking these switches have been labeled as they would provide assistance in understanding the simulation snapshots ahead. 


Here, the glowing led indicates that the control box is in ‘MS Teams’ mode and will perform all the actions in MS Teams (e.g., muting/unmuting mic, screen sharing, turning video cam on/off, etc.) with one click.

Note:

All the following working snapshots regarding Arduino project have been taken while testing the control box in teams mode. The same actions can be done in ZOOM as well as GOOGLE MEET by simply changing the mode. 



Here, on clicking the switch for turning on/off the cam, the video turns on and the led glows indicating the proper functioning of the video action. 



Here, on clicking the switch for turning on/off the mic, the mic turns on and the led glows indicating the proper functioning of the mic action.

 11.Comments on the Results

1.      The Online meeting platform control box works as expected on being connected to thecomputer.  

2.      It performs the tasks and works as a remote control by performing all the actions as desired with single/ double clicks.

3.      While in ameeting on MS Teams, once the mode on the control box is switched to TEAMS, it switches are remapped as per the app’s controls.

4.      Similarly, if ZOOM or GOOGLE MEET is being used for the meeting and the control isswitched to their respective modes, the switches get remapped accordingly.

5. The basic actions that work on all the platforms are muting/ unmuting mic, turning on/ off the camera, sharing screen, etc. which are performed without any error or problem by the control box


12.SUMMARY 

This mini project helped us to understand how to use an ARDUINO board in unison with external components such as LED’s, switches, etc. by assembling the project first on a bread board and then on a multipurpose PCB. We also learnt to use the ARDUINO IDE and code in it whilst debugging and burning the code to the ARDUINO board. The various errors and problems (like an improper connection or errors in the code) which were encountered during the making of the project aided us to find different ways and means to overcome them. It made us aware of new methods which would be beneficial in future projects. The final result performed as expected. Thus, it proved to be useful in understanding the software as well as hardware aspectsof ARDUINO by putting it all in order as a mini project. 


13.CONCLUSION

This mini project helped us to understand how to use anARDUINO board in unison with external components such as LED’s, switches, etc. by assembling the project first on a bread board and then on a multipurpose PCB. We also learnt to use the ARDUINO IDE and code in it whilst debugging and burning the code to the ARDUINO board. The various errors and problems (like an improper connection or errors in the code) which were encountered during the making of the project aided us to find different ways and means to overcome them. It made us aware of new methods which would be beneficial in future projects. The final result performed as expected. Thus, it proved to be useful in  understanding the software as well as hardware aspects of ARDUINO by putting it all in order as a mini project. 

 

14.REFERENCES

[1]  Arduino Leonardo and Arduino Micro. A Hands-On Guide for Beginner (+source code) by Kurniawan A. 

[2]  https://www.instructables.com/Zoom-Control-Box/



keep visiting us again and again & don't forget to leave a comment and your suggestions for the Upcoming Topics.

You may also like : 

Basic Introduction to the Layout & Working of Stock Market in SEVEN POINTS

Seven Reasons Why Everyone Should Play Chess

 

Post a Comment

0 Comments