Wiznet makers

TheBluePhoenix

Published October 31, 2022 © GNU General Public License, version 3 or later (GPL3+)

0 UCC

0 VAR

1 Contests

0 Followers

0 Following

Automated Inventory management system

We are developing an integrated system that can detect industrial parts of various sizes and automate their counting.

COMPONENTS Hardware components

WIZnet - WizFi360-EVB-Pico

x 1

Primary Controller


sparkfun - SparkFun Load Cell Amplifier - HX711

x 1

Amplify the load cell signal


sparkfun - Pushbutton switch 12mm

x 1

Software Apps and online services

Arduino - Arduino IDE

x 1


AmazonWebServices - AWS IoT

x 1


PROJECT DESCRIPTION
Automated Inventory management

STORY

Introduction:

When I first started working on an industrial product, I realized that even small and seemingly simple products had tens of individual parts of all shapes, sizes, materials and colors. It was extremely difficult to keep a track of these parts, their stock and daily assembly/sub-assembly counts. For the sole purpose of inventory management and stock purchase, a lot of companies have expensive systems or teams in place. However, for smaller companies that are just scaling up, it becomes a nightmare, especially when each member is already doing multiple jobs. Hence, a lot of times a part goes out of stock due to negligence, resulting in total disruption of sales and operations for some time.

I wanted to develop something that would be affordable and could automate the entire process from start to end. It was an extremely difficult task, since as I mentioned earlier - the parts have vastly different properties. There are no ready-made solutions in the market that are fully automated and hence it was difficult to develop a method that would require negligible human intervention or data entry.

Solution:

The best way to count parts in bulk that are less than 1cm3 in total volume is to take their total weight and divide it by the individual part weight to get the part count. To get the initial part weight, we could weigh a set amount of each part on the scale and divide it by the known part count to get the accurate single part weight.

We also require a database containing other parameters for each part, like the cycle time, batch size, part name, etc. This database will be updated with the part weight and part count on daily basis to provide the stock count and daily stock usage can be calculated by subtracting each day's stock from that of the previous day.
 

The load cell control device:

Our load cell control device basically uses the HX711 to amplify the load cell signals and uses a menu to navigate through the various functionalities. The following features are included:

  • Normal weight display and measurement.
  • Tare or zero scale.
  • Add a part by entering its UID and part weight and find the batch part count accordingly.
  • Remote WiFi setup.
  • Onboard data storage on EEPROM.
  • Data uploading on AWS-IoT service.
  • Live dashboard for seeing stock quantities.
  • Battery operated.
  • Completely portable and modular, so that differently sensitive and capable load cell systems can be attached to the same control device as required.

Bill of Materials:

Due to some error, we weren't able to list all out components in the component list. So here's a complete BOM list:

Block Diagram:

Connection diagram:

Code:

#include <EEPROM.h>
#include <SPI.h>
#include "HX711.h"
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#define LOADCELL_DOUT_PIN 2
#define LOADCELL_SCK_PIN 3 

HX711 scale; //Declare object scale to call various operations like get values and tare

float calibration_factor = 227850; //Calibration factor obtained by previous testing
int contrast=60;

int menuitem = 1; //For main menu items
int submenuitem = 2; //For submenu items of ADD ITEMS
int frame = 1; //For scrolling through the 6 menu options
int page = 1; //For menu and its contents inside
int lastMenuItem = 1;
int positem = 1; //For right and left scrolling in count
int uidcur = 1; //For right and left scrolling in uid
int odbitem = 1;
int othermenuitem =1;
int wifimenuitem=1;
int cnfrmext=1; 

String menuItem1 = "WEIGHT";
String menuItem2 = "ADD PART";
String menuItem3 = "VIEW STOCK";
String menuItem4 = "ONLINE DB";
String menuItem5 = "WIFI";
String menuItem6 = "OTHER";


int u1 = 0;//UID digit 1
int u2 = 0;//UID digit 2
int u3 = 0;//UID digit 3
int uid = 0;//Final 3 digit uid is stored in this variable
int c1 = 0;//Count digit 1
int c2 = 0;//Count digit 2
int c3 = 0;//Count digit 3
int c4 = 0;//Count digit 4
int c5 = 0;//Count digit 5
int ct = 0;//Final 5 digit count is stored in this variable

float wt = 0;
float reading;
float w = reading;
float fct;//String float from eeprom

volatile boolean up = false;
volatile boolean down = false;
volatile boolean middle = false;
volatile boolean left = false;
volatile boolean right = false;

int downButtonState = 0;
int upButtonState = 0;  
int selectButtonState = 0; 
int leftButtonState = 0;   
int rightButtonState = 0;      

int lastDownButtonState = 0;
int lastSelectButtonState = 0;
int lastUpButtonState = 0;
int lastLeftButtonState = 0;
int lastRightButtonState = 0;

int prevuid;

String uidString = String(uid);
String wtString = String(wt);
String ctString = String(ct);
String uidString2 = String(uid);

int uidaddr;
int pwtaddr = uidaddr + sizeof(uidString);
int pctaddr = pwtaddr + sizeof(wtString);

String uidaddrS = String(uidaddr);
String pctaddrS = String(pctaddr);
String pwtaddrS = String(pwtaddr);

int eestate=0; ///Need to remove this 
int i =0;
int k =0;
int m =0;
int flag;
String gtud;
String gtwt;
String gtct;
int stockscroll=1;
int wifistate=1;
int onwifiitem=1;
String gtuidaddrS;
String gtpwtaddrS;
String gtpctaddrS;
String frstentryS;
String clreeprm;
int test=0;

/* Adafruit_PCD8544(CLK,DIN,D/C,CE,RST);*/
Adafruit_PCD8544 display = Adafruit_PCD8544(8, 9, 10, 11, 12);

void setup() {

  Serial.begin(115200);
  Serial2.begin(115200);
  
  EEPROM.begin(4000);
  /*Display Initialization*/
  display.begin();      
  display.clearDisplay();
  setContrast();  
  display.display(); 
  delay(100);

  /*Initializing hx117 ADC*/
  scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
  scale.set_scale(-227850); //Calibration Factor obtained from first sketch
  scale.tare(); //Reset the scale to 0
  
    /*Input declaration*/
  pinMode(13, INPUT_PULLUP); //Down button
  pinMode(14, INPUT_PULLUP); //Select button
  pinMode(15, INPUT_PULLUP); //UP Button
  pinMode(16, INPUT_PULLUP); //Right Button
  pinMode(17, INPUT); //Left button

  /*Stock save Cursor*/
  String uidaddrS = String(uidaddr);
  String pctaddrS = String(pctaddr);
  String pwtaddrS = String(pwtaddr);
  EEPROM.get(1896, gtuidaddrS);
  EEPROM.get(1908, gtpwtaddrS);
  EEPROM.get(1920, gtpctaddrS);
  EEPROM.get(0, frstentryS);
}

   
void loop() {
  
  drawMenu();
  
  readbuttonstate();
 
  checkIfDownButtonIsPressed();
  checkIfUpButtonIsPressed();
  checkIfSelectButtonIsPressed();
  checkIfRightButtonIsPressed();
  checkIfLeftButtonIsPressed();

  upbuttonpage();
  downbuttonpage();
  middlebuttonpage();
  rightbuttonpage();
  leftbuttonpage();
  //uidposiselect(int mi);
  countposiselect();
  //reading = (scale.get_units(10)*1000);

}

void readbuttonstate(){
  downButtonState = digitalRead(13);
  selectButtonState = digitalRead(14);
  upButtonState = digitalRead(15);
  rightButtonState = digitalRead(16);
  leftButtonState = digitalRead(17) ;
}


void checkIfDownButtonIsPressed() {
    if (downButtonState != lastDownButtonState) {
      if (downButtonState == 0) {
        down=true;
      }
    delay(50);
    }
    lastDownButtonState = downButtonState;
  }


void checkIfUpButtonIsPressed() {
    if (upButtonState != lastUpButtonState) {
      if (upButtonState == 0) {
         up=true;
      }
    delay(50);
    }
   lastUpButtonState = upButtonState;
}


void checkIfSelectButtonIsPressed() {
    if (selectButtonState != lastSelectButtonState) {
      if (selectButtonState == 0) {
         middle=true;
       }
    delay(50);
    }
   lastSelectButtonState = selectButtonState;
}


void checkIfRightButtonIsPressed() {
    if (rightButtonState != lastRightButtonState) {
      if (rightButtonState == 0) {
         right=true;
       }
    delay(50);
    }
   lastRightButtonState = rightButtonState;
}


void checkIfLeftButtonIsPressed() {
    if (leftButtonState != lastLeftButtonState) {
      if (leftButtonState == 0) {
         left=true;
       }
    delay(50);
    }
   lastLeftButtonState = leftButtonState;
}


void upbuttonpage() {
   if (up && page == 1 ) {
     
    up = false;
    if(menuitem==2 && frame ==2)//main menu page scrolls frame up to view menuitem 123 from 234
    {
      frame--; 
    }
     if(menuitem==3 && frame ==3)//main menu page scrolls frame up to view menuitem 234 from 345
    {
      frame--;
    }
     if(menuitem==4 && frame ==4)//main menu page scrolls frame up to view menuitem 345 from 456
    {
      frame--;
    }
    lastMenuItem = menuitem;
    menuitem--;
    if (menuitem==0)
    {
      menuitem=1;
    } 
  }
  else if (up && page == 2 && menuitem==3 ) { //To increase display contrast
    up = false;
    stockscroll--;
    if(stockscroll==0){
      stockscroll=35;
    }
  }
  else if (up && page == 4 && menuitem==3 ) { //To increase display contrast
    up = false;
    page=3;
    menuitem=3;
  }
  else if (up && page==2 && menuitem==2 && uidcur==1){ //To change first digit of UID
    up = false;
    u1++;
    if (u1==10){
      u1=0;
    }
  }
    else if (up && page==2 && menuitem==2 && uidcur==2){ //To change second digit of UID
    up = false;
    u2++;
    if (u2==10){
      u2=0;
    }
  }
  else if (up && page==2 && menuitem==2 && uidcur==3){ //To change third digit of UID
    up = false;
    u3++;
    if (u3==10){
      u3=0;
    }
  }
  else if (up && page == 7 && menuitem == 2 && cnfrmext==2){
    up = false;
    cnfrmext=1;
  }
  else if (up && page == 9 && menuitem==2 ) { //scrolls up through submenu of "ADD ITEMS"
    up = false;
    submenuitem--;
    if (submenuitem==1)
    {
      submenuitem=3;
    }
  }
    else if (up && page==10 && submenuitem==2 && positem==1){ //To change first digit of Count
    up = false;
    c1++;
    if (c1==10){
      c1=0;
    }
  }
  else if (up && page==10 && submenuitem==2 && positem==2){ //To change second digit of Count
    up = false;
    c2++;
    if (c2==10){
      c2=0;
    }
  }
  else if (up && page==10 && submenuitem==2 && positem==3){ //To change third digit of Count
    up = false;
    c3++;
    if (c3==10){
      c3=0;
    }
  }
  else if (up && page==10 && submenuitem==2 && positem==4){ //To change fourth digit of Count
    up = false;
    c4++;
    if (c4==10){
      c4=0;
    }
  }
  else if (up && page==10 && submenuitem==2 && positem==5){ //To change fifth digit of Count
    up = false;
    c5++;
    if (c5==10){
      c5=0;
    }
  }
  else if (up && page==2 && menuitem==4){
    up = false;
    odbitem--;
    if(odbitem==0){
      odbitem=3;
    }
  }
  else if(up && page == 2 && menuitem==5){
    up=false;
    wifimenuitem--;
    if(wifimenuitem==0){
      wifimenuitem=2;
     }
   }
  else if(up && page == 3 && menuitem==5 && wifimenuitem==1 && wifistate==2){
    up=false;
    onwifiitem--;
    if(onwifiitem==0){
      onwifiitem=3;
     }
   }
  else if (up && page==2 && menuitem==6){
    up = false;
    othermenuitem--;
    if(othermenuitem==0){
      othermenuitem=3;
    }
  }
  else if (up && page == 3 && menuitem==6 && othermenuitem==1) { //To decrease display contrast
    up = false;
    contrast++;
    setContrast();
  }

}


void downbuttonpage() {
  if (down && page == 1) 
  {
    down = false;
    if(menuitem==3 && lastMenuItem == 2) //main menu page scrolls frame down to view menuitem 234 from 123
    {
      frame ++;
    }
    else  if(menuitem==4 && lastMenuItem == 3) //main menu page scrolls frame down to view menuitem 345 from 234
    {
      frame ++;
    }
     else  if(menuitem==5 && lastMenuItem == 4 && frame!=4) //main menu page scrolls frame down to view menuitem 456 from 345
    {
      frame ++;
    }
    lastMenuItem = menuitem;
    menuitem++;  
    if (menuitem==7) 
    {
      menuitem--;
    }
  }
   else if (down && page == 2 && menuitem==3 ) { //To view stock
    down = false;
    stockscroll++;
    if(stockscroll==36){
      stockscroll=1;
    }

  }
  else if (down && page == 3 && menuitem==3){
    down = false;
    menuitem=3;
    page=4;
  }
  else if (down && page == 7 && menuitem == 2 && cnfrmext==1){
    down = false;
    cnfrmext=2;
  }
  else if (down && page == 9 && menuitem==2) { //scrolls down through submenu of "ADD ITEMS"
    down = false;
    submenuitem++;
    if (submenuitem==4)
    {
      submenuitem=2;
    }
  }
   else if (down && page==2 && menuitem==2 && uidcur==1){ //To decrease first digit of UID
    down = false;
    u1--;
    if (u1==-1){
      u1=9;
    }
  }
  else if (down && page==2 && menuitem==2 && uidcur==2){ //To decrease second digit of UID
    down = false;
    u2--;
    if (u2==-1){
      u2=9;
    }
  }
  else if (down && page==2 && menuitem==2 && uidcur==3){ //To decrease third digit of UID
    down = false;
    u3--;
    if (u3==-1){
      u3=9;
    }
  }
  else if (down && page==10 && submenuitem==2 && positem==1){ //To decrease first digit of Count
    down = false;
    c1--;
    if (c1==-1){
      c1=9;
    }
  }
  else if (down && page==10 && submenuitem==2 && positem==2){ //To decrease second digit of Count
    down = false;
    c2--;
    if (c2==-1){
      c2=9;
    }
  }
  else if (down && page==10 && submenuitem==2 && positem==3){ //To decrease third digit of Count
    down = false;
    c3--;
    if (c3==-1){
      c3=9;
    }
  }
  else if (down && page==10 && submenuitem==2 && positem==4){ //To decrease fourth digit of Count
    down = false;
    c4--;
    if (c4==-1){
      c4=9;
    }
  }
  else if (down && page==10 && submenuitem==2 && positem==5){ //To decrease fifth digit of Count
    down = false;
    c5--;
    if (c5==-1){
      c5=9;
    }
  }
  else if (down && page==2 && menuitem==4){
    down = false;
    odbitem++;
    if(odbitem==4){
      odbitem=1;
    }
  }
  else if(down && page == 2 && menuitem==5){
     down=false;
     wifimenuitem++;
     if(wifimenuitem==3){
      wifimenuitem=1;
     }
   }
  else if(down && page == 3 && menuitem==5 && wifimenuitem==1 && wifistate==2){
     down=false;
     onwifiitem++;
     if(onwifiitem==4){
      onwifiitem=1;
     }
   }
  else if (down && page==2 && menuitem==6){
    down = false;
    othermenuitem++;
    if(othermenuitem==4){
      othermenuitem=1;
    }
  }
  else if (down && page == 3 && menuitem==6 && othermenuitem==1) { //To decrease display contrast
    down = false;
    contrast--;
    setContrast();
  }
    
}

void middlebuttonpage(){
   if (middle) //Middle Button is Pressed
  {
    middle = false;
   
    if(page == 1 && menuitem ==6)// Reset is pressed
    {
      //eestate++;
      page=2;
      //resetDefaults();
    }
    else if (page == 1 && menuitem<6) {// To toggle to page 2 of all menu items
      page=2;
     }
    else if (page == 2 && menuitem==1) {// To fix the menuitem 1 jump to page 3 bug
      tarescale();
     }
    else if (page == 2 && menuitem==2 ) { //To toggle to page 3 of ADD ITEMS menu
      menuitem=2;
      page=3;
     }
    else if (page == 4 && menuitem==2 ) { //To toggle to page 3 of ADD ITEMS menu
      menuitem=2;
      page=5;
     }
    else if (page == 5 && menuitem==2) { //To save changes of contents in submenu and return to ADD ITEM Menu 
      menuitem=2;
      page=6;
     }
    else if (page == 6 && menuitem==2) { //To save changes of contents in submenu and return to ADD ITEM Menu 
      menuitem=2;
      page=8;
     }
    else if (page == 7 && menuitem == 2 && cnfrmext == 1){
       menuitem=2;
       page=6;
     }
     else if (page == 7 && menuitem == 2 && cnfrmext == 2){
       page=1;
     }
     else if (page == 8 && menuitem==2) { //To save changes of contents in submenu and return to ADD ITEM Menu 
      page=1;
     }
     else if (page == 9 && menuitem==2 && submenuitem == 2) { //To toggle to page 3 of ADD ITEMS menu
      menuitem = 2;
      submenuitem = 2;
      page=10;
     }
     else if (page == 10 && menuitem==2 && submenuitem == 2) { //To save changes of contents in submenu and return to ADD ITEM Menu 
      menuitem=2;
      page=9;
     }
     else if (page == 9 && menuitem==2 && submenuitem == 3) { //To toggle to page 3 of ADD ITEMS menu
      menuitem = 2;
      submenuitem = 3;
      page=11;
     }
     else if (page == 11 && menuitem==2 && submenuitem == 3) { //To toggle to page 3 of ADD ITEMS menu
      menuitem = 2;
      page=6;
     }
     else if (page == 2 && menuitem==4 && odbitem==1){
      menuitem=4;
      odbitem=1;
      page=3;
     }
     else if (page == 2 && menuitem==4 && odbitem==2){
      menuitem=4;
      odbitem=2;
      page=4;
     }
     else if (page == 2 && menuitem==4 && odbitem==3){
      menuitem=4;
      odbitem=3;
      page=6;
      //WiFi.begin("ESP Cam");
     }
     else if (page == 2 && menuitem==5 && wifimenuitem==1){
      menuitem=5;
      wifimenuitem=1;
      page=3;
     }
     else if (page == 2 && menuitem==5 && wifimenuitem==2){
      menuitem=5;
      wifimenuitem=2;
      page=5;
     }
     else if (page == 3 && menuitem==5 && wifimenuitem==1){
      if(wifistate==1){
        wifistate=2;
        onwifiitem=1;
      }
      else if(wifistate==2 && onwifiitem==1){
        wifistate=1;
      }
      else if(wifistate==2 && onwifiitem==2){
        //WiFi.begin(WiFi.SSID(), WiFi.psk());
        page=4;
        menuitem=5;
        wifimenuitem=1;
        wifistate=2;
        onwifiitem=2;
      }
      else if(wifistate==2 && onwifiitem==3){
        page=6;
        menuitem=5;
        wifimenuitem=1;
        wifistate=2;
        onwifiitem=3;
      }
     }
     else if (page == 2 && menuitem==6 && othermenuitem==1){
      menuitem=6;
      othermenuitem=1;
      page=3;
     }
     else if (page == 3 && menuitem==6 && othermenuitem==1){
      menuitem=6;
      othermenuitem=1;
      page=2;
     }
     else if (page == 2 && menuitem==6 && othermenuitem==2){
      menuitem=6;
      othermenuitem=2;
      page=4;
     }
     else if (page == 2 && menuitem==6 && othermenuitem==3){
      menuitem=6;
      othermenuitem=3;
      page=5;
     }
   }   
} 


void rightbuttonpage(){ //To shift through the digits of Uid, count, weight
   if(right && menuitem==2 && page==2){
    right=false;
    uidcur++;
    if(uidcur==4){
      uidcur=1;
      }
    }
   else if(right && menuitem==2 && page==8){
    right=false;
    menuitem=3;
    page=2;
  }
   else if(right && menuitem==2 && submenuitem==2 && page==10){
    right=false;
    positem++;
    if(positem==6){
      positem=1;
      }
    }
   else if(right && menuitem==1 && page==2){
    right=false;
    menuitem=2;
    page=2; 
    }
   else if(right && menuitem==4 && odbitem==2 && page==4){
    right=false;
    menuitem=4;
    odbitem==2;
    page=5; 
    }
   else if(right && page==5 && menuitem==5 && wifimenuitem==2){
    right=false;
    menuitem=5;
    wifimenuitem=2;
    page=7; 
    }
   else if(right && page==7 && menuitem==5 && wifimenuitem==2){
    right=false;
    menuitem=5;
    wifimenuitem=2;
    page=8; 
    }
   else if(right && page==8 && menuitem==5 && wifimenuitem==2){
    right=false;
    menuitem=5;
    wifimenuitem=2;
    page=9; 
    }
  }

  
void leftbuttonpage(){ //To go back
   if (left) //Left Button is Pressed
  {
    left = false;
    if((page == 2 && menuitem == 1) || (page == 2 && menuitem > 3)){
      page=1;
    }

    else if(page >= 2 && menuitem==3){
      page=1;
    }
    
    else if(menuitem==2 && page==2){
    uidcur--;
    if(uidcur==0){
      uidcur=3;
      }
    }
    else if(menuitem==2 && submenuitem==2 && page==10){
    positem--;
    if(positem==0){
      positem=5;
      }
    }
    else if (menuitem==2 && page==3){
      //menuitem=3;
      page=1;
    }
    else if (menuitem==2 && page==4){
      //menuitem=3;
      page=1;
    }
     else if (menuitem==2 && page==5){
      menuitem=3;
      page=4;
    }
     else if (menuitem==2 && page==6){
      menuitem=3;
      page=7 ;
    }
     else if (menuitem==2 && page==9){
      menuitem=3;
      page=1 ;
    }
    else if ((page == 3 && menuitem==4 && odbitem==1)||(page == 4 && menuitem==4 && odbitem==2)||(page == 6 && menuitem==4 && odbitem==3)){
      menuitem=4;
      page=2 ;
    }
    else if (page == 5 && menuitem==4 && odbitem==2){
      menuitem=4;
      page=4 ;
    }
    else if ((page ==3 && menuitem==5 && wifimenuitem==1)||(page==4 && menuitem==5 && wifimenuitem==1)){
      menuitem=5;
      page=2;
    }
    else if (page ==5 && menuitem==5 && wifimenuitem==2){
      menuitem=5;
      page=2;
    }
    else if (page ==7 && menuitem==5 && wifimenuitem==2){
      menuitem=5;
      wifimenuitem==2;
      page=5;
    }
    else if (page ==8 && menuitem==5 && wifimenuitem==2){
      menuitem=5;
      wifimenuitem==2;
      page=7;
    }
    else if (page ==9 && menuitem==5 && wifimenuitem==2){
      menuitem=5;
      wifimenuitem==2;
      page=8;
    }
    else if (page == 4 && menuitem==6 && othermenuitem==2){
      menuitem=6;
      othermenuitem=2;
      page=2;
     }
    else if (page==5 && menuitem==6 && othermenuitem==3 ){
      menuitem=6;
      page=2;
    }
  }
}

void uidposiselect(int pg, int mi){ //To darken selected digit of uid and then printing the entire digit in main add item menu
   if (page == pg && menuitem == mi && uidcur==1){
    display.setCursor(15, 30);
    display.setTextColor(WHITE, BLACK);
    display.print(u1);
    display.setTextColor(BLACK, WHITE);
    display.setCursor(35, 30);
    display.print(u2);
    display.setCursor(55, 30);
    display.print(u3);
    uid=u1*100 + u2*10 + u3;
    display.display();
   }
    else if (page == pg && menuitem == mi && uidcur==2){
    display.setCursor(35, 30);
    display.setTextColor(WHITE, BLACK);
    display.print(u2);
    display.setTextColor(BLACK, WHITE);
    display.setCursor(15, 30);
    display.print(u1);
    display.setCursor(55, 30);
    display.print(u3);
    uid=u1*100 + u2*10 + u3;
    display.display();
    }
    else if (page == pg && menuitem == mi && uidcur==3){
    display.setCursor(55, 30);
    display.setTextColor(WHITE, BLACK);
    display.print(u3);
    display.setTextColor(BLACK, WHITE);
    display.setCursor(15, 30);
    display.print(u1);
    display.setCursor(35, 30);
    display.print(u2);
    uid=u1*100 + u2*10 + u3;
    display.display();
    }
}

void countposiselect(){ //To darken selected digit of count and then printing the entire digit in main add item menu
   if (page == 10 && submenuitem == 2 && positem==1){
    display.setCursor(5, 30);
    display.setTextColor(WHITE, BLACK);
    display.print(c1);
    display.setTextColor(BLACK, WHITE);
    display.setCursor(20, 30);
    display.print(c2);
    display.setCursor(35, 30);
    display.print(c3);
    display.setCursor(50, 30);
    display.print(c4);
    display.setCursor(65, 30);
    display.print(c5);
    ct=c1*10000 + c2*1000 + c3*100 + c4*10 + c5;
    display.display();
   }
    else if (page == 10 && submenuitem == 2 && positem==2){
    display.setCursor(20, 30);
    display.setTextColor(WHITE, BLACK);
    display.print(c2);
    display.setTextColor(BLACK, WHITE);
    display.setCursor(5, 30);
    display.print(c1);
    display.setCursor(35, 30);
    display.print(c3);
    display.setCursor(50, 30);
    display.print(c4);
    display.setCursor(65, 30);
    display.print(c5);
    ct=c1*10000 + c2*1000 + c3*100 + c4*10 + c5;
    display.display();
    }
    else if (page == 10 && submenuitem == 2 && positem==3){
    display.setCursor(35, 30);
    display.setTextColor(WHITE, BLACK);
    display.print(c3);
    display.setTextColor(BLACK, WHITE);
    display.setCursor(5, 30);
    display.print(c1);
    display.setCursor(20, 30);
    display.print(c2);
    display.setCursor(50, 30);
    display.print(c4);
    display.setCursor(65, 30);
    display.print(c5);
    ct=c1*10000 + c2*1000 + c3*100 + c4*10 + c5;
    display.display();
    }
    else if (page == 10 && submenuitem == 2 && positem==4){
    display.setCursor(50, 30);
    display.setTextColor(WHITE, BLACK);
    display.print(c4);
    display.setTextColor(BLACK, WHITE);
    display.setCursor(5, 30);
    display.print(c1);
    display.setCursor(20, 30);
    display.print(c2);
    display.setCursor(35, 30);
    display.print(c3);
    display.setCursor(65, 30);
    display.print(c5);
    ct=c1*10000 + c2*1000 + c3*100 + c4*10 + c5;
    display.display();
    }
    else if (page == 10 && submenuitem == 2 && positem==5){
    display.setCursor(65, 30);
    display.setTextColor(WHITE, BLACK);
    display.print(c5);
    display.setTextColor(BLACK, WHITE);
    display.setCursor(5, 30);
    display.print(c1);
    display.setCursor(20, 30);
    display.print(c2);
    display.setCursor(35, 30);
    display.print(c3);
    display.setCursor(50, 30);
    display.print(c4);
    ct=c1*10000 + c2*1000 + c3*100 + c4*10 + c5;
    display.display();
    }
}

void displayIntMenuPage(String menuItem, int value) //Function for Contrast adjustment
{
    display.setTextSize(1);
    display.clearDisplay();
    display.setTextColor(BLACK, WHITE);
    //wifilogo();
    display.setCursor(15, 0);
    display.print(menuItem);
    display.drawFastHLine(0,10,83,BLACK);
    display.setCursor(25, 20);
    display.print("Value");
    display.setTextSize(2);
    display.setCursor(25, 30);
    display.print(value);
    display.setTextSize(2);
    display.display();
}

void setContrast(){
    display.setContrast(contrast);
    display.display();
  }

void displayMenuItem(String item, int position, boolean selected) //Function for menu item highlight
{
    if(selected)
    {
      display.setTextColor(WHITE, BLACK);
    }else
    {
      display.setTextColor(BLACK, WHITE);
    }
    display.setCursor(0, position);
    display.print(">"+item);
}

void tarescale(){
    scale.tare();
    display.setTextSize(1);
    display.clearDisplay();
    display.setTextColor(BLACK, WHITE);
    display.setCursor(15, 10);
    display.print("Tare Done!"); 
    display.setCursor(5, 25);
    display.print("Scale weight resetted to 0");
    display.display();
    delay(1000);
    menuitem=1;
    page=2;
}

void getstock(int ad1, int ad2, int ad3, int ad4, int ad5, int ad6, int ad7, int ad8, int ad9){
    String uidString = String(uid);
    String wtString = String(wt);
    String ctString = String(ct);
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(BLACK, WHITE);
    //wifilogo();
    //display.setCursor(0, 0);
    //display.print(uidaddr);
    display.setCursor(20,0);
    display.print("Page:");
    display.print(stockscroll);
    //display.setCursor(20,0);
    //display.print(pwtaddr);
    //display.setCursor(65,0);
    //display.print(pctaddr);
    display.setCursor(0, 10);
    display.print("UID");
    display.setCursor(25,10);
    display.print("PtWT");
    display.setCursor(60, 10);
    display.print("PtCT");
    
     display.setCursor(0, 20);
     display.print(EEPROM.get(ad1,uidString));
     display.setCursor(25, 20);
     display.print(EEPROM.get(ad2,wtString));
     display.setCursor(60, 20);
     display.print(EEPROM.get(ad3,ctString));
     
     
     display.setCursor(0,30);
     display.print(EEPROM.get(ad4,uidString));
     display.setCursor(25, 30);
     display.print(EEPROM.get(ad5,wtString));
     display.setCursor(60, 30);
     display.print(EEPROM.get(ad6,ctString));
     
     display.setCursor(0,40);
     display.print(EEPROM.get(ad7,uidString));
     display.setCursor(25, 40);
     display.print(EEPROM.get(ad8,wtString));  
     display.setCursor(60, 40);
     display.print(EEPROM.get(ad9,ctString));
     display.display();
}

void viewstock(){
  
   if(stockscroll==1){ //1-3
       getstock(0,12,24,36,48,60,72,84,96);
       display.display();
     }
     else if(stockscroll==2){ //4-6
       getstock(108,120,132,144,156,168,180,192,204);
       display.display();
     }
     else if(stockscroll==3){ //7-9
       getstock(216,228,240,252,264,276,288,300,312);
       //getstock(4896,4908,4920,4932,4944,4956,4968,4980,4992);
       display.display();
     }
     else if(stockscroll==4){ //10-12
       getstock(324,336,348,360,372,384,396,408,420);
       display.display();
     }
     else if(stockscroll==5){ //13-15
       getstock(432,444,456,468,480,492,504,516,528);
       display.display();
     }
     else if(stockscroll==6){ //16-18
       getstock(540,552,564,576,588,600,612,624,648);
       display.display();
     }
     else if(stockscroll==7){ 
       getstock(660,672,684,696,708,720,732,744,756);
       display.display();
     }
     else if(stockscroll==8){ 
       getstock(768,780,792,804,816,828,840,852,864);
       display.display();
     }
     else if(stockscroll==9){ 
       getstock(876,888,900,912,924,948,960,972,984);
       display.display();
     }
     else if(stockscroll==10){ 
       getstock(996,1008,1020,1032,1044,1056,1068,1080,1092);
       display.display();
     }
     else if(stockscroll==11){ 
       getstock(1104,1116,1128,1140,1152,1164,1176,1188,1200);
       display.display();
     }
     else if(stockscroll==12){ 
       getstock(1212,1224,1248,1260,1272,1284,1296,1308,1320);
       display.display();
     }
     else if(stockscroll==13){ 
       getstock(1332,1344,1356,1368,1380,1392,1404,1416,1428);
       display.display();
     }
     else if(stockscroll==14){ 
       getstock(1440,1452,1464,1476,1488,1500,1512,1524,1548);
       display.display();
     }
     else if(stockscroll==15){ 
       getstock(1560,1572,1584,1596,1608,1620,1632,1644,1656);
       display.display();
     }
     else if(stockscroll==16){ 
       getstock(1668,1680,1692,1704,1716,1728,1740,1752,1764);
       display.display();
     }
     else if(stockscroll==17){ 
       getstock(1776,1788,1800,1812,1824,1848,1860,1872,1884);
       display.display();
     }
     else if(stockscroll==18){ 
       display.clearDisplay();
       display.setTextSize(1);
       display.setTextColor(BLACK, WHITE);
       display.setCursor(20,0);
       display.print("Page:");
       display.print(stockscroll);
       display.setCursor(0, 10);
       display.print("EEPROM ADDRESS");
       display.setCursor(0,20);
       display.print("UID");
       display.setCursor(25,20);
       display.print("PtWT");
       display.setCursor(60, 20);
       display.print("PtCT");
       display.setCursor(0, 30);
       display.print(EEPROM.get(3840, gtuidaddrS));
       display.setCursor(25, 30);
       display.print(EEPROM.get(3852, gtpwtaddrS));
       //display.print(pwtaddrS);
       display.setCursor(60, 30);
       display.print(EEPROM.get(3864, gtpctaddrS));
       //display.print(pctaddrS);
       display.setCursor(0, 40);
       display.print(uidaddr);
       display.setCursor(25, 40);
       display.print(pwtaddr);
       display.setCursor(60, 40);
       display.print(pctaddr);
       display.display();
     }    
}


void drawMenu() //Main Menu function 
  {
    //Serial.println("Serial port is back!!");
  if (page==1) //Main page header
  {    
    display.setTextSize(1);
    display.clearDisplay();
    display.setTextColor(BLACK, WHITE);
    display.setCursor(15, 0);
    display.print("NeoThermal"); //Change to alter main page title
    display.drawFastHLine(0,10,83,BLACK);
    //wifilogo();
    //display.setCursor(0, 15);

   if(menuitem==1 && frame ==1) //Weight option will be darkened
    {   
      displayMenuItem(menuItem1, 15,true);
      displayMenuItem(menuItem2, 25,false);
      displayMenuItem(menuItem3, 35,false);
    }
    else if(menuitem == 2 && frame == 1) //Tare scale option will be darkened
    {
      displayMenuItem(menuItem1, 15,false);
      displayMenuItem(menuItem2, 25,true);
      displayMenuItem(menuItem3, 35,false);
    }
    else if(menuitem == 3 && frame == 1) //Add item option will be darkened
    {
      displayMenuItem(menuItem1, 15,false);
      displayMenuItem(menuItem2, 25,false);
      displayMenuItem(menuItem3, 35,true);
    }
     else if(menuitem == 4 && frame == 2) //Calibration option will be darkened
    {
      displayMenuItem(menuItem2, 15,false);
      displayMenuItem(menuItem3, 25,false);
      displayMenuItem(menuItem4, 35,true);
    }

      else if(menuitem == 3 && frame == 2) //Add item option will be darkened
    {
      displayMenuItem(menuItem2, 15,false);
      displayMenuItem(menuItem3, 25,true);
      displayMenuItem(menuItem4, 35,false);
    }
    else if(menuitem == 2 && frame == 2) //Tare scale option will be darkened
    {
      displayMenuItem(menuItem2, 15,true);
      displayMenuItem(menuItem3, 25,false);
      displayMenuItem(menuItem4, 35,false);
    }
    
    else if(menuitem == 5 && frame == 3) //Contrast option will be darkened
    {
      displayMenuItem(menuItem3, 15,false);
      displayMenuItem(menuItem4, 25,false);
      displayMenuItem(menuItem5, 35,true);
    }

    else if(menuitem == 6 && frame == 4) //Reset option will be darkened
    {
      displayMenuItem(menuItem4, 15,false);
      displayMenuItem(menuItem5, 25,false);
      displayMenuItem(menuItem6, 35,true);
    }
    
      else if(menuitem == 5 && frame == 4) //Contrast option will be darkened
    {
      displayMenuItem(menuItem4, 15,false);
      displayMenuItem(menuItem5, 25,true);
      displayMenuItem(menuItem6, 35,false);
    }
      else if(menuitem == 4 && frame == 4) //Calibration option will be darkened
    {
      displayMenuItem(menuItem4, 15,true);
      displayMenuItem(menuItem5, 25,false);
      displayMenuItem(menuItem6, 35,false);
    }
    else if(menuitem == 3 && frame == 3) //Add item option will be darkened
    {
      displayMenuItem(menuItem3, 15,true);
      displayMenuItem(menuItem4, 25,false);
      displayMenuItem(menuItem5, 35,false);
    }
        else if(menuitem == 2 && frame == 2) //Tare scale option will be darkened
    {
      displayMenuItem(menuItem2, 15,true);
      displayMenuItem(menuItem3, 25,false);
      displayMenuItem(menuItem4, 35,false);
    }
    else if(menuitem == 4 && frame == 3) //Calibration option will be darkened
    {
      displayMenuItem(menuItem3, 15,false);
      displayMenuItem(menuItem4, 25,true);
      displayMenuItem(menuItem5, 35,false);
    }
     display.display();
   
  }
  
  else if (page==2 && menuitem == 1) //This page displays current weight of object placed 
  {    
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(BLACK, WHITE);
    display.setCursor(0, 0);
    display.print("Current Weight");
    display.drawFastHLine(0,10,83,BLACK);
    display.setTextColor(BLACK, WHITE);
    display.setCursor(0, 15);
    display.print("Value in grams");
    display.setTextSize(2);
    display.setCursor(0, 30);
    Serial.println("Measuring Weight");
    reading = (scale.get_units(10)*1000);
    display.print(reading); //Previously declared object scale is used to get the weight value where the number in bracket indicates number of values averaged and *1000 converts Kg to gms value
    display.display();  
    }
  
  else if (page==2 && menuitem == 2) //ADD UID
  {
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(BLACK, WHITE);
    display.setCursor(20, 0);
    display.print("Add UID");
    display.drawFastHLine(0,10,83,BLACK);
    //wifilogo();
    display.setTextColor(BLACK, WHITE);
    display.setCursor(0, 15);
    display.print("Enter 3 digits");
    display.setTextSize(2);
    uidposiselect(2,2);
    display.display(); 
  }

  else if (page==3 && menuitem ==2){
    if(uid != 0){
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(BLACK, WHITE);
    display.setCursor(20, 0);
    display.print("Add UID");
    display.drawFastHLine(0,10,83,BLACK);
    //wifilogo();
    display.setCursor(0,15);
    display.setTextColor(BLACK, WHITE);
    display.print(">UID: BP-"); 
    display.print(uid);
    
    String uidString=String(uid);
 
    while( i < 3781 && gtud != uidString){
      //for(i=0; i<=uidaddr; i=i+36){ 
       EEPROM.get(i,gtud);
       display.setCursor(65, 0);
       //display.print(i);
       flag=0;
       if((gtud == uidString)&&(uidString != "0")){
        EEPROM.get(i+12, gtwt);
        EEPROM.get(i+24, gtct);
        flag=1;
        break;
       }
       i=i+36;
       //delay(500);
  }
       if(flag==1){
       display.setCursor(0, 30);
       display.setTextColor(WHITE, BLACK);
       display.print("UID Found!:");
       display.print(gtud);
       /*display.setCursor(0, 40); //Shows eeprom address of found uid, uncomment for troubleshooting
       display.print(i);
       display.setCursor(30, 40);
       display.print(i+12);
       display.setCursor(60, 40);
       display.print(i+24);*/
       display.display();
       delay(2500);
       menuitem=2;
       page=4;
       }
       
       if(flag==0){
        i=0;
       display.setCursor(0, 30);
       display.setTextColor(WHITE, BLACK);
       display.print("UID not found");
       display.setCursor(10, 40);
       display.setTextColor(WHITE, BLACK);
       display.print("ADD PART");
       display.display();
       delay(2500);
       menuitem=2;
       page=9;
      }
   }
   else if(uid==0){
     
     display.clearDisplay();
     display.setTextSize(2);
     display.setTextColor(BLACK, WHITE);
     display.setCursor(10, 5);
     display.print("ERROR!");
     display.setTextColor(WHITE, BLACK);
     display.setCursor(10, 25);
     display.setTextSize(1);
     display.print("Enter Valid");
     display.setCursor(30, 35);
     display.print("UID!");
     display.display();
     delay(3000);
     menuitem=2;
     page=2;   
   }
 }
  else if (page==4 && menuitem==2){
    wt = gtwt.toFloat();
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(BLACK, WHITE);
    display.setCursor(20, 0);
    display.print("Add UID");
    display.drawFastHLine(0,10,83,BLACK);
    //wifilogo();
    display.setCursor(0,15);
    display.setTextColor(BLACK, WHITE);
    display.print(">UID: BP-"); 
    display.print(uid);
    display.setCursor(0,25);
    display.setTextColor(BLACK, WHITE);
    display.print(">Part WT:");
    display.print(wt);
    display.setCursor(0,35);
    display.setTextColor(WHITE, BLACK);
    display.print(">Find Part Cnt");
    display.display();
    reading = (scale.get_units(10)*1000);
  }
  else if (page==5 && menuitem==2){
    //reading = (scale.get_units(10)*1000);
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(BLACK, WHITE);
    display.setCursor(15, 0);
    display.print("PART COUNT");
    display.drawFastHLine(0,10,83,BLACK);
    //wifilogo();
    display.setCursor(0,15);
    display.print("Part Count is:");
    fct = reading/wt;
    ct = round(fct);
    display.setTextSize(2);
    display.setTextColor(BLACK, WHITE);
    display.setCursor(0,30);
    display.print(ct);
    display.display();
  }
  else if (page==6 && menuitem==2){
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(BLACK, WHITE);
    //wifilogo();
    display.setCursor(0,0);
    display.print(">UID: BP-"); 
    display.print(uid);
    display.setCursor(0,10);
    display.print(">Prt WT:");
    display.print(wt);
    display.setCursor(0,20);
    display.print(">Prt CNT:");
    display.print(ct);
    if(flag==1){
    display.setCursor(10,30);
    display.setTextColor(WHITE, BLACK);
    display.print("Press OK to");
    display.setCursor(0,40);
    display.setTextColor(WHITE, BLACK);
    display.print("UPDATE IN MEM");
    display.display();
    
    }
    else if(flag==0){
    display.setCursor(10,30);
    display.setTextColor(WHITE, BLACK);
    display.print("Press OK to");
    display.setCursor(10,40);
    display.setTextColor(WHITE, BLACK);
    display.print("ADD IN MEM");
    display.display();
    
    }
  }
  else if (page==7 && menuitem==2){
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(BLACK, WHITE);
    display.setCursor(5,0);
    display.print("CONFIRM EXIT?");
    if (cnfrmext==2){
      display.setTextColor(WHITE, BLACK);
    }
    else{
      display.setTextColor(BLACK, WHITE);
    }
    display.setTextSize(2);
    display.setCursor(0,30);
    display.print(">YES");
    if (cnfrmext==1){
      display.setTextColor(WHITE, BLACK);
    }
    else{
      display.setTextColor(BLACK, WHITE);
    }
    display.setTextSize(2);
    display.setCursor(0,10);
    display.print(">NO");

    display.display();
  }
  else if (page==8 && menuitem==2){
   if(flag==1){
    String uidString = String(uid);
    String wtString = String(wt);
    String ctString = String(ct);
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(BLACK, WHITE);
    display.setCursor(10,0);
    display.print("UID: BP-");
    display.print(uid);
    EEPROM.put(i,uidString); 
    EEPROM.put(i+12,wtString);
    EEPROM.put(i+24,ctString); 
    display.setCursor(10,20);
    display.print("UID updated");
    display.setCursor(0,30);
    display.print("in EEPROM MEM");
    display.display();
  }
  else if(flag==0){
    String uidString = String(uid);
    String wtString = String(wt);
    String ctString = String(ct);
    String uidaddrS = String(uidaddr);
    String pctaddrS = String(pctaddr);
    String pwtaddrS = String(pwtaddr);
    if((prevuid != uid)&&(prevuid != 0)){
     uidaddr = pctaddr + sizeof(ctString);
     pwtaddr = uidaddr + sizeof(uidString);
     pctaddr = pwtaddr + sizeof(wtString);
    }
    else if((prevuid != uid)&&(prevuid == 0)){
     pwtaddr = uidaddr + sizeof(uidString);
     pctaddr = pwtaddr + sizeof(wtString);
    }
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(BLACK, WHITE);
    display.setCursor(10,0);
    display.print("UID: BP-");
    display.print(uid);
    EEPROM.put(uidaddr,uidString); 
    EEPROM.put(pwtaddr,wtString);
    EEPROM.put(pctaddr,ctString);
    EEPROM.put(1896, uidaddrS);
    EEPROM.put(1908, pwtaddrS);
    EEPROM.put(1920, pctaddrS);
    EEPROM.commit(); 
    prevuid=uid;
    display.setCursor(15,20);
    display.print("UID added");
    display.setCursor(0,30);
    display.print("in EEPROM MEM");
    display.display();
  }
 }

  else if (page==9 && menuitem==2){
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(BLACK, WHITE);
    //wifilogo();
    display.setCursor(20, 0);
    display.print("Add Part");
    display.drawFastHLine(0,10,83,BLACK);
    display.setCursor(0,15);
    display.setTextColor(BLACK, WHITE);
    display.print(">UID: BP-"); 
    display.print(uid);
    display.setCursor(0, 25);
    reading = (scale.get_units(10)*1000);

    if (submenuitem==2) 
    {
      display.setTextColor(WHITE, BLACK);
    }
    else 
    {
      display.setTextColor(BLACK, WHITE);
    }    
    display.print(">Part Cnt:");
    display.print(ct);
    display.setCursor(0, 25);
       
    if (submenuitem==3) 
    { 
      display.setTextColor(WHITE, BLACK);
    }
    else 
    {
      display.setTextColor(BLACK, WHITE);
    }  
    display.setCursor(0, 35);
    display.print(">Find Part WT");
    
    display.display();
  }
  
  else if (page==10 && menuitem==2 && submenuitem==2) //Add Count 
    {
     display.clearDisplay();
     display.setTextSize(1);
     display.setTextColor(BLACK, WHITE);
     display.setCursor(20, 0);
     display.print("Add Count");
     display.drawFastHLine(0,10,83,BLACK);
     //wifilogo();
     display.setTextColor(BLACK, WHITE);
     display.setCursor(0, 15);
     display.print("Enter 5 digits");
     display.setTextSize(2);
     countposiselect();//enter function for count here
     display.display();  
    }
     else if (page==11 && menuitem==2 && submenuitem==3) //Add Weight 
    {
     //reading = (scale.get_units(10)*1000);
      if(ct > 0){
     display.clearDisplay();
     display.setTextSize(1);
     display.setTextColor(BLACK, WHITE);
     display.setCursor(10, 0);
     display.print("Part Weight");
     display.drawFastHLine(0,10,83,BLACK);
     //wifilogo();
     display.setTextColor(BLACK, WHITE);
     display.setCursor(0, 15);
     display.print("Weight in gms:");
     display.setTextSize(2);
     wt = reading/ct;
     display.setCursor(0, 30);
     display.print(wt);
     display.display();
      }
      else if(ct <=0){
     display.clearDisplay();
     display.setTextSize(2);
     display.setTextColor(BLACK, WHITE);
     display.setCursor(10, 5);
     display.print("ERROR!");
     display.setTextColor(WHITE, BLACK);
     display.setCursor(10, 25);
     display.setTextSize(1);
     display.print("Enter Valid");
     display.setCursor(20, 35);
     display.print("Count!");
     display.display();
     delay(3000);
     menuitem=2;
     submenuitem=2;
     page=10;   
      }
     //enter function for weight here
     display.display();  
    }    
 
  else if (page==2 && menuitem == 3) //VIEW STOCK
  {  
     viewstock();
  }
  
  else if(page==2 && menuitem == 4){
    k=0;
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(BLACK, WHITE);
    display.setCursor(15, 0);
    display.print("Online DB");
    display.drawFastHLine(0,10,83,BLACK);
    ////wifilogo();
    if (odbitem==1) 
    {
      display.setTextColor(WHITE, BLACK);
    }
    else 
    {
      display.setTextColor(BLACK, WHITE);
    }
    display.setCursor(0, 15);    
    display.print(">Upload Data");
       
    if (odbitem==2) 
    { 
      display.setTextColor(WHITE, BLACK);
    }
    else 
    {
      display.setTextColor(BLACK, WHITE);
    }  
    display.setCursor(0, 25);
    display.print(">Credentials");
    
    if (odbitem==3) 
    { 
      display.setTextColor(WHITE, BLACK);
    }
    else 
    {
      display.setTextColor(BLACK, WHITE);
    }  
    display.setCursor(0, 35);
    display.print(">Get UID");
    display.display();
  }

  else if (page == 3 && menuitem==4 && odbitem==1){
  if (Serial.available()) {      // If anything comes in Serial (USB),
    Serial2.write(Serial.read());   // read it and send it out Serial2 (to WizFi360)
  }

  if (Serial2.available()) {     // If anything comes in Serial2 (to WizFi360)
    Serial.write(Serial2.read());   // read it and send it out Serial (USB)
  }
  if(a==0){
    Serial2.write("AT\r\n");
    //delay(2000);
    a=1;
    if(a==1){
    Serial2.write("AT+CWMODE_CUR=1\r\n");
    //delay(2000);
    a=2;
    }
    if(a==2){
    Serial2.write("AT+CWJAP_CUR=\"Chaitanya'sS21FE\",\"ok123456\"\r\n"); 
    //delay(2000);
    a=3;
    }
    if(a==3){
    Serial2.write("AT+CIPSTA_CUR?\r\n");
    //delay(2000);
    a=4;
    }
    if(a==4){
    Serial2.write("AT+CIPSSLCCONF=2\r\n");
    //delay(2000);
    a=5;
    }
    if(a==5){
    Serial2.write("AT+CASEND=1\n\r-----BEGIN CERTIFICATE-----\nMIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF\nb24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL\nMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv\nb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj\nca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM\n9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw\nIFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6\nVOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L\n93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm\njgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC\nAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA\nA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI\nU5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs\nN+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv\no/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU\n5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy\nrqXRfboQnoZsG4q5WTP468SQvvG5\n-----END CERTIFICATE-----\r\n");
    //delay(2000);
    a=6;
    }
    if(a==6){ 
    Serial2.write("AT+AWSPKSEND=1\n\r-----BEGIN RSA PRIVATE KEY-----\nMIIEpQIBAAKCAQEAzxw69KLzEJU06h4vxsfEt4qHjLdySiosSErGXOz0WdpXIpHf\na5zxOPxCLFZzR2visaDp7m+ryGTJWFN1oEp0/yZNDxsBY0b2wLYA/felD40++6G5\nA9ayNx3YIIP0zTkAfviOYdDR3BVUFbIybkCUreJPjRPRUFb8wQ9aN1kpvNgMBWV4\nKfuKUUkf4z52mstHEb4hFjeX4abJAZYEt4dG8+5DNPd9AEOVOCE4TRBc30PPrzbP\n7Ev7FTDdDg+wrhFeKBCbDqK1+xwjYsnRriYBu0A9vjHRQdf5tkQH2yJU45cbtJ6D\n+oECH41Lzgh1YKFt6O9xYhjfLEECeNo9sjW1OwIDAQABAoIBAE4Ombmx4GITmgnS\nrrcAe4ehUk0appyFIINuiyxisgVbYRPKXqY0VEXh7R7AxlnYs2u29fPDar7wHWKI\nsgBjj4zKZqiWyQMdr8oZzm3pc/BUj7RO02g69pgHS3mVwiHGpgU0sJT1GuMTtskm\njBM5i8+tR8Yn/e+FmWU54AqUNELTi+LFyHMVOS9SPk/7tNV0FoDTxxiw2R7fEwu3\nV3hhIU4fxAAeh6eMQ6Ut77KX4Xp9K7DSeMHLz3zMmLPyOmybX1hjwAPPZx+vUSDx\nlZpC1smrRckhyTvElgx4iRbDypz1R2axI5xFAGy/bM0vY8HrDY2jPESUN4CIeqNN\no2e4DiECgYEA/pbxBIGb7W8hLwUPyu6cNh2DnW173yTPdz8KqRTmeU7JGUlU939a\n01r5t8hW9ncPNol7sar62ZwxZWUpdmIgTKLceDypKi54Gz50ju3EbyOlZmITWZh8\nO1G8ciPvYb+nxzUmKHUpMszLFaz8hSS0XQ/ZtF/MsVeWNbHLQXhHz0UCgYEA0EH0\nJh+L4vt+EpdaHA1EiqnpwYJC5U6vv8JakieeF1KiOA8DaPWSSQqzHyu4J9K5R/P1\no8l1GkCyoZFSMy2Tf9dXHzfM6EztJ4XFgFFFPwzTRUJreI65S2DwAAUWqVaY2JTw\nhNbiMBEiC4vBmGnfjl/FqgX7deBGhdiXmeADen8CgYEA0fVpj23USlv74esquxFN\ngtOUV6CTJ9QTxSQYhpjV+fUfo9r2V6aQIP5GM2rlTR2jTjbT7BI2DoDhu91R9G+4\nc3tcl0xvtnncU5uORNGRzpZ3MZhwnNNEoScnYnqAUPzeQUtzzKnS8DI0ygt/tc4v\ncRBBWqAnD5pMJrwaBERN9IECgYEAtTzQhuTpTk3jd7Zz2vnI7ovUPG1qXjjORimT\nvKHxuQZW2kZmh08/UYWYQMZBa5a9W9r5qOJHoOMxEd5wFM3TEWyMC0T6dCeOM9j8\n+iDADJDSw/F7qd07cFgaRUooYJJWThXAAzsmeQJQCJBFmKh6v2KlmMPABON7PDw0\nItuK620CgYEA6l2H3c9L/GnS7ONSIzTQa9IIfp6+Xt3Jd5W7UWlww/HwPwr40+6c\nZvEMn9qcXP2BzvJ7HQHIAhuXa2OujeXFMs1ILoWlPqqkTAZbX5eDIFEzM0bYyRQe\nbHWXI1LoG8xD3z8E7NwkfRFTlB+zXN/jtKFnUcjbmuAP2drI8O72b1g=\n-----END RSA PRIVATE KEY-----\r\n");                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
    //delay(2000);
    a=7;
    }
    if(a==7){ 
    Serial2.write("AT+CLICASEND=1\n\r-----BEGIN CERTIFICATE-----\nMIIDWTCCAkGgAwIBAgIUXiVpUrwMWVNT3XtEu4Gh1+R8A0MwDQYJKoZIhvcNAQEL\nMIIDWTCCAkGgAwIBAgIUXiVpUrwMWVNT3XtEu4Gh1+R8A0MwDQYJKoZIhvcNAQEL\nSW5jLiBMPVNlYXR0bGUgU1Q9V2FzaGluZ3RvbiBDPVVTMB4XDTIyMDkwMzA5MTI0\nNFoXDTQ5MTIzMTIzNTk1OVowHjEcMBoGA1UEAwwTQVdTIElvVCBDZXJ0aWZpY2F0\nZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM8cOvSi8xCVNOoeL8bH\nxLeKh4y3ckoqLEhKxlzs9FnaVyKR32uc8Tj8QixWc0dr4rGg6e5vq8hkyVhTdaBK\ndP8mTQ8bAWNG9sC2AP33pQ+NPvuhuQPWsjcd2CCD9M05AH74jmHQ0dwVVBWyMm5A\nlK3iT40T0VBW/MEPWjdZKbzYDAVleCn7ilFJH+M+dprLRxG+IRY3l+GmyQGWBLeH\nRvPuQzT3fQBDlTghOE0QXN9Dz682z+xL+xUw3Q4PsK4RXigQmw6itfscI2LJ0a4m\nAbtAPb4x0UHX+bZEB9siVOOXG7Seg/qBAh+NS84IdWChbejvcWIY3yxBAnjaPbI1\ntTsCAwEAAaNgMF4wHwYDVR0jBBgwFoAUrq60D6TqKRMVsjw7Sd0K4hEsCn8wHQYD\nVR0OBBYEFMdNUr6f3U2JLTGNHu5DNbTKRnjLMAwGA1UdEwEB/wQCMAAwDgYDVR0P\nAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4IBAQBnfcUs9HMAb5zOYqNIMsO+muMJ\n79dKR9rqSZp5tDvO3OSlSArUK4SVS3mArUT3FfAkb7Vcd51kxrAJxkgAsMJ4tg/m\nEwQSFtw8LmNnKb4VUbozsavJAGg2cu8V+b+EDwm2LZ/IK1ZYoIlScrvsPj/9r4CO\nWXv9OS1L1fSlzJtZzZVT6R7KmBh+A7meoS0Dne8m1D0m6TuzEXMTsUDifQ9qSr1/\n87JZpLb7IQ6bDws0ySJGW3hNlYuMi7QdS6TVXoApJMG8h6dMGXNPCGbBhHurYsV6\nrI3607F1MW+UPsUhyN9zvLXW7st4L5tro/hDIJaHXVI6R/3CeR7+VAw7m18s\n-----END CERTIFICATE-----\r\n");
    //delay(2000);
    a=8;
    }
    if(a==8){ 
    Serial.write("AT+MQTTTOPIC=\"$aws/things/WiznetStockManager/shadow/update\",\"$aws/things/WiznetStockManager/shadow/get/rejected\"\r\n");
    delay(2000);
    a=9;
    }
    if(a==9){ 
    Serial.write("AT+MQTTSET=\"\",\"\",\"WiznetStockManager\",60\r\n");
    delay(2000);
    a=10;
    }
    if(a==10){ 
    Serial.write("AT+AWSCON=\"a3cs5exzi4t1ck-ats.iot.us-east-1.amazonaws.com\"\r\n");
    delay(5000);
    a=11;
    }
    if(a==11){ 
    Serial.write("AT+MQTTPUB=\"{\"state\":{\"reported\":{\"Part UID\":\"110\",\"Part Weight\":\"11.23\"}}}\"\r\n");
    delay(3000);
    a=12;
    }
    if(a==12){ 
    Serial2.write("AT+MQTTDIS\r\n");
    delay(1000);
    }
  }
}
   
  else if (page == 4 && menuitem==4 && odbitem==2){
     display.setTextSize(1);
     display.clearDisplay();
     display.setTextColor(BLACK, WHITE);
     ////wifilogo();
     display.setCursor(25, 0);
     display.print("DB URL");
     display.drawFastHLine(0,10,83,BLACK);
     display.setCursor(0, 15);
     //display.print(DATABASE_URL);
     display.display();
  }
  else if (page == 5 && menuitem==4 && odbitem==2){
     display.setTextSize(1);
     display.clearDisplay();
     display.setTextColor(BLACK, WHITE);
     ////wifilogo();
     display.setCursor(20, 0);
     display.print("DB EMAIL");
     display.drawFastHLine(0,10,83,BLACK);
     display.setCursor(0, 15);
     //display.print(USER_EMAIL);
     display.display();
  }
    else if (page == 6 && menuitem==4 && odbitem==3){    
  /*    
       unsigned long currentMillis = millis();
    if(currentMillis - previousMillis >= interval) {
     // Check WiFi connection status
    if ((WiFiMulti.run() == WL_CONNECTED)) {
      uidcam = httpGETRequest(serverNamecam);  
      // save the last HTTP GET Request
      previousMillis = currentMillis;
    }
  }*/
     display.setTextSize(1);
     display.clearDisplay();
     display.setTextColor(BLACK, WHITE);
     ////wifilogo();
     display.setCursor(10, 0);
     //display.print(WiFi.status());
     display.print("GET UID");
     display.drawFastHLine(0,10,83,BLACK);
     display.setCursor(0, 15);
     display.print("UID:");
     //display.print(uidcam);/
     display.display();
  }


  else if (page==2 && menuitem == 5){
    display.setTextSize(1);
    display.clearDisplay();
    display.setTextColor(BLACK, WHITE);
    display.setCursor(30, 0);
    display.print("WIFI");
    //display.print(wifistate); 
    display.drawFastHLine(0,10,83,BLACK);
    ////wifilogo();
    display.setTextColor(WHITE, BLACK);
    display.setCursor(0, 35);
    //display.print(EEPROM.get(3792,gtwifissid));
    //display.print(EEPROM.get(4200,gtwifipsk));
    display.setCursor(0, 15);

    if (wifimenuitem==1) 
    { 
      display.setTextColor(WHITE, BLACK);
    }
    else 
    {
      display.setTextColor(BLACK, WHITE);
    }
    display.print(">WIFI STS:");
    if(wifistate==1){
      display.print("OFF");
    }
    else if(wifistate==2){
      display.print("ON"); 
    }
    display.setCursor(0, 25);
    
    if (wifimenuitem==2) 
    {
      display.setTextColor(WHITE, BLACK);
    }
    else 
    {
      display.setTextColor(BLACK, WHITE);
    }
        
    display.print(">WIFI CREDS");
    display.display();
  }

  else if (page==3 && menuitem==5 && wifimenuitem==1){
    display.setTextSize(1);
    display.clearDisplay();
    display.setTextColor(BLACK, WHITE);
    ////wifilogo();
    display.setCursor(0, 0);
    display.print("WIFI STATUS");
    //display.print(test);
    //display.print(wifistate); 
    display.drawFastHLine(0,10,83,BLACK);
    display.setTextColor(WHITE, BLACK);
    if(wifistate==1){
      
      display.setCursor(0, 15);
      display.print(">WIFI STS: OFF");
      //WiFi.mode(WIFI_OFF);
      display.setTextColor(BLACK, WHITE);
      display.setCursor(30, 25);
      display.print("WIFI");
      display.setCursor(5, 35);
      display.print("DISCONNECTED!");
    }
    else if(wifistate==2){
      display.setTextColor(BLACK, WHITE);
      if(onwifiitem==1){
            display.setCursor(0, 15);
            display.setTextColor(WHITE, BLACK);
            display.print(">WIFI STS: ON");
            display.setTextColor(BLACK, WHITE);
            display.setCursor(0, 25);
            display.print(">SAVED N/W");
            display.setCursor(0, 35);
            display.print(">NEW N/W");
      }
      else if(onwifiitem==2){
            display.setCursor(0, 15);
            display.setTextColor(BLACK, WHITE);
            display.print(">WIFI STS: ON");
            display.setCursor(0, 35);
            display.print(">NEW N/W");
            display.setTextColor(WHITE, BLACK);
            display.setCursor(0, 25);
            display.print(">SAVED N/W");
      }
      else if(onwifiitem==3){
            display.setCursor(0, 15);
            display.setTextColor(BLACK, WHITE);
            display.print(">WIFI STS: ON");
            display.setCursor(0, 25);
            display.print(">SAVED N/W");
            display.setTextColor(WHITE, BLACK);
            display.setCursor(0, 35);
            display.print(">NEW N/W");
      }
 
    }
    display.display();
  }
  else if (page==4 && menuitem==5 && wifimenuitem==1 && wifistate==2 && onwifiitem==2){
    display.setTextSize(1);
    display.clearDisplay();
    display.setTextColor(BLACK, WHITE);
    display.setCursor(15, 0);
    display.print("SAVED N/W");
    display.drawFastHLine(0,10,83,BLACK);
    //wifilogo();
  /*  
    if(WiFi.status()==3){
       display.setTextColor(WHITE, BLACK);
       display.setCursor(5, 15);
       display.print("CONNECTED to:");
       display.setCursor(0, 25);
       display.print(WiFi.SSID());
    }
    else if(WiFi.status()!=3){
       display.setTextColor(BLACK, WHITE);
       display.setCursor(5, 15);
       display.print("CONNECTING to:");
       display.setCursor(0, 25);
       display.print(WiFi.SSID());
    }
    display.display();     
  }
  else if (page==6 && menuitem==5 && wifimenuitem==1 && wifistate==2 && onwifiitem==3){
    display.setTextSize(1);
    display.clearDisplay();
    display.setTextColor(WHITE, BLACK);
    display.setCursor(5, 0);
    display.print("WiFi Details");
    display.setCursor(15, 10);
    display.print("Cleared!");
    display.setCursor(0, 20);
    display.print("Reconnect ESP");
    display.setCursor(0, 30);
    display.print("to WiFi using");
    display.setCursor(10, 40);
    display.print("Web Portal");
    display.display(); 
    wifiManager.resetSettings();
    wifiManager.autoConnect("Stock Counter WiFi Manager");
    test=2;
    menuitem=5;
    page=2;
    wifimenuitem=1;
    wifistate=2;*/
  }
  else if (page==5 && menuitem==5 && wifimenuitem==2){//SSID
    display.setTextSize(1);
    display.clearDisplay();
    display.setTextColor(BLACK, WHITE);
    display.setCursor(15, 0);
    display.print("WIFI SSID"); 
    display.drawFastHLine(0,10,83,BLACK);
    ////wifilogo();
    display.setCursor(0, 15);
    display.setTextColor(BLACK, WHITE);
    display.print("N/W SSID:");
    display.setCursor(0, 25);
    //display.print(WiFi.SSID());
    display.display();
  }
  else if (page==7 && menuitem==5 && wifimenuitem==2){//Password
    display.setTextSize(1);
    display.clearDisplay();
    display.setTextColor(BLACK, WHITE);
    display.setCursor(15, 0);
    display.print("WIFI PASS"); 
    display.drawFastHLine(0,10,83,BLACK);
    ////wifilogo();
    display.setCursor(0, 15);
    display.setTextColor(BLACK, WHITE);
    display.print("N/W PASSWORD:");
    display.setCursor(0, 25);
    //display.print(WiFi.psk());
    display.display();
  }
   else if (page==8 && menuitem==5 && wifimenuitem==2){//RSSI
    display.setTextSize(1);
    display.clearDisplay();
    display.setTextColor(BLACK, WHITE);
    display.setCursor(30, 0);
    display.print("RSSI"); 
    display.drawFastHLine(0,10,83,BLACK);
    ////wifilogo();
    display.setCursor(0, 15);
    display.setTextColor(BLACK, WHITE);
    display.print("RSSI:");
    //display.print(WiFi.RSSI());
    display.setCursor(0, 25);
    display.print("Quality:");
    display.setCursor(0, 35);/*
    if(WiFi.RSSI()>0){
       display.print("WIFI OFF");
    }
    else if(WiFi.RSSI()>-30){
       display.print("EXCELLENT");
    }
    else if(WiFi.RSSI()>-67){
       display.print("VERY GOOD");
    }
    else if(WiFi.RSSI()>-70){
       display.print("AVERAGE");
    }
    else if(WiFi.RSSI()>-80){
       display.print("NOT GOOD");
    }
    else if(WiFi.RSSI()>-90){
       display.print("UNUSABLE");
    }*/
    display.display();
  }
   else if (page==9 && menuitem==5 && wifimenuitem==2){//Local IP
    display.setTextSize(1);
    display.clearDisplay();
    display.setTextColor(BLACK, WHITE);
    display.setCursor(20, 0);
    display.print("WIFI IP"); 
    display.drawFastHLine(0,10,83,BLACK);
    ////wifilogo();
    display.setCursor(0, 15);
    display.setTextColor(BLACK, WHITE);
    display.print("Local IP:");
    display.setCursor(0, 25);
    //display.print(WiFi.localIP());
    display.display();
  }
  else if (page==2 && menuitem == 6){
    display.setTextSize(1);
    display.clearDisplay();
    display.setTextColor(BLACK, WHITE);
    display.setCursor(25, 0);
    display.print("OTHER"); 
    display.drawFastHLine(0,10,83,BLACK);
    ////wifilogo();
    display.setTextColor(WHITE, BLACK);
    display.setCursor(0, 15);
   
    if (othermenuitem==1) 
    { 
      display.setTextColor(WHITE, BLACK);
    }
    else 
    {
      display.setTextColor(BLACK, WHITE);
    }
    display.print(">CONTRAST:"); 
    display.print(contrast);
    display.setCursor(0, 25);
   
    if (othermenuitem==2) 
    {
      display.setTextColor(WHITE, BLACK);
    }
    else 
    {
      display.setTextColor(BLACK, WHITE);
    }    
    display.print(">CALIBRATION");
    display.setCursor(0, 35);
    
    if (othermenuitem==3) 
    {
      display.setTextColor(WHITE, BLACK);
    }
    else 
    {
      display.setTextColor(BLACK, WHITE);
    }
        
    display.print(">EEPROM CLEAR");
    display.display();
  }
    else if (page==3 && menuitem == 6 && othermenuitem==1){
       displayIntMenuPage("CONTRAST", contrast);
  }
    else if (page==4 && menuitem == 6 && othermenuitem==2){
       display.setTextSize(1);
       display.clearDisplay();
       display.setTextColor(BLACK, WHITE);
       display.setCursor(10, 0);
       display.print("CALIBRATION"); 
       display.drawFastHLine(0,10,83,BLACK);
       //wifilogo();
       display.setCursor(0, 15);
       display.print("Calib fctr:"); 
       display.setCursor(0, 25);
       display.print("10kg max Load"); 
       display.setCursor(0, 35);
       display.print("227850"); 
       display.display();
  }
    else if (page==5 && menuitem == 6 && othermenuitem==3){
      String clreeprm = "0";
      display.setTextSize(1);
      display.clearDisplay();
      display.setTextColor(BLACK, WHITE);
      //wifilogo();
      display.setCursor(5, 0);
      display.print("EEPROM CLEAR"); 
      display.drawFastHLine(0,10,83,BLACK);
      display.setTextColor(WHITE, BLACK);
      display.setCursor(0, 20);
      display.print("Memory Cleared");
      display.setCursor(0, 30);
      display.print("Successfully!");
      display.display();
      while(m<2000){
        display.print(m);
        EEPROM.put(m, clreeprm);
        EEPROM.put(1896, clreeprm);
        EEPROM.put(1908, clreeprm);
        EEPROM.put(1920, clreeprm);
        EEPROM.commit();
        m=m+12;
        uidaddr=pwtaddr=pctaddr=0;
      }
      delay(2000);
      menuitem=6;
      page=2;
  }
}






  
  

PCB:

The PCB is designed using Altium Design Software dedicated for PCB designing and fabrication. The WizFi360-EVB-PICO is placed on the rare side and WizFi module is away from the main circuit board for sheilding and protection. A multilayer design approach is taken using vias to optimize the PCB and reduce the power consumption.

Top View

Bottom View

3D Visualization of PCB:

Pictures and Video demonstration of breadboard prototype:

Pictures and Video demonstration of final prototype:

Data entries saved in device memory uploaded to AWS-IoT Core MQTT Client:

Conclusion and future scope:

Our project provides, efficient, reliable and quick means of inventory management. It is robust yet compact and energy efficient. It's flexible and user friendly features make it an almost ready to deploy commercial product as well. We further hope to advance this project by adding a computer vision component to further enhance it's efficiency by detecting components by itself rather than the user entering it.

Documents
  • Arduino Code for control unit

  • Automated Inventory management system pcb and enclosure STEP files

Comments Write