VS Code と Arduino

先回開発環境を整えられた気がするのでとりあえずなんか開発してみたい、となった。とりあえずLEDのオンオフと明るさを変えられるようなプログラムをお出しください、とChatGPT(3.5)くんに問うたところまあそれっぽいものを出してくれた

const int ledPin = 13;
int brightness = 0;
bool isOn = false;

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  if (isOn) {
    analogWrite(ledPin, brightness);
  } else {
    analogWrite(ledPin, 0);
  }
}
import controlP5.*;

ControlP5 cp5;
Serial myPort;
int brightnessValue = 0;

void setup() {
  size(400, 200);
  String portName = Serial.list()[0]; // Arduinoのシリアルポート名を指定
  myPort = new Serial(this, portName, 9600);
  cp5 = new ControlP5(this);

  cp5.addButton("onOff")
    .setPosition(50, 50)
    .setSize(80, 30)
    .setCaptionLabel("ON/OFF");

  cp5.addKnob("brightness")
    .setPosition(200, 50)
    .setRange(0, 255)
    .setValue(0)
    .setCaptionLabel("Brightness");
}

void draw() {
  background(240);
}

void onOff() {
  isOn = !isOn;
  myPort.write(isOn ? '1' : '0');
}

void brightness(int val) {
  brightnessValue = val;
  myPort.write(val);
}

まあ当然動かない。Processingでシリアル通信したいんだが?とかそもそも13番はPWMに対応してねーだろとかいろいろ色々注文付けて最終的にお出しされたのが次のもの。

int ledPin = 9;

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
if (Serial.available() > 0) {
     int brightnessValue = Serial.parseInt();
      analogWrite(ledPin, brightnessValue);
}
}
import controlP5.*;
import processing.serial.*;

ControlP5 cp5;
Serial myPort;
int brightnessValue = 0;
boolean isOn = false;

void setup() {
  size(400, 200);
  String portName = Serial.list()[0];
  myPort = new Serial(this, portName, 9600);
  cp5 = new ControlP5(this);

  cp5.addButton("onOff")
    .setPosition(50, 50)
    .setSize(80, 30)
    .setCaptionLabel("ON/OFF");

  cp5.addSlider("LEDbrightness")
    .setPosition(200, 50)
    .setRange(0, 255)
    .setValue(0)
    .setCaptionLabel("Brightness");
}

void draw() {
  background(240);
}

void onOff() {
  isOn = !isOn;
  myPort.write(isOn ? '1' : '0');
}

void LEDbrightness(int val) {
  brightnessValue = val;
  myPort.write(val);
}

なんか動きそう!
ていうかそれっぽく動いたが本当によくわからない不具合が生じている。

brightnessValueが51, 53, 56のときだけLEDが光ってそれ以外だと光らないというもの。

とりあえずArduino側でanalogWrite(ledPin, 128);とか適当に設定しても光るのでVSとArduino間の通信に問題が生じている可能性がある?

とりあえずわかりません。はい。治ったら追記します。


この記事が気に入ったらサポートをしてみませんか?