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