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
2 Problem Definition
3 LITERATURE REVIEW
4. Block Diagram
5. Important Modules used of Arduino board
6. Components
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
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.
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
0 Comments