ソースを参照

Implement M226 - GCode Initiated Pause

Implemented M226 as described here:
http://reprap.org/wiki/G-code#M226:_Gcode_Initiated_Pause

Waits for pin to be become either HIGH, LOW or the inverse of what it
was before. Allows printing to pause until user interaction
Richard Miles 11年前
コミット
dc887ef99b
1個のファイルの変更52行の追加0行の削除
  1. 52
    0
      Marlin/Marlin_main.cpp

+ 52
- 0
Marlin/Marlin_main.cpp ファイルの表示

139
 // M218 - set hotend offset (in mm): T<extruder_number> X<offset_on_X> Y<offset_on_Y>
139
 // M218 - set hotend offset (in mm): T<extruder_number> X<offset_on_X> Y<offset_on_Y>
140
 // M220 S<factor in percent>- set speed factor override percentage
140
 // M220 S<factor in percent>- set speed factor override percentage
141
 // M221 S<factor in percent>- set extrude factor override percentage
141
 // M221 S<factor in percent>- set extrude factor override percentage
142
+// M226 P<pin number> S<pin state>- Wait until the specified pin reaches the state required
142
 // M240 - Trigger a camera to take a photograph
143
 // M240 - Trigger a camera to take a photograph
143
 // M250 - Set LCD contrast C<contrast value> (value 0..63)
144
 // M250 - Set LCD contrast C<contrast value> (value 0..63)
144
 // M280 - set servo position absolute. P: servo index, S: angle or microseconds
145
 // M280 - set servo position absolute. P: servo index, S: angle or microseconds
2147
       }
2148
       }
2148
     }
2149
     }
2149
     break;
2150
     break;
2151
+	
2152
+	case 226: // M226 P<pin number> S<pin state>- Wait until the specified pin reaches the state required
2153
+	{
2154
+      if(code_seen('P')){
2155
+        int pin_number = code_value(); // pin number
2156
+        int pin_state = -1; // required pin state - default is inverted
2157
+        
2158
+        if(code_seen('S')) pin_state = code_value(); // required pin state
2159
+      
2160
+        if(pin_state >= -1 && pin_state <= 1){
2161
+        
2162
+          for(int8_t i = 0; i < (int8_t)sizeof(sensitive_pins); i++)
2163
+          {
2164
+            if (sensitive_pins[i] == pin_number)
2165
+            {
2166
+              pin_number = -1;
2167
+              break;
2168
+            }
2169
+          }
2170
+        
2171
+          if (pin_number > -1)
2172
+          {
2173
+            st_synchronize();
2174
+            
2175
+            pinMode(pin_number, INPUT);
2176
+            
2177
+            int target;
2178
+            switch(pin_state){
2179
+            case 1:
2180
+              target = HIGH;
2181
+              break;
2182
+            
2183
+            case 0:
2184
+              target = LOW;
2185
+              break;
2186
+            
2187
+            case -1:
2188
+              target = !digitalRead(pin_number);
2189
+              break;
2190
+            }
2191
+            
2192
+            while(digitalRead(pin_number) != target){
2193
+              manage_heater();
2194
+              manage_inactivity();
2195
+              lcd_update();
2196
+            }
2197
+          }
2198
+        }
2199
+      }
2200
+    }
2201
+    break;	
2150
 
2202
 
2151
     #if NUM_SERVOS > 0
2203
     #if NUM_SERVOS > 0
2152
     case 280: // M280 - set servo position absolute. P: servo index, S: angle or microseconds
2204
     case 280: // M280 - set servo position absolute. P: servo index, S: angle or microseconds

読み込み中…
キャンセル
保存