본문 바로가기

3D Printer/OctoPrint

Chamber Manager Board 제작 #10 (명령어 수행 함수 제작)

【 3D 프린터 챔버 만들기 】



[ Control Board 제작 #10 : 명령어 수행 함수 제작 ]



□ 추가 필요 사항


 - Light Control은 미구현 (회로 추가 및 코드 작성 필요)



[ ChamberManager.ino Execute 함수 ]


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
bool Execute(CMD cmd) {
    char temp[10];
 
    switch(cmd.Object) {
      case   0// Hellow
        Serial.println(F("OK O0 R0"));
        return true;
      case 100// Write settings to eeprom
        if(cmd.Status == WRITE) {
          Serial.printf("OK O%d", cmd.Object);
          // Todo : Write setting to eeprom
          return true;
        }
        return false;
      case 111// Ventil Servo Max position
        if(cmd.Status == WRITE) {
          g_DoorVentil.setMaxPos(cmd.Value);
        }
        Serial.printf("OK O%d %d", cmd.Object, g_DoorVentil.getMaxPos());
        return true;
      case 112// Ventil Servo Min position
        if(cmd.Status == WRITE) {
          g_DoorVentil.setMinPos(cmd.Value);
        }
        Serial.printf("OK O%d %d", cmd.Object, g_DoorVentil.getMinPos());
        return true;
      case 113// Filter Servo Max position
        if(cmd.Status == WRITE) {
          g_DoorFilter.setMaxPos(cmd.Value);
        }
        Serial.printf("OK O%d %d", cmd.Object, g_DoorFilter.getMaxPos());
        return true;
      case 114// Filter Servo Mix position
        if(cmd.Status == WRITE) {
          g_DoorFilter.setMinPos(cmd.Value);
        }
        Serial.printf("OK O%d %d", cmd.Object, g_DoorFilter.getMinPos());
        return true;
      case 200// Temp Control mode
        if(cmd.Status == WRITE) {
          switch(cmd.Value) {
            case 1// ON/OFF
              g_TempControl.setCtrlMode(ONOFF);
              break;
            case 2// PID
              g_TempControl.setCtrlMode(PID);
              break;
            default// MANUAL
              g_TempControl.setCtrlMode(MANUAL);
              break;
          }
        }
        Serial.printf("OK O%d %d", cmd.Object, g_TempControl.getCtrlMode());
        return true;
      case 201// Temperature target
        if(cmd.Status == WRITE) {
          g_TempControl.setAmbientTarget(cmd.Value);
        }
        Serial.printf("OK O%d %s", cmd.Object, dtostrf(g_TempControl.getAmbientTarget(), 11, temp));
        return true;
      case 202// Ambient temperature
        if(cmd.Status == READ) {
          Serial.printf("OK O%d %s", cmd.Object, dtostrf(g_fAmbentTemp, 11, temp));
          return true;
        }
        break;
      case 300// FanEnable
        if(cmd.Status == WRITE) {
          if(cmd.Value == 1) {
            g_FanVentil.FanOn();
            g_FanFilter.FanOn();
          }
          else {
            g_FanVentil.FanOff();
            g_FanFilter.FanOff();
          }
          Serial.printf("OK O%d", cmd.Object);
          return true;
        }
        break;
      case 311// Doors angle
        if(cmd.Status == WRITE) {
          g_DoorVentil.setAngle(cmd.Value);
          g_DoorFilter.setAngle(cmd.Value);
        }
        Serial.printf("OK O%d %d", cmd.Object, g_DoorVentil.getAngle());
        return true;
      case 312// Fans speed
        if(cmd.Status == WRITE) {
          g_FanVentil.setSpeed(cmd.Value);
          g_FanFilter.setSpeed(cmd.Value);
        }
        Serial.printf("OK O%d %d", cmd.Object, g_FanVentil.getSpeed());
        return true;
      case 321// Ventil door angle
        if(cmd.Status == WRITE) {
          g_DoorVentil.setAngle(cmd.Value);
        }
        Serial.printf("OK O%d %d", cmd.Object, g_DoorVentil.getAngle());
        return true;
      case 322// Ventil fan speed
        if(cmd.Status == WRITE) {
          g_FanVentil.setSpeed(cmd.Value);
        }
        Serial.printf("OK O%d %d", cmd.Object, g_FanVentil.getSpeed());
        return true;
      case 331// Filter door angle
        if(cmd.Status == WRITE) {
          g_DoorFilter.setAngle(cmd.Value);
        }
        Serial.printf("OK O%d %d", cmd.Object, g_DoorFilter.getAngle());
        return true;
      case 332// Filter fan speed
        if(cmd.Status == WRITE) {
          g_FanFilter.setSpeed(cmd.Value);
        }
        Serial.printf("OK O%d %d", cmd.Object, g_FanFilter.getSpeed());
        return true;
      case 400// Light control mode
        if(cmd.Status == WRITE) {
        }
        Serial.printf("ERROR Not implemented", cmd.Object, g_FanFilter.getSpeed());
        return true;
      case 401// Light on/off
        if(cmd.Status == WRITE) {
        }
        Serial.printf("ERROR Not implemented", cmd.Object, g_FanFilter.getSpeed());
        return true;
      defaultbreak;
    }
 
    return false;
}
cs