processing / processing/processing-website

Serial.write documentation errors.

オープン
#352 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
MDX
スター
90
フォーク
122
平均マージ
1時間 43分
マージ済み PR(30日)
3

説明

Description

  1. The reference for Serial.write implies that you can have one or more parameters of type byte[], String or int. As far as I can see it accepts only one parameter (of any of those types).

The method write(int) in the type Serial is not applicable for the arguments (String, int)
The method write(int) in the type Serial is not applicable for the arguments (int, String)

  1. Serial.write with integer parameter sends only the least-significant byte.

Assuming that serial.write(int-var) is valid, although not an example in Processing-4 (it was an example in Processing-3). It sends only the least-sig byte. Maybe this is as intended, but the reference doesn't say that so you'd expect the whole integer, all 4 bytes, to be written.

Expected Behavior

I'd expect the serial.write() to accept all the formats given in the reference. Assuming that the code is working correctly, then the reference should have examples of each possibility write(byte[]), byte, String, int. (I've only tested int.) No examples with multiple parameters.

I'd expect write(int) to send the whole integer, or if the help states that it only sends the least-sig byte, then 1 byte will do.

Current Behavior

Serial.write does not accept the reference multi-parameter examples.

The method write(int) in the type Serial is not applicable for the arguments (int, String)
The method write(int) in the type Serial is not applicable for the arguments (String, int)

Serial.write(int) sends only the least-sig byte.

Steps to Reproduce

Processing code.

  • Comment in lines 28,29 and they are not accepted.
  • Sends int to Ard at 1Hz. Prints out the returned text.) You can see that Ard is getting only the least sig-byte.
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, "");
    //port.write("", 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;}
}

Arduino Code

#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);
}

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

X is the value Processing has, continues increasing. Arduino is sending back value of only 1 byte, limited to 255.

Your Environment

Windows-10, Processing 4.0b3, Ard 1.8.5, Ard-Nano.

Possible Causes / Solutions

Which is right, the serial.write() behaviour, or the reference? Why was the documentation changed between Processing 3 and 4. The easy solution is to make the reference match the current behaviour. Only 1 parameter of 3 types.

For the write(int) add the reference line, something like "with an integer parameter the least-significant byte is sent (value 0..255).

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

リンクされている Serial.write リファレンスを開き、そのパラメータ例を、Processing スケッチと Arduino の出力に示されている 1 引数の動作と比較します。サポートされているシグネチャと最下位バイトの動作が正確になるようにリファレンスを更新し、その後、例が複数パラメータの呼び出しを示さなくなっていることを確認します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
arduino
領域
documentation, embedded-iot
issue の種類
ドキュメント
難易度
2/5
見積もり時間
1〜3時間
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
38/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。