#include <Stepper.h>
#include <LiquidCrystal_I2C.h>
#define LCD_ADDRESS 0x27
#define LCD_COLUMNS 20
#define LCD_ROWS 4
#include <Keypad.h>
#define lenght 3
char dose[lenght];
char d='0';
int data_count=0;
char customKey ;
int num=0;
int x=0;
const int stepPin = 12;
const int dirPin = 13;
const byte ROWS = 4;
const byte COLS = 4;
int count = 0;
char hexaKeys[ROWS][COLS] =
{
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {2,3,4,5};
byte colPins[COLS] = {6,7,8,9};
byte t1 = 500, t2 = 100, f = 0;
unsigned long T, Last_T = 100;
int Delay = 5000;
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(LCD_ADDRESS, LCD_COLUMNS, LCD_ROWS);
void setup() {
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
// put your setup code here, to run once:
Serial.begin(9600);
lcd.begin(20, 4);
lcd.setCursor(0, 1);
lcd.print("Group B");
delay(2000);
lcd.clear();
lcd.print("Starting");
delay(t1); lcd.print(".");
delay(t1); lcd.print(".");
delay(t1); lcd.print(".");
delay(t1); lcd.print(".");
delay(t1); lcd.print(".");
delay(t1); lcd.print(".");
delay(t1); lcd.print(".");
delay(t1); lcd.print(".");
lcd.setCursor(0, 1);
delay(t2); lcd.print("."); delay(t2); lcd.print(".");
delay(t2); lcd.print("."); delay(t2); lcd.print(".");
delay(t2); lcd.print("."); delay(t2); lcd.print(".");
delay(t2); lcd.print("."); delay(t2); lcd.print(".");
delay(t2); lcd.print("."); delay(t2); lcd.print(".");
delay(t2); lcd.print("."); delay(t2); lcd.print(".");
delay(t2); lcd.print("."); delay(t2); lcd.print(".");
delay(t2); lcd.print("."); delay(t2); lcd.print(".");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("do(ml)");
lcd.setCursor(0, 1);
}
void loop() {
// put your main code here, to run repeatedly:
// Get key value if pressed
// d = customKeypad.getKey();
/* if (d=='*')
{
lcd.setCursor(data_count, 1);
delay(1000);
} */
customKey = customKeypad.getKey();
if (customKey) // makes sure a key is actually pressed, equal to (customKey != NO_KEY)
{
dose[data_count] = customKey ; // store char into data array
lcd.print(dose[data_count]);
Serial.println(dose[data_count]);
Serial.println(data_count);
data_count++; // increment data array by 1 to store new char, also keep track of the number of chars entered
}
if (data_count == lenght - 1) // if the array index is equal to the number of expected chars, compare data to master
{
data_count=0;
delay(1000);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("dose is ");
lcd.setCursor(9, 1);
num = (dose[1]-'0')+((dose[0]-'0')*10);
lcd.print(num);
lcd.setCursor(13, 1);
lcd.print("mm");
delay(4000);
///////////////////////////////////////////////////////////
digitalWrite(dirPin,LOW); // Enables the motor to move in a particular direction
// Makes 200 pulses for making one full cycle rotation
for(int x = 0; x < num*100; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin,LOW);
delayMicroseconds(2000);
}
delay(5000);
digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
// Makes 200 pulses for making one full cycle rotation
for(int x = 0; x < num*100; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin,LOW);
delayMicroseconds(2000);
}
////////////////////////////////////////////////////////////////
lcd.clear();
lcd.begin(20, 4);
lcd.print("Starting");
delay(t1); lcd.print(".");
delay(t1); lcd.print(".");
delay(t1); lcd.print(".");
delay(t1); lcd.print(".");
delay(t1); lcd.print(".");
delay(t1); lcd.print(".");
delay(t1); lcd.print(".");
delay(t1); lcd.print(".");
lcd.setCursor(0, 1);
delay(t2); lcd.print("."); delay(t2); lcd.print(".");
delay(t2); lcd.print("."); delay(t2); lcd.print(".");
delay(t2); lcd.print("."); delay(t2); lcd.print(".");
delay(t2); lcd.print("."); delay(t2); lcd.print(".");
delay(t2); lcd.print("."); delay(t2); lcd.print(".");
delay(t2); lcd.print("."); delay(t2); lcd.print(".");
delay(t2); lcd.print("."); delay(t2); lcd.print(".");
delay(t2); lcd.print("."); delay(t2); lcd.print(".");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("do(ml)");
lcd.setCursor(0, 1);
}
///////////////////////////////////////////////////////
}