Coding

PicoCricket download code

This is the code for making the dog bark on command. Every time someone claps their hands or makes a loud noise, the dog will bark twice at pitch 20 for a duration of 1/2 second.
This is the coding for the peeing mechanism. Every time the button is touched (placed at the nose), the bladder (or glass tube) would face downward for 3 seconds before returning to its former position.

Handy Board download code

menu 1 [start]
; other menu items are debugging and testing programs
menu 3 [rove]
menu 4 [not-pet]
menu 5 [eat-and-poop]
menu 6 [sense]

; global variable is-moving to turn the movement method on and off
; movement is turned off while any other action is executed
; and turned back on when nothing else is.
global [is-moving]

to start
setis-moving 1
forever[movement] ;roving method
forever[setis-moving 0 escape setis-moving 1] ;takes over if it runs into something
when [poop-bumper][setis-moving 0 poop setis-moving 1] ; waits to poop
when [tongue-bumper][setis-moving 0 eat setis-moving 1] ;waits to eat
forever[wag] ;looks for petting
end

;; if the dog is not doing anything else,
;; it will choose one of three random movements
;; to execute: go-forward, stop-moving, or random-turn.
to movement
     if (is-moving = 1) [
     random-move random 10
     wait 5 + random 20]
end

;; helper method for movement:
;; picks a random movement and executes
;; there is a 60% chance that it will go-forward
;; 30% chance it will stop-moving, and 10% chance
;; that it will turn
to random-move :number
     if :number = 0 [go-forward]
     if :number = 1 [go-forward]
     if :number = 2 [go-forward]
     if :number = 3 [go-forward]
     if :number = 4 [go-forward]
     if :number = 5 [go-forward]
     if :number = 6 [stop-moving]
     if :number = 7 [stop-moving]
     if :number = 8 [stop-moving]
     if :number = 9 [random-turn (random 1)]
end

;; moves away and turns if it runs into an obstacle while roving
to escape
     if front-bumper [turn-backward]
     if back-bumper [turn-forward]
end

;; when either of the light sensors become dark (i.e. someone pets the dog)
;; it will stop and wag its tail
to wag
     if or back-sensor > 230 head-sensor > 230
         [setis-moving 0
         stop-moving
         wag-tail
         wait 20
         setis-moving 1]
end

;; helper method for wag: the actual wagging movement
to wag-tail
     repeat 7 [tail onfor 5 rd]
end

;; when the poop-bumper is pressed, stop moving
;; and open and close the trapdoor
to poop
     stop-moving
     trap-door thisway onfor 5
     wait 5
     trap-door thatway onfor 5
end

;; when the tongue-bumper is pressed, it stops moving,
;; wags its tail, and eats
to eat
     stop-moving
     wag-tail
     wait 20
end


; sub-methods for leg movement
;;;;;;;;
;movement
;;;;;;;;

to stop-moving
     left-wheel off
     right-wheel off
end

to go-forward
     left-wheel on thisway
     right-wheel on thisway
end

to go-backward
     left-wheel on thatway
     right-wheel on thatway
end

to right-turn
     right-wheel rd on
     left-wheel on
end

to left-turn
     left-wheel rd on
     right-wheel on
end

; method for escape: front-bumper
to turn-backward
     go-backward
     wait 15
     left-wheel thatway
     right-wheel thatway
     random-turn (random 1)
     wait 35
     left-wheel thisway on
     right-wheel thisway on
end

; method for escape: back-bumper
to turn-forward
     left-wheel thisway
     right-wheel thisway
     go-forward
     wait 15
     random-turn (random 1)
     wait 35
     left-wheel thisway
     right-wheel thisway
     left-wheel on
     right-wheel on
end

; sub-method that picks a random direction to turn
to random-turn :number
     if :number = 0 [left-turn]
     if :number = 1 [right-turn]
end

;;;;;;;end movement


; here the various sensors/motors/switches are designated
;;;;;;
;variables
;;;;;;
to front-bumper
     output switch 7
end

to back-bumper
     output switch 8
end

to poop-bumper
     output switch 9
end

to tongue-bumper
     output switch 10
end

to left-wheel
     a,
end

to right-wheel
     b,
end

to tail
     c,
end

to trap-door
     d,
end

to head-sensor
     output (sensor 0)
end

to back-sensor
     output (sensor 1)
end

;;;;;;;; end variables


;; some debugging methods

; rove: moves and avoids obstacles
to rove
setis-moving 1
forever[movement] ;roving method
forever[setis-moving 0 escape setis-moving 1] ;takes over if it runs into something
end

; not-pet: program without the wag method - removes use of light sensors
to not-pet
setis-moving 1
forever[movement] ;roving method
forever[setis-moving 0 escape setis-moving 1] ;takes over if it runs into something
when [poop-bumper][setis-moving 0 poop setis-moving 1] ; waits to poop
when [tongue-bumper][setis-moving 0 eat setis-moving 1] ;waits to eat
end

; eat-and-poop: no movement
to eat-and-poop
setis-moving 1
when [poop-bumper][setis-moving 0 poop setis-moving 1] ; waits to poop
when [tongue-bumper][setis-moving 0 eat setis-moving 1] ;waits to eat
end

; sense: no movement, tests wag, poop, and eat
to sense
setis-moving 1
when [poop-bumper][setis-moving 0 poop setis-moving 1] ; waits to poop
when [tongue-bumper][setis-moving 0 eat setis-moving 1] ;waits to eat
forever[wag] ;looks for petting
end