#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <Wire.h>
// Connections to OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET 7
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Connections to A4988
const int dirPin = 2; // Direction
const int stepPin = 3; // Step
const int STEPS_PER_REV = 200;// Motor steps per rotation
int Size = 0,Speed=0;
int OK = 0,a=0,D;
void setup()
{
Serial.begin(9600);
pinMode(stepPin,OUTPUT);
digitalWrite(stepPin, LOW);
pinMode(dirPin,OUTPUT);
pinMode(A0,INPUT_PULLUP); //For Syringe Pump
pinMode(A1,INPUT_PULLUP); //For Infusion Pump
pinMode(4,INPUT_PULLUP); //+
pinMode(5,INPUT_PULLUP); //
pinMode(6,INPUT_PULLUP); //SS selection
pinMode(7,INPUT_PULLUP); //Ok button
//Display
Wire.begin();
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) // Initialize the OLED display with the I2C address 0x3C
{
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
StartingDisplay();
}
void loop()
{
if(digitalRead(A0)==LOW) //For Syringe Pump
{
SyringePump();
}
else if(digitalRead(A1)==LOW) //For Infusion Pump
{
InfusionPump();
}
else// When nothing is attatched
{
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(15,30);
display.println(F("Attach the module"));
display.display();
display.clearDisplay();
}
} // void loop ends
void SyringePump()
{
float SyringeS;
int Selector;
Selector=1;
D=0;
while(digitalRead(A0)==LOW)
{
switch(Selector)
{
case 1:
{
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(23,10);
display.println(F("Syringe"));
display.setCursor(42,30);
display.println(F("Pump"));
display.setTextSize(1);
display.setCursor(41,53);
display.println(F("Detected"));
display.display();
delay(1000);
display.clearDisplay();
display.display();
Selector=2;
break;
}
case 2:
{
display.setTextSize(1);
display.setCursor(3,20);
display.println(F("Select Syringe Size"));
display.display();
// Button debounce check for pin 4 (Increase Size)
if(digitalRead(4) == LOW)
{
delay(50); // Debounce delay
if(digitalRead(4) == LOW) // Confirm button is still pressed
{
Size = Size + 1;
SyringeS = SyringeSize(Size);
display.clearDisplay();
display.setTextSize(1);
display.setCursor(3,20);
display.println(F("Select Syringe Size"));
display.setTextSize(2);
display.setCursor(5,45);
display.print(SyringeS);
display.print(F(" ml"));
display.display();
while(digitalRead(4) == LOW); // Wait for button release
}
}
// Button debounce check for pin 5 (Decrease Size)
else if(digitalRead(5) == LOW)
{
delay(50); // Debounce delay
if(digitalRead(5) == LOW) // Confirm button is still pressed
{
Size = Size - 1;
SyringeS = SyringeSize(Size);
display.clearDisplay();
display.setTextSize(1);
display.setCursor(3,20);
display.println(F("Select Syringe Size"));
display.setTextSize(2);
display.setCursor(5,45);
display.print(SyringeS);
display.print(F(" ml"));
display.display();
while(digitalRead(5) == LOW); // Wait for button release
}
}
// Button debounce check for pin 6 (Confirm Selection)
if(digitalRead(6) == LOW)
{
delay(50); // Debounce delay
if(digitalRead(6) == LOW) // Confirm button is still pressed
{
Selector = 3;
while(digitalRead(6) == LOW); // Wait for button release
display.clearDisplay();
display.display();
display.setTextSize(1);
display.setCursor(48,35);
display.println(F("Saved"));
display.display();
delay(300);
display.clearDisplay();
display.display();
}
}
break;
}
case 3:
{
while(digitalRead(A0)==LOW)
{
display.setTextSize(1);
display.setCursor(6,20);
display.println(F("Adjust ml/hour"));
display.display();
if(digitalRead(4) == LOW) // Confirm button is still pressed
{
Speed=Speed+1;
display.clearDisplay();
display.setTextSize(1);
display.setCursor(6,20);
display.println(F("Adjust ml/hour"));
display.setTextSize(2);
display.setCursor(6,45);
display.print(Speed);
display.print(F(" ml/hr"));
display.display();
while(digitalRead(4) == LOW); // Wait for button release
}
// Button debounce check for pin 5 (Decrease Size)
else if(digitalRead(5) == LOW)
{
delay(50); // Debounce delay
if(digitalRead(5) == LOW) // Confirm button is still pressed
{
Speed=Speed-1;
display.clearDisplay();
display.setTextSize(1);
display.setCursor(6,20);
display.println(F("Adjust ml/hour"));
display.setTextSize(2);
display.setCursor(6,45);
display.print(Speed);
display.print(F(" ml/hr"));
display.display();
while(digitalRead(5) == LOW); // Wait for button release
}
}
if(digitalRead(6) == LOW)
{
delay(50); // Debounce delay
if(digitalRead(6) == LOW) // Confirm button is still pressed
{
while(digitalRead(6) == LOW); // Wait for button release
display.clearDisplay();
display.display();
display.setTextSize(1);
display.setCursor(48,35);
display.println(F("Saved"));
display.display();
delay(300);
display.clearDisplay();
display.display();
Selector = 4;
break;
}
}
}
}
case 4:
{
Forward((Speed*200));
display.setTextSize(2);
display.setCursor(15,40);
display.print(Speed);
display.print(F(" ml/hr"));
display.display();
if(digitalRead(7) == LOW)
{
delay(50); // Debounce delay
if(digitalRead(7) == LOW) // Confirm button is still pressed
{
while(digitalRead(7) == LOW); // Wait for button release
digitalWrite(stepPin, LOW);
Selector=2;
break;
}
}
}
}
}
} // SringePump while ends
void InfusionPump()
{
D=0;
for(D;D==0;D++)
{
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(16,10);
display.println(F("Infusion"));
display.setCursor(42,30);
display.println(F("Pump"));
display.setTextSize(1);
display.setCursor(41,53);
display.println(F("Detected"));
display.display();
delay(1000);
display.clearDisplay();
display.display();
}
}
int SyringeSize(int s)
{
if(s == 1)
{
return 2;
}
else if(s == 2)
{
return 3;
}
else if(s == 3)
{
return 5;
}
else if(s == 4)
{
return 10;
}
else if(s == 5)
{
return 20;
}
else if(s == 6)
{
return 30;
}
else if(s == 7)
{
return 50;
}
else if(s == 8)
{
return 60;
}
else if(s == 9)
{
return 100;
}
}
void Forward(int p)
{
digitalWrite(dirPin,LOW);
for(int x = 0; x < STEPS_PER_REV; x++)
{
digitalWrite(stepPin,HIGH);
delayMicroseconds(p);
digitalWrite(stepPin,LOW);
delayMicroseconds(p);
}
}
void StartingDisplay()
{
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(23,16);
display.println(F("PROJECT"));
display.display();
delay(100);
display.setTextSize(3);
display.setCursor(36,32);
display.println(F("BMI"));
display.display();
delay(300);
display.clearDisplay();
display.display();
display.setTextSize(1);
display.setTextColor(WHITE);
}
/*
// Set motor direction clockwise
digitalWrite(dirPin,HIGH);
for(int x = 0; x < STEPS_PER_REV; x++)
{
digitalWrite(stepPin,HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin,LOW);
delayMicroseconds(2000);
}
// Set motor direction counterclockwise
digitalWrite(dirPin,LOW);
for(int x = 0; x < (STEPS_PER_REV * 2); x++)
{
digitalWrite(stepPin,HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin,LOW);
delayMicroseconds(1000);
}
//2 buttons for
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <Wire.h>
// Connections to OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET 7
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Connections to A4988
const int dirPin = 2; // Direction
const int stepPin = 3; // Step
const int STEPS_PER_REV = 200;// Motor steps per rotation
int Size = 0,Speed=1000;
int OK = 0,a=0;
void setup()
{
Serial.begin(9600);
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
pinMode(A0,INPUT); //For Syringe Pump
pinMode(A1,INPUT); //For Infusion Pump
pinMode(A2,INPUT); //+
pinMode(A3,INPUT); //-` 1
pinMode(9,INPUT); //SS selection
pinMode(10,INPUT); //Ok button
//Display
Wire.begin();
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) // Initialize the OLED display with the I2C address 0x3C
{
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(23,16);
display.println(F("PROJECT"));
display.display();
delay(100);
display.setTextSize(3);
display.setCursor(36,32);
display.println(F("..."));
display.display();
delay(500);
display.clearDisplay();
display.display();
display.setTextSize(1);
display.setTextColor(WHITE);
}
void loop()
{
float A=0,D=0;
display.clearDisplay();
D=0;
if(digitalRead(A0)==HIGH) //For Syringe Pump
{
while(digitalRead(A0)==HIGH)
{
for(D;D==0;D++)
{
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(23,10);
display.println(F("Syringe"));
display.setCursor(42,30);
display.println(F("Pump"));
display.setTextSize(1);
display.setCursor(41,53);
display.println(F("Detected"));
display.display();
delay(1000);
display.clearDisplay();
display.display();
}
display.setTextSize(1);
display.setCursor(6,20);
display.println(F("Select Syringe Size"));
display.display();
if(digitalRead(9)==HIGH)
{
Size = Size + 1;
SyringeSize(Size);
}
if(digitalRead(10)==HIGH)
{
while(digitalRead(A0)==HIGH)
{
display.clearDisplay();
display.setTextSize(1);
display.setCursor(6,20);
display.println(F("Select ml/hour"));
display.setCursor(50,40);
display.print(Speed/1000);
//display.print(F(" ml/h"));
display.display();
if(digitalRead(A2)==HIGH)
{
Speed=Speed+200;
}
if(digitalRead(A3)==LOW)
{
Speed=Speed-200;
}
Forward(Speed);
}
}
} // SringePump while ends
}
else if(digitalRead(A1)==HIGH) //For Infusion Pump
{
for(D;D==0;D++)
{
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(16,10);
display.println(F("Infusion"));
display.setCursor(42,30);
display.println(F("Pump"));
display.setTextSize(1);
display.setCursor(41,53);
display.println(F("Detected"));
display.display();
delay(1000);
display.clearDisplay();
display.display();
}
}
else// When nothing is attatched
{
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(15,30);
display.println(F("Attach the module"));
display.display();
}
} // void loop ends
void SyringeSize(int s)
{
// 2 3 5 10 20 30 50 60 100
if(s=1)
{
a=2;
display.clearDisplay();
display.setTextSize(1);
display.setCursor(6,20);
display.println(F("Select Syringe Size"));
display.setCursor(50,40);
display.print(a);
display.print(F(" ml"));
display.display();
}
else if(s=2)
{
a=3;
display.clearDisplay();
display.setTextSize(1);
display.setCursor(6,20);
display.println(F("Select Syringe Size"));
display.setCursor(50,40);
display.print(a);
display.print(F(" ml"));
display.display();
}
else if(s=3)
{
a=5;
display.clearDisplay();
display.setTextSize(1);
display.setCursor(6,20);
display.println(F("Select Syringe Size"));
display.setCursor(50,40);
display.print(a);
display.print(F(" ml"));
display.display();
}
else if(s=4)
{
a=10;
display.clearDisplay();
display.setTextSize(1);
display.setCursor(6,20);
display.println(F("Select Syringe Size"));
display.setCursor(50,40);
display.print(a);
display.print(F(" ml"));
display.display();
}
else if(s=5)
{
a=20;
display.clearDisplay();
display.setTextSize(1);
display.setCursor(6,20);
display.println(F("Select Syringe Size"));
display.setCursor(50,40);
display.print(a);
display.print(F(" ml"));
display.display();
}
else if(s=6)
{
a=30;
display.clearDisplay();
display.setTextSize(1);
display.setCursor(6,20);
display.println(F("Select Syringe Size"));
display.setCursor(50,40);
display.print(a);
display.print(F(" ml"));
display.display();
}
else if(s=7)
{
a=50;
display.clearDisplay();
display.setTextSize(1);
display.setCursor(6,20);
display.println(F("Select Syringe Size"));
display.setCursor(50,40);
display.print(a);
display.print(F(" ml"));
display.display();
}
else if(s=8)
{
a=60;
display.clearDisplay();
display.setTextSize(1);
display.setCursor(6,20);
display.println(F("Select Syringe Size"));
display.setCursor(50,40);
display.print(a);
display.print(F(" ml"));
display.display();
}
else if(s=9)
{
a=100;
display.clearDisplay();
display.setTextSize(1);
display.setCursor(6,20);
display.println(F("Select Syringe Size"));
display.setCursor(50,40);
display.print(a);
display.print(F(" ml"));
display.display();
}
}
void Forward(int p)
{
digitalWrite(dirPin,HIGH);
for(int x = 0; x < STEPS_PER_REV; x++)
{
digitalWrite(stepPin,HIGH);
delayMicroseconds(p);
digitalWrite(stepPin,LOW);
delayMicroseconds(p);
}
}
/*
// Set motor direction clockwise
digitalWrite(dirPin,HIGH);
for(int x = 0; x < STEPS_PER_REV; x++)
{
digitalWrite(stepPin,HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin,LOW);
delayMicroseconds(2000);
}
// Set motor direction counterclockwise
digitalWrite(dirPin,LOW);
for(int x = 0; x < (STEPS_PER_REV * 2); x++)
{
digitalWrite(stepPin,HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin,LOW);
delayMicroseconds(1000);
}
*/