4 <title>Single Command
</title>
5 <script src=
"http://code.jquery.com/jquery-1.9.1.js"></script>
6 <script type=text/javascript language=JavaScript
>
7 var concentric_circle_radii = [
11,
45,
69,
94,
115];
8 var center = [
124,
121];
10 var zbutton_ydistances = [
7,
30,
55,
83];
11 var zcenter = [
30,
118];
13 function runCommand(cmd) {
14 // Get some values from elements on the page:
15 var $form = $(
"#commandForm" );
17 url = $form.attr(
"action" );
18 // Send the data using post
19 var posting = $.post( url, cmd );
20 // Put the results in a div
21 posting.done(function( data ) {
22 $(
"#result" ).empty();
23 $.each(data.split('\n'), function(index) {
24 $(
"#result" ).append( this + '
<br/>' );
29 function lookupConcentric(radius){
30 var length = concentric_circle_radii.length;
31 for (i=
0;i<=length;i++) {
32 if (radius < concentric_circle_radii[i]) return(i);
37 function getQuadrantConcentricFromPosition(x,y) {
38 var rel_x = x - center[
0]
39 var rel_y = y - center[
1]
40 var radius = Math.sqrt(Math.pow(Math.abs(rel_x),
2) + Math.pow(Math.abs(rel_y),
2))
41 if (rel_x
> rel_y && rel_x
> -rel_y) {
42 quadrant =
0; // Right
43 } else if (rel_x <= rel_y && rel_x
> -rel_y) {
45 } else if (rel_x
> rel_y && rel_x < -rel_y) {
50 var idx = lookupConcentric(radius);
51 return [quadrant, idx]
54 function clickXY(event){
55 var pos_x = event.offsetX?(event.offsetX):event.pageX-document.getElementById(
"control_xy").offsetLeft;
56 var pos_y = event.offsetY?(event.offsetY):event.pageY-document.getElementById(
"control_xy").offsetTop;
57 var codes = getQuadrantConcentricFromPosition(pos_x,pos_y);
58 var quadrant = codes[
0], concentric = codes[
1];
59 if (concentric <
5) { // movement button pressed
60 var xdir = [
1,
0, -
1,
0,
0,
0][quadrant];
61 var ydir = [
0,
1,
0, -
1,
0,
0][quadrant];
62 var magnitude = Math.pow(
10, concentric -
2);
64 command =
"G1 X" + (magnitude * xdir) +
" F" + document.getElementById(
"xy_velocity").value;
66 command =
"G1 Y" + (magnitude * ydir) +
" F" + document.getElementById(
"xy_velocity").value;
68 runCommand(
"G91 " + command +
" G90");
69 } else { // home button pressed
70 if (pos_x <
49 && pos_y <
49) { // home x button
72 } else if (pos_x
> 200 && pos_y <
49) { //home y button
74 } else if (pos_x <
49 && pos_y
> 200) { // home all button
76 } else { // home z button
83 function lookupRange(ydist) {
84 var length = zbutton_ydistances.length;
85 for (i=
0;i
<length;i++) {
86 if (ydist < zbutton_ydistances[i]) return i;
90 function clickZ(event){
91 //var pos_x = event.offsetX?(event.offsetX):event.pageX-document.getElementById(
"control_z").offsetLeft;
92 var pos_y = event.offsetY?(event.offsetY):event.pageY-document.getElementById(
"control_z").offsetTop;
93 var ydelta = zcenter[
1] - pos_y;
94 var range = lookupRange(Math.abs(ydelta));
95 var direction = (ydelta
> 0)?
1:-
1;
97 runCommand(
"G91 G1 Z" + (Math.pow(
10,range-
2) * direction) +
" F" + document.getElementById(
"z_velocity").value +
" G90");
101 function extrude(event,a,b) {
102 var length = document.getElementById(
"extrude_length").value;
103 var velocity = document.getElementById(
"extrude_velocity").value;
104 var direction = (event.currentTarget.id=='extrude')?
1:-
1;
105 runCommand(
"G91 G1 E" + (length * direction) +
" F" + velocity +
" G90");
108 function motorsOff(event) {
112 function heatSet(event) {
113 var type = (event.currentTarget.id=='heat_set')?
104:
140;
114 var temperature = (type==
104)?document.getElementById(
"heat_value").value:document.getElementById(
"bed_value").value;
115 runCommand(
"M" + type +
" S" + temperature);
118 function heatOff(event) {
119 var type = (event.currentTarget.id=='heat_off')?
104:
140;
120 runCommand(
"M" + type +
" S0");
127 <h1>Welcome to Smoothie web interface
</h1>
129 <button id=motors_off onclick=motorsOff(event)
>Motors Off
</button>
130 XY:
<input type=text id=xy_velocity size=
4 value=
3000 style=width:
50px
>mm/min
131 Z:
<input type=text id=z_velocity size=
3 value=
200 style=width:
40px
>
133 <img id=control_xy src=img/control_xy.png onclick=clickXY(event)
>
134 <img id=control_z src=img/control_z.png onclick=clickZ(event)
>
139 <td style=text-align:right
>Heat:
</td>
140 <td><button id=heat_off onclick=heatOff(event)
>Off
</button></td>
141 <td><input type=text id=heat_value size=
3 style=width:
40px value=
0></td>
142 <td><button id=heat_set onclick=heatSet(event)
>Set
</button></td>
145 <td style=text-align:right
>Bed:
</td>
146 <td><button id=bed_off onclick=heatOff(event)
>Off
</button></td>
147 <td><input type=text id=bed_value size=
3 style=width:
40px value=
0></td>
148 <td><button id=bed_set onclick=heatSet(event)
>Set
</button></td>
152 <button id=get_temperature onclick=runCommand(
"M105")
>Get Temperature
</button>
155 <button id=extrude onclick=extrude(event)
>Extrude
</button>
156 <button id=reverse onclick=extrude(event)
>Reverse
</button><br>
157 <input type=text id=extrude_length value=
5 size=
3 style=width:
35px
>
159 <input type=text id=extrude_velocity value=
100 size=
3 style=width:
40px
>
163 <form action=
"/command" id=
"commandForm">
164 <input type=
"text" name=
"commandText" placeholder=
"Send Command...">
165 <input type=
"submit" value=
"Send">
167 <!-- the result of the command will be rendered inside this div -->
168 <div id=
"result"></div>
170 // Attach a submit handler to the form
171 $( "#commandForm" ).submit(function( event
) {
172 // Stop form from submitting normally
173 event
.preventDefault();
174 // Get some values from elements on the page:
175 var $form
= $( this );
176 command
= $form
.find( "input[name='commandText']" ).val();
178 url
= $form
.attr( "action" );
179 // Send the data using post
180 var posting
= $.post( url
, command
);
181 // Put the results in a div
182 posting
.done(function( data
) {
183 $( "#result" ).empty();
184 $.each(data
.split('\n'), function(index
) {
185 $( "#result" ).append( this + '<br/>' );
191 <h2> Upload File
</h2>
192 <input type=
"file" id=
"files" name=
"files[]" onchange=
"upload();" />
194 <h3>Uploading file(s)
</h3>
195 <output id=
"list"></output>
196 <div id=
"progress"></div>
197 <div id=
"uploadresult"></div>
199 function handleFileSelect(evt
) {
200 var files
= evt
.target
.files
; // handleFileSelectist object
202 // files is a FileList of File objects. List some properties.
204 for (var i
= 0, f
; f
= files
[i
]; i
++) {
205 output
.push('<li><strong>', escape(f
.name
), '</strong> (', f
.type
|| 'n/a', ') - ',
206 f
.size
, ' bytes, last modified: ',
207 f
.lastModifiedDate
? f
.lastModifiedDate
.toLocaleDateString() : 'n/a',
210 document
.getElementById('list').innerHTML
= '<ul>' + output
.join('') + '</ul>';
213 document
.getElementById('files').addEventListener('change', handleFileSelect
, false);
217 // take the file from the input
218 var file
= document
.getElementById('files').files
[0];
219 var reader
= new FileReader();
220 reader
.readAsBinaryString(file
); // alternatively you can use readAsDataURL
221 reader
.onloadend = function(evt
)
223 // create XHR instance
224 xhr
= new XMLHttpRequest();
226 // send the file through POST
227 xhr
.open("POST", 'upload', true);
228 xhr
.setRequestHeader('X-Filename', file
.name
);
230 // make sure we have the sendAsBinary method on all browsers
231 XMLHttpRequest
.prototype.mySendAsBinary = function(text
){
232 var data
= new ArrayBuffer(text
.length
);
233 var ui8a
= new Uint8Array(data
, 0);
234 for (var i
= 0; i
< text
.length
; i
++) ui8a
[i
] = (text
.charCodeAt(i
) & 0xff);
236 if(typeof window
.Blob
== "function")
238 var blob
= new Blob([data
]);
240 var bb
= new (window
.MozBlobBuilder
|| window
.WebKitBlobBuilder
|| window
.BlobBuilder
)();
242 var blob
= bb
.getBlob();
248 // let's track upload progress
249 var eventSource
= xhr
.upload
|| xhr
;
250 eventSource
.addEventListener("progress", function(e
) {
251 // get percentage of how much of the current file has been sent
252 var position
= e
.position
|| e
.loaded
;
253 var total
= e
.totalSize
|| e
.total
;
254 var percentage
= Math
.round((position
/total
)*100);
256 // here you should write your own code how you wish to proces this
257 $( "#progress" ).empty().append('uploaded ' + percentage
+ '%');
260 // state change observer - we need to know when and if the file was successfully uploaded
261 xhr
.onreadystatechange = function()
263 if(xhr
.readyState
== 4)
265 if(xhr
.status
== 200)
268 $( "#uploadresult" ).empty().append( 'Uploaded Ok');
271 $( "#uploadresult" ).empty().append( 'Uploaded Failed');
277 xhr
.mySendAsBinary(evt
.target
.result
);