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