Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
R
rndmc
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Jake Read
rndmc
Commits
6732ed93
Commit
6732ed93
authored
6 years ago
by
Jake Read
Browse files
Options
Downloads
Patches
Plain Diff
makes pwm for servos
parent
6b03260d
Branches
Branches containing commit
No related tags found
No related merge requests found
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
README.md
+6
-1
6 additions, 1 deletion
README.md
programs/mothercnc.js
+126
-0
126 additions, 0 deletions
programs/mothercnc.js
server.js
+8
-130
8 additions, 130 deletions
server.js
src/hardware/servo.js
+62
-0
62 additions, 0 deletions
src/hardware/servo.js
with
202 additions
and
131 deletions
README.md
+
6
−
1
View file @
6732ed93
...
...
@@ -13,8 +13,13 @@ This project serves the developement environment / api we use to write and repre

## Programming Notes
-
wake up planner sequence
-
wake up planner sequence, say hello
-
load program / don't during startup ?
-
flow control immediately ?
-
exercise to get in groove: pwm for servos & startup seq. in atkapi
-
once we can plan gcode sequence, work towards more
-
better hardware abstraction, i.e.
stepper.port = bridge.port('0,1')
...
...
This diff is collapsed.
Click to expand it.
programs/mothercnc.js
0 → 100644
+
126
−
0
View file @
6732ed93
/*
// wrap require() up, appending path used to object, and giving ID
// use the same to load from browser
var term = addModule('./src/ui/terminal.js')
var multiline = addModule('./src/ui/multiline.js')
var button = addModule('./src/ui/button.js')
var numOut = addModule('./src/ui/number.js')
var delay = addModule('./src/util/delay.js')
var gcode = addModule('./src/parsing/gcode.js')
var planner = addModule('./src/motion/planner.js')
var xm = addModule('./src/hardware/stepper.js')
var yma = addModule('./src/hardware/stepper.js')
var ymb = addModule('./src/hardware/stepper.js')
var zm = addModule('./src/hardware/stepper.js')
var t1 = addModule('./src/hardware/test.js')
var t2 = addModule('./src/hardware/test.js')
var t3 = addModule('./src/hardware/test.js')
var t4 = addModule('./src/hardware/test.js')
var t5 = addModule('./src/hardware/test.js')
var bridge = addModule('./src/hardware/bridge.js')
// attaching an output to an input
term.outputs.lineOut.attach(gcode.inputs.lineIn)
multiline.outputs.lineOut.attach(gcode.inputs.lineIn)
gcode.outputs.instructionOut.attach(planner.inputs.instruction)
button.outputs.whammy.attach(numOut.inputs.evt)
numOut.outputs.out.attach(multiline.inputs.req)
button.outputs.whammy.attach(delay.inputs.thru)
delay.outputs.out.attach(planner.inputs.run)
// bi-directional hook planner / motor
planner.outputs.moves.attach(xm.inputs.move)
xm.outputs.ack.attach(planner.inputs.acks)
planner.outputs.moves.attach(yma.inputs.move)
yma.outputs.ack.attach(planner.inputs.acks)
planner.outputs.moves.attach(ymb.inputs.move)
//ymb.outputs.ack.attach(planner.inputs.acks)
planner.outputs.moves.attach(zm.inputs.move)
zm.outputs.ack.attach(planner.inputs.acks)
planner.outputs.moveComplete.attach(multiline.inputs.req)
// same motors / bridge
xm.state.axis = 'X'
xm.state.spu = 100
xm.outputs.packet.attach(bridge.inputs.A)
bridge.outputs.A.attach(xm.inputs.packet)
bridge.state.rA = '0,3'
t1.outputs.packet.attach(bridge.inputs.A)
bridge.outputs.A.attach(t1.inputs.packet)
yma.state.axis = 'Y'
yma.state.spu = -100
yma.outputs.packet.attach(bridge.inputs.B)
bridge.outputs.B.attach(yma.inputs.packet)
bridge.state.rB = '0,0'
t2.outputs.packet.attach(bridge.inputs.B)
bridge.outputs.B.attach(t2.inputs.packet)
ymb.state.axis = 'Y'
// should have to reverse this but did it with wires :|
ymb.state.spu = -100
ymb.outputs.packet.attach(bridge.inputs.C)
bridge.outputs.C.attach(ymb.inputs.packet)
bridge.state.rC = '0,5'
t3.outputs.packet.attach(bridge.inputs.C)
bridge.outputs.C.attach(t3.inputs.packet)
zm.state.axis = 'Z'
zm.state.spu = -100
zm.outputs.packet.attach(bridge.inputs.D)
bridge.outputs.D.attach(zm.inputs.packet)
bridge.state.rD = '0,1'
t4.outputs.packet.attach(bridge.inputs.D)
bridge.outputs.D.attach(t4.inputs.packet)
t5.outputs.packet.attach(bridge.inputs.E)
bridge.outputs.E.attach(t5.inputs.packet)
bridge.state.rE = '0'
*/
bridge
.
init
()
multiline
.
load
()
// setting data w/r/t the representations they serve
setUiPos
(
multiline
,
10
,
10
)
setUiPos
(
gcode
,
450
,
10
)
setUiPos
(
term
,
450
,
180
)
setUiPos
(
button
,
450
,
300
)
setUiPos
(
numOut
,
450
,
400
)
setUiPos
(
delay
,
450
,
520
)
var
plCol
=
900
setUiPos
(
t1
,
plCol
,
730
)
setUiPos
(
t2
,
plCol
,
850
)
setUiPos
(
t3
,
plCol
,
970
)
setUiPos
(
t4
,
plCol
,
1090
)
setUiPos
(
t5
,
plCol
,
1210
)
setUiPos
(
planner
,
plCol
,
10
)
var
hwCol
=
1350
setUiPos
(
xm
,
hwCol
,
10
)
setUiPos
(
yma
,
hwCol
,
250
)
setUiPos
(
ymb
,
hwCol
,
490
)
setUiPos
(
zm
,
hwCol
,
730
)
setUiPos
(
bridge
,
hwCol
,
970
)
// setting ui elements / state
planner
.
state
.
isRunning
=
0
\ No newline at end of file
This diff is collapsed.
Click to expand it.
server.js
+
8
−
130
View file @
6732ed93
...
...
@@ -122,141 +122,19 @@ PROGRAM AS API
var
modules
=
new
Array
()
// wrap require() up, appending path used to object, and giving ID
// use the same to load from browser
var
term
=
addModule
(
'
./src/ui/terminal.js
'
)
var
multiline
=
addModule
(
'
./src/ui/multiline.js
'
)
var
button
=
addModule
(
'
./src/ui/button.js
'
)
var
numOut
=
addModule
(
'
./src/ui/number.js
'
)
var
delay
=
addModule
(
'
./src/util/delay.js
'
)
var
gcode
=
addModule
(
'
./src/parsing/gcode.js
'
)
var
planner
=
addModule
(
'
./src/motion/planner.js
'
)
var
xm
=
addModule
(
'
./src/hardware/stepper.js
'
)
var
yma
=
addModule
(
'
./src/hardware/stepper.js
'
)
var
ymb
=
addModule
(
'
./src/hardware/stepper.js
'
)
var
zm
=
addModule
(
'
./src/hardware/stepper.js
'
)
var
t1
=
addModule
(
'
./src/hardware/test.js
'
)
var
t2
=
addModule
(
'
./src/hardware/test.js
'
)
var
t3
=
addModule
(
'
./src/hardware/test.js
'
)
var
t4
=
addModule
(
'
./src/hardware/test.js
'
)
var
t5
=
addModule
(
'
./src/hardware/test.js
'
)
var
bridge
=
addModule
(
'
./src/hardware/bridge.js
'
)
// attaching an output to an input
term
.
outputs
.
lineOut
.
attach
(
gcode
.
inputs
.
lineIn
)
multiline
.
outputs
.
lineOut
.
attach
(
gcode
.
inputs
.
lineIn
)
gcode
.
outputs
.
instructionOut
.
attach
(
planner
.
inputs
.
instruction
)
button
.
outputs
.
whammy
.
attach
(
numOut
.
inputs
.
evt
)
numOut
.
outputs
.
out
.
attach
(
multiline
.
inputs
.
req
)
button
.
outputs
.
whammy
.
attach
(
delay
.
inputs
.
thru
)
delay
.
outputs
.
out
.
attach
(
planner
.
inputs
.
run
)
// bi-directional hook planner / motor
planner
.
outputs
.
moves
.
attach
(
xm
.
inputs
.
move
)
xm
.
outputs
.
ack
.
attach
(
planner
.
inputs
.
acks
)
planner
.
outputs
.
moves
.
attach
(
yma
.
inputs
.
move
)
yma
.
outputs
.
ack
.
attach
(
planner
.
inputs
.
acks
)
planner
.
outputs
.
moves
.
attach
(
ymb
.
inputs
.
move
)
//ymb.outputs.ack.attach(planner.inputs.acks)
planner
.
outputs
.
moves
.
attach
(
zm
.
inputs
.
move
)
zm
.
outputs
.
ack
.
attach
(
planner
.
inputs
.
acks
)
planner
.
outputs
.
moveComplete
.
attach
(
multiline
.
inputs
.
req
)
// same motors / bridge
xm
.
state
.
axis
=
'
X
'
xm
.
state
.
spu
=
100
xm
.
outputs
.
packet
.
attach
(
bridge
.
inputs
.
A
)
bridge
.
outputs
.
A
.
attach
(
xm
.
inputs
.
packet
)
bridge
.
state
.
rA
=
'
0,3
'
t1
.
outputs
.
packet
.
attach
(
bridge
.
inputs
.
A
)
bridge
.
outputs
.
A
.
attach
(
t1
.
inputs
.
packet
)
yma
.
state
.
axis
=
'
Y
'
yma
.
state
.
spu
=
-
100
yma
.
outputs
.
packet
.
attach
(
bridge
.
inputs
.
B
)
bridge
.
outputs
.
B
.
attach
(
yma
.
inputs
.
packet
)
bridge
.
state
.
rB
=
'
0,0
'
t2
.
outputs
.
packet
.
attach
(
bridge
.
inputs
.
B
)
bridge
.
outputs
.
B
.
attach
(
t2
.
inputs
.
packet
)
ymb
.
state
.
axis
=
'
Y
'
// should have to reverse this but did it with wires :|
ymb
.
state
.
spu
=
-
100
ymb
.
outputs
.
packet
.
attach
(
bridge
.
inputs
.
C
)
bridge
.
outputs
.
C
.
attach
(
ymb
.
inputs
.
packet
)
bridge
.
state
.
rC
=
'
0,5
'
t3
.
outputs
.
packet
.
attach
(
bridge
.
inputs
.
C
)
bridge
.
outputs
.
C
.
attach
(
t3
.
inputs
.
packet
)
zm
.
state
.
axis
=
'
Z
'
zm
.
state
.
spu
=
-
100
zm
.
outputs
.
packet
.
attach
(
bridge
.
inputs
.
D
)
bridge
.
outputs
.
D
.
attach
(
zm
.
inputs
.
packet
)
bridge
.
state
.
rD
=
'
0,1
'
t4
.
outputs
.
packet
.
attach
(
bridge
.
inputs
.
D
)
bridge
.
outputs
.
D
.
attach
(
t4
.
inputs
.
packet
)
t5
.
outputs
.
packet
.
attach
(
bridge
.
inputs
.
E
)
bridge
.
outputs
.
E
.
attach
(
t5
.
inputs
.
packet
)
bridge
.
state
.
rE
=
'
0
'
bridge
.
init
()
var
test
=
addModule
(
'
./src/hardware/test.js
'
)
var
servo
=
addModule
(
'
./src/hardware/servo.js
'
)
multiline
.
load
()
// setting data w/r/t the representations they serve
setUiPos
(
multiline
,
10
,
10
)
setUiPos
(
gcode
,
450
,
10
)
setUiPos
(
term
,
450
,
180
)
setUiPos
(
button
,
450
,
300
)
setUiPos
(
numOut
,
450
,
400
)
setUiPos
(
delay
,
450
,
520
)
var
plCol
=
900
test
.
outputs
.
packet
.
attach
(
bridge
.
inputs
.
B
)
bridge
.
outputs
.
B
.
attach
(
test
.
inputs
.
packet
)
setUiPos
(
t1
,
plCol
,
730
)
setUiPos
(
t2
,
plCol
,
850
)
setUiPos
(
t3
,
plCol
,
970
)
setUiPos
(
t4
,
plCol
,
1090
)
setUiPos
(
t5
,
plCol
,
1210
)
setUiPos
(
planner
,
plCol
,
10
)
servo
.
outputs
.
packet
.
attach
(
bridge
.
inputs
.
B
)
var
hwCol
=
1350
setUiPos
(
xm
,
hwCol
,
10
)
setUiPos
(
yma
,
hwCol
,
250
)
setUiPos
(
ymb
,
hwCol
,
490
)
setUiPos
(
zm
,
hwCol
,
730
)
setUiPos
(
bridge
,
hwCol
,
970
)
// setting ui elements / state
planner
.
state
.
isRunning
=
0
/*
term.state.uiInput = "G1 F100 Z10"
term.state.uiInput = "G1 Y10"
term.state.uiInput = "G1 X0"
term.state.uiInput = "G1 Y0"
term.state.uiInput = "G1 X10"
planner.state.isRunning = 1
*/
/*
term.state.uiInput = "G1 X0 Y10"
term.state.uiInput = "G1 X-1 Y0"
term.state.uiInput = "G1 X0 Y0"
*/
setUiPos
(
test
,
150
,
100
)
setUiPos
(
servo
,
150
,
300
)
setUiPos
(
bridge
,
750
,
150
)
function
setUiPos
(
module
,
left
,
top
){
if
(
module
.
ui
==
null
){
...
...
This diff is collapsed.
Click to expand it.
src/hardware/servo.js
0 → 100644
+
62
−
0
View file @
6732ed93
// boilerplate atkapi header
const
InOut
=
require
(
'
../../lib/inout.js
'
)
let
Input
=
InOut
.
Input
let
Output
=
InOut
.
Output
let
State
=
InOut
.
State
let
Button
=
InOut
.
Button
const
PCKT
=
require
(
'
../../lib/packets.js
'
)
// a constructor, a fn, a javascript mess
function
Servo
()
{
var
servo
=
{
// descriptions are used in UI
description
:
{
name
:
'
Breadboard Servo Signal Generator
'
,
alt
:
'
servo
'
}
}
servo
.
state
=
State
()
// alias !
var
state
=
servo
.
state
state
.
button
=
Button
(
'
SEND
'
)
state
.
onChange
(
'
button
'
,
onButtonPress
)
state
.
servoVal
=
0
// 0->100 does 1 -> 2ms duty on 20ms period
state
.
onChange
(
'
servoVal
'
,
onButtonPress
)
servo
.
inputs
=
{
packet
:
Input
(
'
headless packet
'
,
onPacketReturn
)
// makes anything into '1' event
}
servo
.
outputs
=
{
packet
:
Output
(
'
number
'
)
}
function
onButtonPress
(
evt
)
{
var
pwm
=
state
.
servoVal
if
(
pwm
>
100
){
pwm
=
100
}
else
if
(
pwm
<
0
){
pwm
=
0
}
var
microval
=
Math
.
round
(
7.5
*
pwm
)
console
.
log
(
'
pwm on line
'
,
microval
)
var
pwmpack
=
PCKT
.
pack32
(
microval
)
pwmpack
.
unshift
(
141
)
servo
.
outputs
.
packet
.
emit
(
pwmpack
)
}
function
onPacketReturn
(
evt
)
{
}
return
servo
}
// exports
module
.
exports
=
Servo
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment