tests: adds sav file for pep8analysis_web
[nit.git] / lib / bcm2835.nit
index cb9575a..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)
@@ -457,3 +457,116 @@ class HD44780
                self.last_text = v
        end
 end
+
+# Component for any kind of buttons or switches
+class Switch
+       var pin: RPiPin
+
+       init (pin: RPiPin, pud: PUDControl)
+       do
+               self.pin = pin
+               pin.fsel = new FunctionSelect.inpt
+               pin.pud = pud
+       end
+
+       fun is_down: Bool do return pin.lev
+
+       var last_down: nullable Bool = null
+
+       # Returns true is state (is_down) changed since last call to `changed`
+       fun changed: Bool
+       do
+               var now = is_down
+               var last_down = last_down
+               if last_down == null then
+                       self.last_down = now
+                       return false
+               else if last_down != now then
+                       self.last_down = now
+                       return true
+               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