Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions jacdac/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# MakeCode
built
node_modules
yotta_modules
yotta_targets
pxt_modules
_site
*.db
*.tgz
.header.json
.simstate.json
1 change: 1 addition & 0 deletions jacdac/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Robobit Jacdac Extension
129 changes: 129 additions & 0 deletions jacdac/main.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
//% deprecated
namespace robotbit {

}

namespace modules {
/**
* Motor 1A
*/
//% fixedInstance whenUsed block="robotbit motor 1A"
export const robotbitMotor1A = new MotorClient("robotbit motor 1A?dev=self&srvo=0")
/**
* Motor 1B
*/
//% fixedInstance whenUsed block="robotbit motor 1B"
export const robotbitMotor1B = new MotorClient("robotbit motor 1B?dev=self&srvo=1")
/**
* Motor 2A
*/
//% fixedInstance whenUsed block="robotbit motor 2A"
export const robotbitMotor2A = new MotorClient("robotbit motor 2A?dev=self&srvo=2")
/**
* Motor 2B
*/
//% fixedInstance whenUsed block="robotbit motor 2B"
export const robotbitMotor2B = new MotorClient("robotbit motor 2B?dev=self&srvo=3")

/**
* Servo S1
*/
export const robotbitServoS1 = new ServoClient("robotbit servo S1?dev=self&srvo=0&name=S1")
/**
* Servo S2
*/
export const robotbitServoS2 = new ServoClient("robotbit servo S2?dev=self&srvo=1")
/**
* Servo S3
*/
export const robotbitServoS3 = new ServoClient("robotbit servo S3?dev=self&srvo=2")
/**
* Servo S4
*/
export const robotbitServoS4 = new ServoClient("robotbit servo S4?dev=self&srvo=3")
/**
* Servo S5
*/
export const robotbitServoS5 = new ServoClient("robotbit servo S5?dev=self&srvo=4")
/**
* Servo S6
*/
export const robotbitServoS6 = new ServoClient("robotbit servo S6?dev=self&srvo=5")
/**
* Servo S7
*/
export const robotbitServoS7 = new ServoClient("robotbit servo S7?dev=self&srvo=6")
/**
* Servo S8
*/
export const robotbitServoS8 = new ServoClient("robotbit servo S8?dev=self&srvo=7")
}

namespace servers {
jacdac.productIdentifier = 0x3dffd752
class MotorServer extends jacdac.Server {
motor: robotbit.Motors
speed: number
enabled: boolean

constructor(motor: robotbit.Motors, instanceName: string) {
super(jacdac.SRV_MOTOR, { instanceName: instanceName })
this.motor = motor
this.enabled = false

robotbit.MotorStop(this.motor)
}

handlePacket(pkt: jacdac.JDPacket) {
this.handleRegValue(pkt, jacdac.MotorReg.Reversible, jacdac.MotorRegPack.Reversible, true)
this.speed = this.handleRegValue(pkt, jacdac.MotorReg.Speed, jacdac.MotorRegPack.Speed, this.speed)
this.enabled = this.handleRegBool(pkt, jacdac.MotorReg.Enabled, this.enabled)

this.sync()
}

sync() {
if (!this.enabled || this.speed == 0)
robotbit.MotorStop(this.motor)
else {
robotbit.MotorRun(this.motor, this.speed * 0xff)
}
}
}
class ServoServer extends jacdac.Server {
servo: robotbit.Servos
angle: number
constructor(servo: robotbit.Servos, instanceName: string) {
super(jacdac.SRV_SERVO, { instanceName: instanceName })
this.servo = servo
this.angle = 0
}
handlePacket(pkt: jacdac.JDPacket) {
this.angle = this.handleRegValue(pkt, jacdac.ServoReg.Angle, jacdac.ServoRegPack.Angle, this.angle)
this.handleRegValue(pkt, jacdac.ServoReg.ActualAngle, jacdac.ServoRegPack.ActualAngle, this.angle)

robotbit.Servo(this.servo, this.angle)
}
}
function start() {
jacdac.productIdentifier = 0x31ea8476
jacdac.deviceDescription = "Kittenbot Robo:bit"
jacdac.startSelfServers(() => [
// motors
new MotorServer(robotbit.Motors.M1A, "M1A"),
new MotorServer(robotbit.Motors.M1B, "M1B"),
new MotorServer(robotbit.Motors.M2A, "M2A"),
new MotorServer(robotbit.Motors.M2B, "M2B"),
// servos
new ServoServer(robotbit.Servos.S1, "S1"),
new ServoServer(robotbit.Servos.S2, "S2"),
new ServoServer(robotbit.Servos.S3, "S3"),
new ServoServer(robotbit.Servos.S4, "S4"),
new ServoServer(robotbit.Servos.S5, "S5"),
new ServoServer(robotbit.Servos.S6, "S6"),
new ServoServer(robotbit.Servos.S7, "S7"),
new ServoServer(robotbit.Servos.S8, "S8"),
])
}
start()
}
28 changes: 28 additions & 0 deletions jacdac/pxt.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"name": "robotbit-jacdac",
"version": "0.3.15",
"dependencies": {
"core": "*",
"radio": "*",
"microphone": "*",
"pxt-robotbit": "github:KittenBot/pxt-robotbit",
"jacdac": "github:microsoft/pxt-jacdac#v0.10.41",
"jacdac-motor": "github:microsoft/pxt-jacdac/motor#v0.10.41",
"jacdac-servo": "github:microsoft/pxt-jacdac/servo#v0.10.41"
},
"files": [
"main.ts",
"README.md"
],
"testFiles": [
"test.ts"
],
"targetVersions": {
"target": "4.1.45",
"targetId": "microbit"
},
"supportedTargets": [
"microbit"
],
"preferredEditor": "tsprj"
}
27 changes: 27 additions & 0 deletions jacdac/test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
let speed = 0
let dv = 5
forever(() => {
led.toggle(0, 0)

modules.robotbitMotor1A.run(speed)
modules.robotbitMotor1B.run(- speed)
modules.robotbitMotor2A.run(speed / 2)
modules.robotbitMotor2B.run((- speed) / 2)

modules.robotbitServoS1.setAngle(speed)
modules.robotbitServoS2.setAngle(speed)
modules.robotbitServoS3.setAngle(speed)
modules.robotbitServoS4.setAngle(speed)
modules.robotbitServoS5.setAngle(speed)
modules.robotbitServoS6.setAngle(speed)
modules.robotbitServoS7.setAngle(speed)
modules.robotbitServoS8.setAngle(speed)

speed += dv
if (speed > 100) {
dv = -5
} else if (speed < -100) {
dv = 5
}
pause(250)
})
9 changes: 9 additions & 0 deletions jacdac/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"compilerOptions": {
"target": "ES5",
"noImplicitAny": true,
"outDir": "built",
"rootDir": "."
},
"exclude": ["pxt_modules/**/*test.ts"]
}