lib/arduino_firmata/arduino.rb in arduino_firmata-0.1.7 vs lib/arduino_firmata/arduino.rb in arduino_firmata-0.1.8

- old
+ new

@@ -80,10 +80,14 @@ end sleep 0.01 end end + def reset + write SYSTEM_RESET + end + def digital_read(pin) (@digital_input_data[pin >> 3] >> (pin & 0x07)) & 0x01 > 0 end def analog_read(pin) @@ -91,37 +95,54 @@ end def pin_mode(pin, mode) write SET_PIN_MODE write pin - write mode + mode = case mode + when true + OUTPUT + when false + INPUT + else + mode + end + if write(mode) == 1 + return mode + end end def digital_write(pin, value) + pin_mode pin, OUTPUT port_num = (pin >> 3) & 0x0F if value == 0 or value == false @digital_output_data[port_num] &= ~(1 << (pin & 0x07)) else @digital_output_data[port_num] |= (1 << (pin & 0x07)) end write(DIGITAL_MESSAGE | port_num) write(@digital_output_data[port_num] & 0x7F) - write(@digital_output_data[port_num] >> 7) + if write(@digital_output_data[port_num] >> 7) == 1 + return value + end end def analog_write(pin, value) pin_mode pin, PWM write(ANALOG_MESSAGE | (pin & 0x0F)) write(value & 0x7F) - write(value >> 7) + if write(value >> 7) == 1 + return value + end end def servo_write(pin, angle) pin_mode pin, SERVO write(ANALOG_MESSAGE | (pin & 0x0F)) write(angle & 0x7F) - write(angle >> 7) + if write(angle >> 7) == 1 + return angle + end end private def write(cmd) return if status == Status::CLOSE