Question

J'ai des nombres entiers de 0 à 255, et je dois les transmettre à un OutputStream codé sous forme d'octets non signés. J'ai essayé de convertir à l'aide d'un masque comme, mais si i = 1, l'autre extrémité de mon flux (un périphérique série uint8_t attendant) pense que je l'ai envoyé un entier non signé = 6.

OutputStream out;
public void writeToStream(int i) throws Exception {
    out.write(((byte)(i & 0xff)));
}

Je parle à un Arduino à /dev/ttyUSB0 en utilisant Ubuntu si cela rend les choses plus ou moins intéressantes.

Voici le code Arduino:

uint8_t nextByte() {
    while(1) {
    if(Serial.available() > 0) {
        uint8_t b =  Serial.read();
      return b;
     }
    }
}

J'ai aussi un code Python qui fonctionne très bien avec le code Arduino et l'Arduino REÇOIT heureusement le nombre entier correct si j'utilise ce code en Python:

class writerThread(threading.Thread): 
    def __init__(self, threadID, name):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
    def run(self):
        while True:
            input = raw_input("[W}Give Me Input!")
            if (input == "exit"):
               exit("Goodbye");
            print ("[W]You input %s\n" % input.strip())
            fval = [ int(input.strip()) ]
            ser.write("".join([chr(x) for x in fval]))

Je voudrais aussi par la suite, comme de le faire à Scala, mais je retombe à Java pour éviter la complexité alors que je résoudre ce problème.

Était-ce utile?

La solution

Cast, puis le masque: ((byte)(i)&0xff)

Mais, quelque chose est très étrange depuis:

(dec) 8 - (binaire) 1000
(Dec) 6 - (binaire) 0110

[modifier]
Comment est votre Arduino recevoir 6 (binaire) 0110 lorsque vous envoyez 1 (binaire) 0001
[/ Edit]

Autres conseils

Je pense que vous voulez juste out.write(i) ici. Seuls les huit bits de poids faible sont écrits à partir de l'argument int i.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top