Merge: ordered_tree: make OrderedTree implement Collection
[nit.git] / lib / bcm2835.nit
index 3ef0d61..aac7352 100644 (file)
@@ -440,7 +440,7 @@ class HD44780
                clear
                return_home
                var count = 0
-               for c in v do
+               for c in v.chars do
                        if c == '\n' then
                                # FIXME, this should work
                                #write(true, "C0".to_hex)
@@ -487,3 +487,86 @@ class Switch
                else return false
        end
 end
+
+class StepperMotor
+       var pins: Sequence[RPiPin]
+       var delay: Int
+
+       init (delay: Int, a, b, c, d: RPiPin)
+       do
+               pins = [a, b, c, d]
+               self.delay = delay
+
+               for p in pins do p.fsel = new FunctionSelect.outp
+       end
+
+       fun forward(steps: Int)
+       do
+               for s in [0..steps[ do
+                       set(true, false, false, false)
+                       delay.bcm2835_delay
+                       set(true, true, false, false)
+                       delay.bcm2835_delay
+                       set(false, true, false, false)
+                       delay.bcm2835_delay
+                       set(false, true, true, false)
+                       delay.bcm2835_delay
+                       set(false, false, true, false)
+                       delay.bcm2835_delay
+                       set(false, false, true, true)
+                       delay.bcm2835_delay
+                       set(false, false, false, true)
+                       delay.bcm2835_delay
+                       set(true, false, false, true)
+                       delay.bcm2835_delay
+               end
+       end
+
+       fun backwards(steps: Int)
+       do
+               for s in [0..steps[ do
+                       set(true, false, false, true)
+                       delay.bcm2835_delay
+                       set(false, false, false, true)
+                       delay.bcm2835_delay
+                       set(false, false, true, true)
+                       delay.bcm2835_delay
+                       set(false, false, true, false)
+                       delay.bcm2835_delay
+                       set(false, true, true, false)
+                       delay.bcm2835_delay
+                       set(false, true, false, false)
+                       delay.bcm2835_delay
+                       set(true, true, false, false)
+                       delay.bcm2835_delay
+                       set(true, false, false, false)
+                       delay.bcm2835_delay
+               end
+       end
+
+       fun release do set(false, false, false, false)
+
+       protected fun set(a, b, c, d: Bool)
+       do
+               var bits = new Array[Bool].with_items(a, b, c, d)
+
+               for i in [0..4[ do pins[i].write(bits[i])
+       end
+end
+
+class Buzzer
+       var pin: RPiPin
+
+       fun buzz(delay: Float, times: Int)
+       do
+               assert times > 0
+               assert delay > 0.0
+               var delay_i = (delay*1000.0).to_i
+               for i in [0..times[ do
+                       pin.write(true)
+                       delay_i.bcm2835_delay_micros
+                       pin.write(false)
+                       delay_i.bcm2835_delay_micros
+               end
+       end
+end