|
@@ -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
|