1// serial_calculator.ino
2// ์๋ฆฌ์ผ ๋ชจ๋ํฐ ๊ณ์ฐ๊ธฐ
3
4void setup() {
5 Serial.begin(9600);
6
7 Serial.println("=================================");
8 Serial.println(" Simple Serial Calculator");
9 Serial.println("=================================");
10 Serial.println("Enter expression (e.g., 10 + 5)");
11 Serial.println("Operators: +, -, *, /, %");
12 Serial.println("Type 'quit' to exit");
13 Serial.println("---------------------------------");
14}
15
16float calculate(float a, char op, float b) {
17 switch (op) {
18 case '+': return a + b;
19 case '-': return a - b;
20 case '*': return a * b;
21 case '/':
22 if (b == 0) {
23 Serial.println("Error: Division by zero");
24 return 0;
25 }
26 return a / b;
27 case '%':
28 return (int)a % (int)b;
29 default:
30 Serial.print("Unknown operator: ");
31 Serial.println(op);
32 return 0;
33 }
34}
35
36void processExpression(char* expr) {
37 float num1, num2;
38 char op;
39
40 // ์์ ํ์ฑ: "num1 op num2"
41 int parsed = sscanf(expr, "%f %c %f", &num1, &op, &num2);
42
43 if (parsed == 3) {
44 float result = calculate(num1, op, num2);
45
46 Serial.print(num1);
47 Serial.print(" ");
48 Serial.print(op);
49 Serial.print(" ");
50 Serial.print(num2);
51 Serial.print(" = ");
52 Serial.println(result);
53 } else {
54 Serial.println("Invalid format. Use: num1 op num2");
55 }
56}
57
58char inputBuffer[32];
59int inputIndex = 0;
60
61void loop() {
62 while (Serial.available()) {
63 char c = Serial.read();
64
65 if (c == '\n' || c == '\r') {
66 if (inputIndex > 0) {
67 inputBuffer[inputIndex] = '\0';
68
69 // ์ข
๋ฃ ๋ช
๋ น ํ์ธ
70 if (strcmp(inputBuffer, "quit") == 0) {
71 Serial.println("Goodbye!");
72 while (1); // ์ ์ง
73 }
74
75 processExpression(inputBuffer);
76 inputIndex = 0;
77
78 Serial.println("---------------------------------");
79 }
80 } else if (inputIndex < 31) {
81 inputBuffer[inputIndex++] = c;
82 }
83 }
84}
85
86/*
87 * ์ฌ์ฉ ๋ฐฉ๋ฒ:
88 * 1. ์๋ฆฌ์ผ ๋ชจ๋ํฐ ์ด๊ธฐ (Tools โ Serial Monitor)
89 * 2. Baud rate๋ฅผ 9600์ผ๋ก ์ค์
90 * 3. ์์ ์
๋ ฅ: "10 + 5" ์ํฐ
91 * 4. ๊ฒฐ๊ณผ ํ์ธ: "10 + 5 = 15.00"
92 *
93 * Wokwi์์:
94 * - Serial Monitor ํญ ํด๋ฆญ
95 * - ์์ ์
๋ ฅ ํ ์ํฐ
96 */