Преглед изворни кода

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,6 +139,7 @@
139 139
 // M218 - set hotend offset (in mm): T<extruder_number> X<offset_on_X> Y<offset_on_Y>
140 140
 // M220 S<factor in percent>- set speed factor override percentage
141 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 143
 // M240 - Trigger a camera to take a photograph
143 144
 // M250 - Set LCD contrast C<contrast value> (value 0..63)
144 145
 // M280 - set servo position absolute. P: servo index, S: angle or microseconds
@@ -2147,6 +2148,57 @@ void process_commands()
2147 2148
       }
2148 2149
     }
2149 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 2203
     #if NUM_SERVOS > 0
2152 2204
     case 280: // M280 - set servo position absolute. P: servo index, S: angle or microseconds

Loading…
Откажи
Сачувај