/*
* Created by ArduinoGetStarted.com
*
* This example code is in the public domain
*
* Tutorial page: https://arduinogetstarted.com/faq/how-to-input-a-multiple-digits-number-using-the-keypad
*/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Keypad.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define NUMFLAKES 10 // Number of snowflakes in the animation example
#define LOGO_HEIGHT 16
#define LOGO_WIDTH 16
static const unsigned char PROGMEM logo_bmp[] =
{ B00000000, B11000000,
B00000001, B11000000,
B00000001, B11000000,
B00000011, B11100000,
B11110011, B11100000,
B11111110, B11111000,
B01111110, B11111111,
B00110011, B10011111,
B00011111, B11111100,
B00001101, B01110000,
B00011011, B10100000,
B00111111, B11100000,
B00111111, B11110000,
B01111100, B11110000,
B01110000, B01110000,
B00000000, B00110000 };
const int ROW_NUM = 4; //four rows
const int COLUMN_NUM = 4; //four columns
char keys[ROW_NUM][COLUMN_NUM] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte pin_column[COLUMN_NUM] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );
String inputString;
String inputStringA;
String inputStringB;
String inputStringC;
String inputStringD;
int inputInt = 0;
long inputIntA = 0;
long inputIntB = 0;
long inputIntC = 0;
long inputIntD = 0;
int button;
int brew = 0;
//char key;
char keyA;
char keyB;
char key;
void setup() {
Serial.begin(9600);
inputString.reserve(10); // maximum number of digit for a number is 10, change if needed
inputStringA.reserve(10); // maximum number of digit for a number is 10, change if needed
inputStringB.reserve(10); // maximum number of digit for a number is 10, change if needed
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
display.clearDisplay();
delay(1000);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println(F("Coffee\nSnobs"));
display.display();
//
//
delay(2000);
display.clearDisplay();
display.setTextSize(1.6);
display.setCursor(0,0);
display.println(F("Coffee Snob Setup"));
display.println(F("For Help press *"));
display.display();
delay(2000);
display.setTextSize(1);
display.setCursor(0,20);
display.println(F("How much coffee \ndid you ground?"));
display.display();
}
void loop() {
char key = keypad.getKey();
if (key >= '0' && key <= '9')// only act on numeric keys
{
inputString += key; // append new character to input string
}
else if (key == 'A') {
if (inputString.length() > 0) {
inputIntA = inputString.toInt(); // YOU GOT AN INTEGER NUMBER
inputString = "";// clear input
Serial.println(inputIntA);
display.println(inputIntA,"g");
display.display();
}else{Serial.println(inputIntA),"g";
}
delay(3000);
display.clearDisplay();
display.setTextSize(1.6);
display.setCursor(0,0);
display.println(F("Coffee Snob Setup"));
display.println(F("For Help press *"));
display.display();
display.setTextSize(1);
display.setCursor(0,20);
display.println(F("What is your\nbrew ratio?"));
display.display();
}
else if (key == 'B') {
if (inputString.length() > 0) {
inputIntB = inputString.toInt(); // YOU GOT AN INTEGER NUMBER
inputString = "";// clear input
Serial.println(inputIntB);
display.println(inputIntB);
display.display();
}else{Serial.println(inputIntB);}
delay(3000);
display.clearDisplay();
display.setTextSize(1.6);
display.setCursor(0,0);
display.println(F("Coffee Snob Setup"));
display.display();
display.setTextSize(1);
display.setCursor(0,10);
display.println(F("Press C for your\nbrew recipe"));
display.display();
}
if (key == 'C') {
display.clearDisplay();
display.setTextSize(1.6);
display.setCursor(0,0);
display.println(F("Coffee Snob Recipe"));
display.display();
display.setTextSize(1);
display.setCursor(0,10);
int math = (inputIntA * inputIntB);
display.print(F("Coffee Setup: "));
display.print(inputIntA);
display.print(F("g"));
display.println();
display.print(F("Brewing Ratios: 1/"));
display.print(inputIntB);
display.println();
display.print(F("Brew Recipe: "));
display.print(math);
display.print(F("ml"));
display.println();
display.setCursor(0,40);
display.println(F("Press D to\nbegin brewing"));
display.display();
display.display();
inputString = ""; // clear input
Serial.println(inputIntA);
Serial.print(inputIntB);
Serial.println(math);
}
else if (key == 'D') {
Serial.println("Button D");
}
else if (key == '*') {
Serial.println("Clear");
display.clearDisplay();
display.setTextSize(1.6);
display.setCursor(0,0);
display.println(F("Coffee Snob Setup"));
display.display();
display.setTextSize(1);
display.setCursor(0,10);
display.println(F("A = Coffee Setup"));
display.println(F("B = Brewing Ratios"));
display.println(F("C = Brew Recipe"));
display.println(F("D = Start"));
display.println(F("# = Enter"));
display.println(F("* = Setup Page"));
display.display();
inputIntA = "0";
inputIntB = "0";
delay(5000);
setup();
}
}
/*
void ButtonC (){
display.clearDisplay();
display.setTextSize(1.6);
display.setCursor(0,0);
display.println(F("Coffee Snob Recipe"));
display.display();
display.setTextSize(1);
display.setCursor(0,10);
display.println(F("Coffee Setup: "));
display.println(inputIntA);
display.println(F("Brewing Ratios: "));
display.println(inputIntB);
display.println(F("C = Brew Recipe: "));
display.display();
inputString = ""; // clear input
Serial.println(inputIntA);
Serial.print(inputIntB);
}
*/