Upload
ngodat
View
213
Download
0
Embed Size (px)
Citation preview
今日の内容 2
第3回: 2種類のスイッチとそれらを使ったプログラム
digitalRead( )
+ +
− −
10k
SW
5V
GND
330
10k
10k
LED
TrB
C
E
ArduinodigitalWrite( )
6
タクトスイッチの接続法:active high
1 5 1010 1515 2020
ED
CBA
ED
CBA
1JI
HGF
JI
HGF
5 10 15 20
X X
Y Y
+
−10k
A B
BA
Arduinoのディジタルピンへ
7
トランジスタ・スイッチを使った点灯
1 5 1010 1515 2020
ED
CBA
ED
CBA
1JI
HGF
JI
HGF
5 10 15 20
X X
Y Y
+
−
LED
220
Tr C1815
10k
10k
B C E
9
+ +
− −
10k
SW
5V
2 7
GND
330
LED
Arduino
最初に使う回路
スイッチを押したらLEDが点灯するプログラムを書く
スイッチを押したらLEDが消灯するプログラムを書く
10
// Filename:SW01!!const int led=7;!const int sw=2;!int state=LOW;!!void setup(){! pinMode(led, OUTPUT);! pinMode(sw, INPUT);!}!!void loop(){! state=digitalRead(sw);! digitalWrite(led, state);!}!
sketchの例
11
+ +
− −
10k
SW
5V
2 7
GND
330
LED
Arduino
toggle動作のプログラムを書く
最初にスイッチを押したらLEDが点灯し, 次に押すと消える動作を繰り返すプログラムを書く
12
// Filename:SW02!!const int led=7;!const int sw=2;!int currentState, previousState=LOW;!int ledState=LOW;!!void setup(){! pinMode(led, OUTPUT);! pinMode(sw, INPUT);!}!!void loop(){! currentState=digitalRead(sw);! if(currentState == HIGH) {! ledState = !ledState; // toggle action! delay(20);! }! digitalWrite(led, state);!}!
どこかおかしいsketchの例
13
// Filename:SW03!!const int led=7;!const int sw=2;!int currentState, previousState=LOW;!int ledState=LOW;!!void setup(){! pinMode(led, OUTPUT);! pinMode(sw, INPUT);!}!!void loop(){! currentState=digitalRead(sw);! if(currentState != previousState){//edge detecter! previousState=currentState; ! if(currentState == HIGH) {! ledState = !ledState; // toggle action! digitalWrite(led, ledState); ! }! } !}
14
// Filename:SW04!!const int led=7;!const int sw=2;!volatile int state = LOW;!!void setup(){! pinMode(led, OUTPUT);! digitalWrite(sw, HIGH);! attachInterrupt(0, blink, RISING);!}!!void loop(){! digitalWrite(led, state);!}!!void blink(){! state = !state;!}
高度なテクニック:割り込み
16
RLED
SW
SW LEDON
点灯OFF
OFF OFFOFF ONON OFFON ON
消灯
E
(b)
RLED
SW1E
(c)
SW2
RLED
SW1 SW2E
(d)
SW2SW1 LEDOFF OFFOFF ONON OFFON ON
SW2SW1 LED
RLED
SW
SW LEDON
消灯OFF
点灯
E
(a)
スイッチを使ったLEDの点灯回路
17
Y = A
Buffer(論理肯定)
A B Y0 0 00 1 01 0 01 1 1
A Y0 01 1
A B Y0 0 00 1 11 0 11 1 1
Y = A × B
AND(論理積)
Y = A + B
OR(論理和)演算
論理回路図
真理値表
ベン図
式
A
A A B A BA
AB
ABY Y Y
_
Y = A
NOT(論理否定)
A Y0 11 0
A
AA
Y
_
_
基本的な論理演算1
18
演算
論理回路図
真理値表
ベン図
式
A B Y0 0 10 1 11 0 11 1 0
Y = A × B
NAND(否定論理積)
A B
AB Y
A B
A B Y0 0 00 1 11 0 11 1 0
Y = A + B
EX-OR(排他的論理和)
AB Y
A B Y0 0 10 1 01 0 01 1 0
Y = A + B
NOR(否定論理和)
A B
AB Y
A B Y0 0 10 1 01 0 01 1 1
EX-NOR(一致:否定排他和)
A B
AB Y
Y = A + B
基本的な論理演算2
19
普通の代数 論理代数
1 + A = 1 0 × A = 0
0 + A = A 1 × A = A
A + A = A A × A = A
A + B = B + A A × B = B × A
A + A = 1
A = A
A × A = 0
1 + A = A + 1 0 × A = 0
0 + A = A 1 × A = A
A + A = 2A A × A = A2
A + B = B + A A × B = B × A
A + (-A) = 0
-(-A) = A
A × (-A) = -A2
ド・モルガンの定理A + B = A × B A × B = A + B
普通の代数と論理代数(ブール代数)の違い
22
(1) OR operation: ||! if(A || B){!! analogWrite(ledPin, HIGH);! }!!(2) AND operation: &&! if(A && B){!! analogWrite(ledPin, HIGH);! }!!(3) NOT operation: !! if(!A){!! analogWrite(ledPin, HIGH);! }!
Cの論理(Boole)演算
注意:よく似た演算にビット演算なるものがある. | (OR), & (AND), ~ (NOT), ^ (NOR), <<, >> (shift)
23
int led = 7;!int swA = 2, swB=4;!int stateA = 0, stateB=0;!!void setup(){! pinMode(led, OUTPUT);! pinMode(swA, INPUT);! pinMode(swB, INPUT);!}!!void loop(){! stateA = digitalRead(swA);! stateB = digitalRead(swB);! if(stateA || stateB){! digitalWrite(led, HIGH);! }else{! digitalWrite(led, LOW); ! }!}
論理和で点灯させる
24
int led = 7;!int swA = 2, swB=4;!int stateA = 0, stateB=0;!!void setup(){! pinMode(led, OUTPUT);! pinMode(swA, INPUT);! pinMode(swB, INPUT);!}!!void loop(){! stateA = digitalRead(swA);! stateB = digitalRead(swB);! if(stateA && stateB){! digitalWrite(led, HIGH);! }else{! digitalWrite(led, LOW); ! }!}
論理積で点灯させる
25
int led = 7;!int swA = 2, swB=4;!int stateA = 0, stateB=0;!!void setup(){! pinMode(led, OUTPUT);! pinMode(swA, INPUT);! pinMode(swB, INPUT);!}!!void loop(){! stateA = digitalRead(swA);! stateB = digitalRead(swB);! if((!stateA && stateB)||(stateA && !stateB)){! digitalWrite(led, HIGH);! }else{! digitalWrite(led, LOW); ! }!}
排他的論理和(EX-OR)で点灯させる