Hello,
Im currently working on a project to control a steppermotor(23) with a lcd and a 3x4 keypad.
The problem im getting is that my backspace is not working properly.
The code is not finished yet but im testing it every step i take. Currently my code is looking like this and there is a error between the lines: 137 -> 164 (void deletenumber)
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//////////////////////////////////////////////////////////////////////
LiquidCrystal_I2C lcd(0x27, 20, 4);
const int stepPin = 5;
const int dirPin = 2;
const int enPin = 8;
volatile int firstnumber=99; // used to tell how many numbers were entered on keypad
volatile int secondnumber=99;
volatile int thirdnumber=99;
volatile int fourthnumber=99;
/////////////////////////////////////////////////////////////////////
const byte ROWS = 4; // Vier rijen
const byte COLS = 3; // 3 kollomen
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {28, 26, 24, 22}; // Arduino pins naar de 4 rijen
byte colPins[COLS] = {35, 33, 31}; // Arduino pins naar de 3 kollomen
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // Keypad Library definition
//////////////////////////////////////////////////////////////////////
void setup() {
lcd.init(); // initialiseer het LCD scherm
lcd.backlight(); // zet de backlight aan
lcd.clear(); // wis het scherm
lcd.setCursor(0, 0); // zet de cursor op positie 1, regel 1
lcd.print("Huidige maat|"); // schrijf op scherm
lcd.setCursor(0, 1);
lcd.print("-------------+------");
lcd.setCursor(0, 2);
lcd.print("Gewenste maat|");
lcd.setCursor(0, 3);
lcd.print("--------------------");
lcd.setCursor(18, 0);
lcd.print("MM");
lcd.setCursor(18, 2);
lcd.print("MM");
//////////////////////////////////////////////////////////////////////
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
pinMode(enPin,OUTPUT);
digitalWrite(enPin,LOW);
}
void loop() {
char keypressed = keypad.getKey(); // Get value of keypad button if pressed
if (keypressed != NO_KEY){ // If keypad button pressed check which key it was
switch (keypressed) {
case '1':
checknumber(1);
break;
case '2':
checknumber(2);
break;
case '3':
checknumber(3);
break;
case '4':
checknumber(4);
break;
case '5':
checknumber(5);
break;
case '6':
checknumber(6);
break;
case '7':
checknumber(7);
break;
case '8':
checknumber(8);
break;
case '9':
checknumber(9);
break;
case '0':
checknumber(0);
break;
case '*':
deletenumber();
break;
}
}
}
void checknumber(int x){
if (firstnumber == 99) { // Check if this is the first number entered
firstnumber=x;
String displayvalue = String(firstnumber); // Transform int to a string for display
lcd.setCursor(14, 2);
lcd.print(displayvalue);
} else {
if (secondnumber == 99) { // Check if it's the 2nd number entered
secondnumber=x;
String displayvalue = (String(firstnumber) + String(secondnumber));
lcd.setCursor(14, 2);
lcd.print(displayvalue);
} else { // Check if the 3rd number entered
if (thirdnumber == 99) {
thirdnumber=x;
String displayvalue = (String(firstnumber) + String(secondnumber) + String(thirdnumber));
lcd.setCursor(14, 2);
lcd.print(displayvalue);
} else { // It must be the 4rd number entered
fourthnumber=x;
String displayvalue = (String(firstnumber) + String(secondnumber) + String(thirdnumber) + String(fourthnumber));
lcd.setCursor(14, 2);
lcd.print(displayvalue);
}
}
}
}
void deletenumber() { // Used to backspace entered numbers
if (fourthnumber !=99) {
String displayvalue = (String(firstnumber) + String(secondnumber) + String(thirdnumber));
lcd.setCursor (14, 2);
lcd.print(displayvalue);
fourthnumber=99;
}
else
if (thirdnumber !=99) {
String displayvalue = (String(firstnumber) + String(secondnumber));
lcd.setCursor(14, 2);
lcd.print(displayvalue);
thirdnumber=99;
}
else {
if (secondnumber !=99) {
String displayvalue = String(firstnumber);
lcd.setCursor(14, 2);
lcd.print(displayvalue);
secondnumber=99;
}
else {
if (firstnumber !=99) {
String displayvalue = " ";
lcd.setCursor(14, 2);
lcd.print(displayvalue);
firstnumber=99;
}
}
}
}