友人と一緒にArduinoで遊んだ時のメモです。LEDの使い方、Serial通信のことをまとめておきます。
LEDの電流制限抵抗の求め方
R = \frac{(V_{cc}-V_f)}{I_f}
VfはLEDの逆起電力、Vccは電源電圧、IfはLEDの定格電流としました。
また、例えばフルカラーLEDなどで、素子の輝度[mcd]がRGBで異なる場合、このように補正すると良いです。
R = \frac{(V_{cc}-V_f)}{I_f\frac{l_0}{l}}
lは対象の素子の輝度、l0は基準の素子の輝度です。
Serial通信で複数の信号を送りたいとき
3つのデータを送りたいときは、Processing側で4つデータを送信する。最後の一つをダミーとして(0とか)、Arduino側で4つのデータを受信する。Serial.available()は読み込もうとしているデータのたまっている数を返す。
import controlP5.*;
import processing.serial.*;
Serial myPort;
ControlP5 red,green,blue;
int Red = 100;
int Green = 100;
int Blue = 100;
void setup() {
//change the port name to yours.
myPort = new Serial(this,"YOUR_PORT_NAME",9600);
size(600,600);
setupSliders();
}
void draw() {
myPort.write(Red);
myPort.write(Green);
myPort.write(Blue);
myPort.write(0);
background(Red,Green,Blue);
}
void setupSliders(){
red = new ControlP5(this);
green = new ControlP5(this);
blue = new ControlP5(this);
red.addSlider("Red")
.setPosition(100,50)
.setRange(0,255)
.setSize(150,50);
green.addSlider("Green")
.setPosition(100,150)
.setRange(0,255)
.setSize(150,50);
blue.addSlider("Blue")
.setPosition(100,250)
.setRange(0,255)
.setSize(150,50);
}
//Pin assignment.
int red = 9;
int green = 10;
int blue = 11;
//PWM brightness 0 to 255
int Red = 0;
int Blue = 0;
int Green = 0;
// the setup routine runs once when you press reset.
void setup() {
// declare pin 9 to be an output:
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
Serial.begin(9600);
}
// the loop routine runs over and over again forever.
void loop() {
//if bunch of data sent from Processing is stacked for over 3...
if(Serial.available()>3){
Red = Serial.read();
Green = Serial.read();
Blue = Serial.read();
Serial.read(); //the last data is dummy
}
//write data
analogWrite(green, Green);
analogWrite(red, Red);
analogWrite(blue,Blue);
}
IoTっぽいことをやってみたい。
Arduinoとネットを繋ぐ良いサンプルとして、Arduino Networked Lampが有名です。