123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- #include <M5Stack.h>
- #define KEYBOARD_I2C_ADDR 0X08
- #define KEYBOARD_INT 5
- float Num1 = 0;
- float Num2 = 0;
- float Num3 = 0;
- float Num4 = 0;
- char Fun;
- char Fun2;
- char Fun3;
- int CalNum = 0;
- int SumFlag = 0;
- float Sum;
- String Datain;
- uint8_t key_val;
- void setup()
- {
- M5.begin();
- Wire.begin();
- M5.Lcd.setTextFont(4);
- pinMode(KEYBOARD_INT, INPUT_PULLUP);
- CalNum = 1;
- Draw_Screen();
- }
- void loop()
- {
- if(digitalRead(KEYBOARD_INT) == LOW)
- {
- Wire.requestFrom(KEYBOARD_I2C_ADDR, 1); // request 1 byte from keyboard
-
- while (Wire.available())
- {
- uint8_t key_val = Wire.read(); // receive a byte as character
- if(key_val != 0)
- {
- if(isDigit(key_val) || key_val == '.')
- {
- if( SumFlag == 1 )
- {
- StoreData();
- }
- Datain += (char)key_val;
- IsNumber();
- }
- if( key_val == 'A' || key_val == '+' || key_val == '-' || key_val == '*' || key_val == '/' || key_val == '=' )
- {
- FunKey(key_val);
- }
- }
- }
- }
- }
-
- void FunKey( uint8_t key_in )
- {
- switch (key_in)
- {
- case 'A':
- M5.Lcd.clear();
- Draw_Screen();
- Num1 = 0;
- Num2 = 0;
- Sum = 0;
- Datain = " ";
- CalNum = 1;
- break;
- case '=':
- if( Fun == '+' )
- {
- Sum = Num1 + Num2;
- }
- if( Fun == '-' )
- {
- Sum = Num1 - Num2;
- }
- if( Fun == '*' )
- {
- Sum = Num1 * Num2;
- }
- if( Fun == '/' )
- {
- Sum = Num1 / Num2;
- }
-
- M5.Lcd.setCursor(105,190);
- M5.Lcd.print(Sum);
- SumFlag = 1;
- break;
- case '+':
- Fun = '+';
- CalNum += 1 ;
- Datain = " ";
- M5.Lcd.setCursor(20, 140);
- M5.Lcd.print(" ");
- M5.Lcd.setCursor(20, 140);
- M5.Lcd.print(Fun);
- break;
- case '-':
- Fun = '-';
- CalNum += 1;
- Datain = " ";
- M5.Lcd.setCursor(20, 140);
- M5.Lcd.print(" ");
- M5.Lcd.setCursor(20, 140);
- M5.Lcd.print(Fun);
- break;
- case '*':
- Fun = '*';
- CalNum += 1;
- Datain = " ";
- M5.Lcd.setCursor(20, 140);
- M5.Lcd.print(" ");
- M5.Lcd.setCursor(20, 140);
- M5.Lcd.print(Fun);
- break;
- case '/':
- Fun = '/';
- CalNum += 1;
- Datain = " ";
- M5.Lcd.setCursor(20, 140);
- M5.Lcd.print(" ");
- M5.Lcd.setCursor(20, 140);
- M5.Lcd.print(Fun);
- break;
- default:
- break;
- }
- }
-
- void StoreData( void )
- {
- Num1 = Sum;
- Num2 = 0;
- SumFlag = 0;
- Datain = " ";
- M5.Lcd.setCursor(20, 140);
- M5.Lcd.print(Fun);
- M5.Lcd.setCursor(70, 100);
- M5.Lcd.print(" ");
- M5.Lcd.setCursor(70, 140);
- M5.Lcd.print(" ");
- M5.Lcd.setCursor(70, 100);
- M5.Lcd.print(Num1);
- M5.Lcd.setCursor(105,190);
- M5.Lcd.print(" ");
- }
- void IsNumber( void )
- {
- if( CalNum == 1 )
- {
- Num1 = Datain.toFloat();
- M5.Lcd.setCursor(70,100);
- M5.Lcd.print(Num1);
- }
-
- if( CalNum >= 2 )
- {
- Num2 = Datain.toFloat();
- M5.Lcd.setCursor(70, 140);
- M5.Lcd.print(Num2);
- }
- }
-
- void DrawBox( int LocX, int LocY, int W, int H )
- {
- M5.Lcd.drawLine( LocX, LocY, LocX + W, LocY, TFT_WHITE);
- M5.Lcd.drawLine( LocX, LocY + H, LocX + W, LocY + H, TFT_WHITE);
- M5.Lcd.drawLine( LocX, LocY, LocX, LocY + H, TFT_WHITE);
- M5.Lcd.drawLine( LocX + W, LocY, LocX + W, LocY + H, TFT_WHITE);
- }
- void Draw_Screen( void )
- {
- M5.Lcd.clear();
- M5.Lcd.drawLine( 1, 180, 320, 180, TFT_WHITE);
- M5.Lcd.setCursor( 15,20 );
- M5.Lcd.print( "FRACTION CALCULATOR" );
- DrawBox( 50, 95, 250, 32 );
- DrawBox( 10, 135, 30, 32 );
- DrawBox( 50, 135, 250, 32 );
- M5.Lcd.setCursor(10,190);
- M5.Lcd.print("SUM =");
- }
|