Jump to content

[Python] [Ruby] Distance IR simple_example.py funktioniert, simple_example.rb nicht


Recommended Posts

Hallo Leute,

 

ich versuche gerade das Distance IR Beispiel auf einer OS X 10.8/Ruby 1.9.3 Umgebung zum Laufen zu bringen. Leider stosse ich dabei immer nur auf den folgenden Fehler:

 

simple_example.rb

~/.rvm/gems/ruby-1.9.3-p194/gems/tinkerforge-2.0.1/lib/tinkerforge/ip_connection.rb:155:in `unpack': '<' allowed only after types sSiIlLqQ (ArgumentError)

from ~/.rvm/gems/ruby-1.9.3-p194/gems/tinkerforge-2.0.1/lib/tinkerforge/ip_connection.rb:155:in `get_length_from_data'

from ~/.rvm/gems/ruby-1.9.3-p194/gems/tinkerforge-2.0.1/lib/tinkerforge/ip_connection.rb:733:in `receive_loop'

from ~/.rvm/gems/ruby-1.9.3-p194/gems/tinkerforge-2.0.1/lib/tinkerforge/ip_connection.rb:676:in `block in connect_unlocked'

 

Process finished with exit code 1

 

Ich habe dann nochmal das Python-Beispiel probiert und siehe da es funzt. Ich habe die korrekte UID mehrfach überprüft und bin sicher, dass sie bei beiden Beispielen korrekt gesetzt ist.

 

Muss ich meine Ruby-Umgebung noch irgendwie erweitern/einstellen, damit das geht?

 

Ich bin für jeden Tipp dankbar!

 

Viele Grüße,

 

Christian

 

P.S Warum gibt es eigentlich kein [Ruby] Prefix?

Link zu diesem Kommentar
Share on other sites

Bei mir funktionierts:

 

olaf@pc:~/build20/ruby$ ls
example_simple.rb  tinkerforge
olaf@pc:~/build20/ruby$ cat example_simple.rb 
#!/usr/bin/env ruby
# -*- ruby encoding: utf-8 -*-

require 'tinkerforge/ip_connection'
require 'tinkerforge/bricklet_distance_ir'

include Tinkerforge

HOST = 'localhost'
PORT = 4223
UID = 'aUt' # Change to your UID

ipcon = IPConnection.new # Create IP connection
dir = BrickletDistanceIR.new UID, ipcon # Create device object

ipcon.connect HOST, PORT # Connect to brickd
# Don't use device before ipcon is connected

# Get current distance (unit is mm)
distance = dir.get_distance / 10.0
puts "Distance: #{distance} cm"

puts 'Press key to exit'
$stdin.gets
olaf@pc:~/build20/ruby$ ruby1.9.1 -I. example_simple.rb 
Distance: 10.5 cm
Press key to exit

olaf@pc:~/build20/ruby$

 

Allerdings gibt es in der ruby Doku in der Tat kein "C<" als Argument für unpack: http://www.ruby-doc.org/core-1.9.3/String.html#method-i-unpack

 

Da es bei 8bit Typen keinen unterschied zwischen little- und big-endian gibt, ist es dort auch nicht notwendig.

 

Kannst du mal einmal testweise alle "C<" in der ip_connection.rb durch "C" ersetzen?

Link zu diesem Kommentar
Share on other sites

Alles klar, vielen Dank für die Hilfe! Ich hab Ruby Bindings 2.0.2 veröffentlicht, die sollten mit Ruby 1.9.3 "out of the box" funktionieren.

 

Warum hat es bei Dir funktioniert und bei mir nicht?

 

Naja, das "<" bei "C<" bei einem unpack Aufruf ist überflüssig. In Ruby 1.9.1 wird das "<" einfach ignoriert, Ruby 1.9.3 schmeißt eine Exception. Vermutlich hat keiner der Ruby Entwickler daran gedacht, dass diese Änderung existieren Code brechen kann.

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...