Blink.ino のプログラムを改造して、点滅の速さが2倍になるようにしよう
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
}
Blink.ino のプログラムを改造して、点滅の速さが1/2倍になるようにしよう
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(2000);
digitalWrite(LED_BUILTIN, LOW);
delay(2000);
}
与えた数だけ、0.1秒ずつLEDを点滅した後、1秒消灯する
void nblink(byte n)
関数を作りなさい。
また、 次のプログラムと結合して正常に動作することを確かめなさい。
void nblink(byte n);
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
}
void loop(){
static byte i=0;
nblink(++i);
i %= 4;
}
void nblink(byte n){
for(byte i=0;i<n;i++){
digitalWrite(LED_BUILTIN, HIGH);
delay(100);
digitalWrite(LED_BUILTIN, LOW);
delay(100);
}
delay(900);
}
初期化の時に数を与え、blink()メソッドを呼ぶと、与えた数だけ、0.1秒ずつLEDを点滅した後、1秒消灯するクラス
Led
を作りなさい。
また、 次のプログラムと結合して正常に動作することを確かめなさい。
#include "Led.h"
Led *list[]={new Led(3), new Led(3), new Led(7)};
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop(){
static byte i=0;
list[i++]->blink();
i %= sizeof(list)/sizeof(list[0]);
}
#include "Arduino.h"
class Led {
byte kaisuu;
public:
Led(byte n);
void blink();
};
#include "Arduino.h"
#include "Led.h"
Led::Led(byte n):kaisuu(n){
}
void Led::blink(){
for(byte i=0;i<kaisuu;i++){
digitalWrite(LED_BUILTIN, HIGH);
delay(100);
digitalWrite(LED_BUILTIN, LOW);
delay(100);
}
delay(900);
}
volatile 宣言を外すと動きがどう変化するか確かめよう。
まずvolatile 宣言の演習をしてみましょう。 スケッチ例の Blink のプログラムの delayを、 自作の1秒待つ関数 mydelay で置き換えよう。 以下のプログラムで1秒点灯するように ??? の部分に数字を入れよう。
void setup(){
pinMode(LED_BUILTIN,OUTPUT);
}
void mydelay(){
for(volatile long i=0; i< ???; i++){
}
}
void loop(){
digitalWrite(LED_BUILTIN, HIGH);
mydelay();
delay(10);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
次に、上記のvolatileを外して、動作を確かめよう。
4番とGNDをつないだときだけ、LED が点灯するプログラムを作りなさい。
#define INPORT 4
void setup() {
pinMode(LED_BUILTIN,OUTPUT);
pinMode(INPORT,INPUT_PULLUP);
}
void loop() {
digitalWrite(LED_BUILTIN,!digitalRead(INPORT));
delay(1);
}
4番とGNDをつないだときは、1秒おきに2回LEDが点滅、つないでない時は 1秒おきに短くLEDが点滅するプログラムを作りなさい。
#define INPORT 4
void nblink(byte n){
for(byte i=0;i<n;i++){
digitalWrite(LED_BUILTIN, HIGH);
delay(100);
digitalWrite(LED_BUILTIN, LOW);
delay(100);
}
delay(900);
}
void setup() {
pinMode(LED_BUILTIN,OUTPUT);
pinMode(INPORT,INPUT_PULLUP);
}
void loop() {
nblink(2-digitalRead(INPORT));
}
4番とGNDをつないだときは、1秒おきにLEDが1回点滅、2回点滅、3回点滅、 1回点滅,2回点滅、3回点滅と繰り返すが、 つないでない時は同じ回数の点滅を繰り返すプログラムを作りなさい。 つまり、3回点滅の時に線を外せば、そのまま3回点滅を繰り返し、 1回点滅の時に線を外すと1回点滅を繰り返すようにしなさい。
#define INPORT 4
void nblink(byte n){
for(byte i=0;i<n;i++){
digitalWrite(LED_BUILTIN, HIGH);
delay(100);
digitalWrite(LED_BUILTIN, LOW);
delay(100);
}
delay(900);
}
void setup() {
pinMode(LED_BUILTIN,OUTPUT);
pinMode(INPORT,INPUT_PULLUP);
}
void loop() {
static int i=0;
nblink(i+1);
i=(i+1-digitalRead(INPORT))%3;
}