serial_calculator.ino

Download
cpp 97 lines 2.4 KB
 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 */