Browse Source

Merge pull request #647 from shaggythesheep/newfeature-M226

Implement M226 - GCode Initiated Pause
ErikZalm 11 years ago
parent
commit
24d1f480b6
1 changed files with 52 additions and 0 deletions
  1. 52
    0
      Marlin/Marlin_main.cpp

+ 52
- 0
Marlin/Marlin_main.cpp View File

@@ -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
@@ -2156,6 +2157,57 @@ void process_commands()
2156 2157
       }
2157 2158
     }
2158 2159
     break;
2160
+	
2161
+	case 226: // M226 P<pin number> S<pin state>- Wait until the specified pin reaches the state required
2162
+	{
2163
+      if(code_seen('P')){
2164
+        int pin_number = code_value(); // pin number
2165
+        int pin_state = -1; // required pin state - default is inverted
2166
+        
2167
+        if(code_seen('S')) pin_state = code_value(); // required pin state
2168
+      
2169
+        if(pin_state >= -1 && pin_state <= 1){
2170
+        
2171
+          for(int8_t i = 0; i < (int8_t)sizeof(sensitive_pins); i++)
2172
+          {
2173
+            if (sensitive_pins[i] == pin_number)
2174
+            {
2175
+              pin_number = -1;
2176
+              break;
2177
+            }
2178
+          }
2179
+        
2180
+          if (pin_number > -1)
2181
+          {
2182
+            st_synchronize();
2183
+            
2184
+            pinMode(pin_number, INPUT);
2185
+            
2186
+            int target;
2187
+            switch(pin_state){
2188
+            case 1:
2189
+              target = HIGH;
2190
+              break;
2191
+            
2192
+            case 0:
2193
+              target = LOW;
2194
+              break;
2195
+            
2196
+            case -1:
2197
+              target = !digitalRead(pin_number);
2198
+              break;
2199
+            }
2200
+            
2201
+            while(digitalRead(pin_number) != target){
2202
+              manage_heater();
2203
+              manage_inactivity();
2204
+              lcd_update();
2205
+            }
2206
+          }
2207
+        }
2208
+      }
2209
+    }
2210
+    break;	
2159 2211
 
2160 2212
     #if NUM_SERVOS > 0
2161 2213
     case 280: // M280 - set servo position absolute. P: servo index, S: angle or microseconds

Loading…
Cancel
Save