I need help with tinkercad, i need to make a one-digit calculator using 4x4 keypad, arduino uno, 2 7 segment displays
I need to figure out the whole coding and circuit
When a is pressed it is add, b for subtract, and d for displaying the answer, and it should also display negative number
example: 2B4D the number on the displays is -2
#include <Keypad.h>
unsigned const int A = 9;
unsigned const int B = 8;
unsigned const int C = 1;
unsigned const int D = 2;
unsigned const int E = 3;
unsigned const int F = 10;
unsigned const int G = 11;
unsigned const int AA = 9;
unsigned const int BB = 8;
unsigned const int FF = 10;
unsigned const int GG = 11;
unsigned const int CC = 1;
unsigned const int DD = 2;
unsigned const int EE = 3;
int first = 0;
int second = 0;
int total = 0;
int m=0;
int n=0;
char key;
void disp_number1(int x){
int p_num=x;
if (p_num==0){
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, LOW);
}
else if (p_num==1){
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
else if (p_num==2){
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
}
else if (p_num==3) {
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
}
else if (p_num==4){
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}
else if (p_num==5) {
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}
else if (p_num==6) {
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}
else if (p_num==7) {
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
else if (p_num==8) {
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}
else if (p_num==9){
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}
else if (p_num < 0){
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
}
}
void disp_number2(int x){
int p_num=x;
if (p_num==0){
digitalWrite(AA, HIGH);
digitalWrite(BB, HIGH);
digitalWrite(CC, HIGH);
digitalWrite(DD, HIGH);
digitalWrite(EE, HIGH);
digitalWrite(FF, HIGH);
digitalWrite(GG, LOW);
}
else if (p_num==1){
digitalWrite(AA, LOW);
digitalWrite(BB, HIGH);
digitalWrite(CC, HIGH);
digitalWrite(DD, LOW);
digitalWrite(EE, LOW);
digitalWrite(FF, LOW);
digitalWrite(GG, LOW);
}
else if (p_num==2){
digitalWrite(AA, HIGH);
digitalWrite(BB, HIGH);
digitalWrite(CC, LOW);
digitalWrite(DD, HIGH);
digitalWrite(EE, HIGH);
digitalWrite(FF, LOW);
digitalWrite(GG, HIGH);
}
else if (p_num==3) {
digitalWrite(AA, HIGH);
digitalWrite(BB, HIGH);
digitalWrite(CC, HIGH);
digitalWrite(DD, HIGH);
digitalWrite(EE, LOW);
digitalWrite(FF, LOW);
digitalWrite(GG, HIGH);
}
else if (p_num==4){
digitalWrite(AA, LOW);
digitalWrite(BB, HIGH);
digitalWrite(CC, HIGH);
digitalWrite(DD, LOW);
digitalWrite(EE, LOW);
digitalWrite(FF, HIGH);
digitalWrite(GG, HIGH);
}
else if (p_num==5) {
digitalWrite(AA, HIGH);
digitalWrite(BB, LOW);
digitalWrite(CC, HIGH);
digitalWrite(DD, HIGH);
digitalWrite(EE, LOW);
digitalWrite(FF, HIGH);
digitalWrite(GG, HIGH);
}
else if (p_num==6) {
digitalWrite(AA, HIGH);
digitalWrite(BB, LOW);
digitalWrite(CC, HIGH);
digitalWrite(DD, HIGH);
digitalWrite(EE, HIGH);
digitalWrite(FF, HIGH);
digitalWrite(GG, HIGH);
}
else if (p_num==7) {
digitalWrite(AA, HIGH);
digitalWrite(BB, HIGH);
digitalWrite(CC, HIGH);
digitalWrite(DD, LOW);
digitalWrite(EE, LOW);
digitalWrite(FF, LOW);
digitalWrite(GG, LOW);
}
else if (p_num==8) {
digitalWrite(AA, HIGH);
digitalWrite(BB, HIGH);
digitalWrite(CC, HIGH);
digitalWrite(DD, HIGH);
digitalWrite(EE, HIGH);
digitalWrite(FF, HIGH);
digitalWrite(GG, HIGH);
}
else if (p_num==9){
digitalWrite(AA, HIGH);
digitalWrite(BB, HIGH);
digitalWrite(CC, HIGH);
digitalWrite(DD, HIGH);
digitalWrite(EE, LOW);
digitalWrite(FF, HIGH);
digitalWrite(GG, HIGH);
}
else if (p_num < 0){
digitalWrite(AA, LOW);
digitalWrite(BB, LOW);
digitalWrite(CC, LOW);
digitalWrite(DD, LOW);
digitalWrite(EE, LOW);
digitalWrite(FF, LOW);
digitalWrite(GG, LOW);
}
}
const byte cols=4;
const byte rows=4;
char keys[rows][cols]={
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'},
};
byte colspins[cols] ={A3, A2, A1, A0};
byte rowspins[rows] ={12, 13, A5, A4};
Keypad myKeypad=Keypad(makeKeymap(keys),rowspins,colspins,rows,cols);
void setup(){
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(AA, OUTPUT);
pinMode(BB, OUTPUT);
pinMode(CC, OUTPUT);
pinMode(DD, OUTPUT);
pinMode(EE, OUTPUT);
pinMode(FF, OUTPUT);
pinMode(GG, OUTPUT);
Serial.begin(9600);
while (!Serial);
Serial.println("Enter 1st Number");
}
int firstDigit(int m){
while (total >= 10)
total /= 10;
return n;
}
int lastDigit(int n){
return (total % 10);
}
void loop()
{
char key = myKeypad.getKey();
switch(key)
{
case '0' ... '9': // This keeps collecting the first value until a operator is pressed "+-*/"
first = first * 10 + (key - '0');
Serial.println(first);
break;
case 'A':
first = (total != 0 ? total : first);
Serial.println("+");
second = SecondNumber(); // get the collected the second number
total = first + second;
Serial.println(total);
disp_number1(m);
disp_number2(n);
first = 0, second = 0;
break;
case 'B':
first = (total != 0 ? total : first);
Serial.println("-");
second = SecondNumber();
total = first - second;
Serial.println(total);
disp_number2(total);
first = 0, second = 0;
break;
case '*':
first = (total != 0 ? total : first);
Serial.println("*");
second = SecondNumber();
total = first * second;
Serial.println(total);
first = 0, second = 0;
break;
case '#':
first = (total != 0 ? total : first);
Serial.println("/");
second = SecondNumber();
second == 0 ? Serial.println("Invalid") : total = (float)first / (float)second;
Serial.println(total);
first = 0, second = 0;
break;
case 'C':
total = 0;
Serial.println();
break;
}
}
long SecondNumber()
{
while( 1 )
{
char key = myKeypad.getKey();
if(key >= '0' && key <= '9')
{
second = second * 10 + (key - '0');
Serial.println(second);
}
if(key == 'D') break; //return second;
}
return second;
}