Serial.write(int) Only Sends The First Byte - Electronics (Arduino, Etc.)

Hi,

Following this topic, I made a simple Sketch to write an integer from Processing to Arduino. The help for Serial.write in Processing 3 and 4 are different. P3 (on disk) has “src int: data to write” so it should accept an integer. I would hope it sends the whole integer, 4 bytes, but for me it only sends the least-significant byte.

The Arduino sketch below receives byte(s), flashes a led, and prints the value back to the PC as text. The Processing sketch writes a sequence of integer values to the Arduino, prints the value sent and the text it gets back.

What I see is only 1 byte being sent. I’d appreciate it if someone else would check. Either I’m confused or the help is unclear/wrong.

Then I read the help for Serial.write in Processing 4. Things get more messy. There are several examples of sending combinations of parameter types, but not an int alone. I tried ("",i1) but it doesn’t like that. I didn’t try other combinations.

The function "write()" expects parameters like: "write(int)"

Test Kit: Windows-10, Processing 4.0b3, Ard 1.8.5, Ard-Nano.

Arduino:

#define pM pinMode #define dW digitalWrite int i1; int led = 7; void setup() { Serial.begin(9600); Serial.println(); Serial.println(__FILE__); Serial.println(__DATE__); Serial.println(__TIME__); pM(led, OUTPUT); } void loop() { dW(led, 0); if (Serial.available() > 0) { i1 = Serial.read(); dW(led, 1); Serial.print(i1); } delay(10); }

Processing:

final boolean T = true; final boolean F = false; import processing.serial.*; Serial port; byte b1; int i1 = 0; long l1; void setup() { frameRate(10); size(140, 80); port = new Serial(this, "COM13", 9600); noStroke(); smooth(); } void draw() { boolean inComing = F; char ch; if (frameCount > 50 && frameCount % 10 == 0) { b1 = (byte) i1; l1 = i1; port.write(i1); print(String.format("X %d ",l1)); i1 += 53; } if (port.available() > 0) { print("R "); inComing = T; delay(10); } while (port.available() > 0) { ch = (char) port.read(); print(ch); } if (inComing) { print(" "); inComing = F;} }

Output:

X 0 R 0 X 53 R 53 X 106 R 106 X 159 R 159 X 212 R 212 X 265 R 9 X 318 R 62 X 371 R 115 X 424 R 168 X 477 R 221 X 530 R 18 X 583 R 71 X 636 R 124 X 689 R 177 X 742 R 230 X 795 R 27 X 848 R 80 X 901 R 133

Tag » Arduino Write Byte To Port