2

基本的に、LED 棒グラフはBarGraphのチュートリアル コードに従っています。私はポテンショメータを持っていないので、Dimmerの調光器の例に基づいて、 Processingシリアル書き込みを使用して模倣することを考えました。次のように、処理アプリケーションからの入力に値を設定しました(グリッドを 1023 要素に更新します)。sensorReading

  int sensorReading;
  if (Serial.available()) {
      // Read the most recent byte (which will be from 0 to 1023):
      sensorReading = Serial.read();
  }

これにより、Processing アプリケーションのグリッドでのマウスの位置に基づいて LED が点灯します。ただし、LEDは非常に暗いです。sensorReading値の設定方法を変更すると、次のようになります。

  int sensorReading = random(0, 1023);

その後、LED はより明るく点灯します。LEDはすべてデジタル出力ピンにあるので、値に基づいてオン/オフを送信するだけでsensorReading、明るさとは関係ないと思いました. 私は何が欠けていますか?

処理コードは次のとおりです。

 // Dimmer - sends bytes over a serial port
 // by David A. Mellis
 //
 // This example code is in the public domain.

 import processing.serial.*;
 Serial port;

 void setup() {
     size(256, 150);

     println("Available serial ports:");
     println(Serial.list());

     // Uses the first port in this list (number 0). Change this to
     // select the port corresponding to your Arduino board. The last
     // parameter (for example, 9600) is the speed of the communication. It
     // has to correspond to the value passed to Serial.begin() in your
     // Arduino sketch.
     //port = new Serial(this, Serial.list()[0], 9600);

     // If you know the name of the port used by the Arduino board, you
     // can specify it directly like this.
     port = new Serial(this, "COM6", 9600);
 }

 void draw() {
     // Draw a gradient from black to white
     for (int i = 0; i < 1024; i++) {
         stroke(i);
         line(i, 0, i, 150);
     }

     // Write the current X-position of the mouse to the serial port as
     // a single byte.
     port.write(mouseX);
 }

Arduinoコードは次のとおりです。

// These constants won't change:
const int analogPin = A0;   // The pin that the potentiometer is attached to.
const int ledCount = 10;    // The number of LEDs in the bar graph.

int ledPins[] = {
  2, 3, 4, 5, 6, 7,8,9,10,11 };   // An array of pin numbers to which LEDs are attached.

void setup() {
    Serial.begin(9600);
    // Loop over the pin array and set them all to output:
    for (int thisLed = 0; thisLed < ledCount; thisLed++) {
      pinMode(ledPins[thisLed], OUTPUT);
    }
}

void loop() {
    // Read the potentiometer:
    //   int sensorReading = random(0, 1023);
    //   delay(250);
    byte streamReading;
    if (Serial.available()) {
        // Read the most recent byte (which will be from 0 to 255):
        sensorReading = Serial.read();
    }
    //Serial.println(sensorReading);

    // Map the result to a range from 0 to the number of LEDs:
    int ledLevel = map(sensorReading, 0, 255, 0, ledCount);

    // Loop over the LED array:
    for (int thisLed = 0; thisLed < ledCount; thisLed++) {
        // If the array element's index is less than ledLevel,
        // turn the pin for this element on:
        if (thisLed < ledLevel) {
            digitalWrite(ledPins[thisLed], HIGH);
        }
        // Turn off all pins higher than the ledLevel:
        else {
            digitalWrite(ledPins[thisLed], LOW);
        }
    }
}
4

2 に答える 2

0

// 最新のバイト (0 から 1023 まで) を読み取ります

バイトは 0 から 255 までです。そして、それらは (通常) ASCII 文字セットの文字を表します。

0 から 1023 までの数値を読み取ることを想定している場合、一度に 1 文字ずつ送信される可能性があります (つまり、文字の1後に文字が続く0と数値 10 を表します)。この場合、それらを解析して数値に変換する必要があります。期待どおりに使用できます。

parseInt関数はおそらく必要なものです - ASCII 整数の読み取りに関するチュートリアルはここにあります

于 2013-04-04T11:55:45.860 に答える