1.数字输出,led13
标有L的板上led与Digital 13端口相连,你也可以直接在D13和GND上接一个led,双灯同时闪烁
led灯分正负极,长正短负。led可直接接在数字口上
void setup() {
// put your setup code here, to run once:
pinMode(13,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(13,HIGH);
delay(1000);
digitalWrite(13,LOW);
delay(5000);
}
- 数字输出——流水灯
void setup() {
// put your setup code here, to run once:
for(int i = 8;i <14;i++)
{
pinMode(i,OUTPUT);
}
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
delay(200);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
delay(200);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
delay(200);
digitalWrite(11,LOW);
digitalWrite(12,HIGH);
delay(200);
digitalWrite(12,LOW);
digitalWrite(13,HIGH);
delay(200);
digitalWrite(13,LOW);
digitalWrite(8,HIGH);
delay(200);
}
3.1 开关量输入控制led——下拉电阻
const int buttonPin = 2;
const int ledPin = 7;
int buttonState = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
}
else {
digitalWrite(ledPin, LOW);
}
}
3.2开关量控制led——使用逻辑上下拉
只用了数字口,电源的GND,没有使用VCC5、3.3
开关连接的数字8为开关输入,软件中设为HIGH,当开关不通为HIGH,开关打开,自动拉低为LOW。
void setup() {
pinMode(7, OUTPUT);
pinMode(8, INPUT);
digitalWrite(8,HIGH); //!!!相当于下拉电阻
}
void loop() {
if (digitalRead(8) == LOW) {
digitalWrite(7, HIGH);
}
else {
digitalWrite(7, LOW);
}
}
- 蜂鸣器和电子琴
void setup() {
//switch on/off
pinMode(8, INPUT);
pinMode(9, INPUT);
pinMode(10, INPUT);
digitalWrite(8,HIGH); //!!!相当于下拉电阻
digitalWrite(9,HIGH); //!!!相当于下拉电阻
digitalWrite(10,HIGH); //!!!相当于下拉电阻
//led
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
pinMode(7,OUTPUT);
}
void loop() {
if (digitalRead(10) == LOW) {
tone(7,2093);
digitalWrite(13,HIGH);
}
else {
noTone(7);
digitalWrite(3, LOW);
}
if (digitalRead(9) == LOW) {
tone(7,2349);
digitalWrite(12,HIGH);
}
else {
noTone(7);
digitalWrite(12, LOW);
}
if (digitalRead(8) == LOW) {
tone(7,2093);
digitalWrite(11,HIGH);
}
else {
noTone(7);
digitalWrite(11, LOW);
}
}
- 模拟输出——呼吸灯
将led接到11好针脚和数字接口侧GND,注意正负极(正极11)
数字端口带~,有11、10、9、6、5、3均有模拟量输出的功能
模拟量范围【0,255】
void setup() {
pinMode(11,OUTPUT);
}
void loop() {
for(int i =0; i <= 100 ; i++){
analogWrite(11,i);
delay(5);
}
for(int i =100; i >= 0 ; i--){
analogWrite(11,i);
delay(5);
}
}
5.2 呼吸流水灯
接线,分别接三个led,到3、5、6即可。再接GND
void setup() {
pinMode(6,OUTPUT);
pinMode(5,OUTPUT);
pinMode(3,OUTPUT);
Serial.begin(9600);
}
int level = 0;
void loop() {
analogWrite(3,level);
++level %=4;
delay(10);
Serial.print(level);
analogWrite(5,level);
++level %=4;
delay(10);
analogWrite(6,level);
++level %=4;
delay(10);
Serial.print(level);
}
- 可调台灯——模拟电压输入
可调电阻,输出可变电压到模拟输入,量化读入的【0,1023】
模拟输出端口输出,量化值为【0.255】
void setup() {
Serial.begin(9600);
pinMode(9,OUTPUT);
}
void loop() {
//analogRead(A0);//A0 只能输入一种模式
analogWrite(9,analogRead(A0)/4);
Serial.println(analogRead(A0));
delay(1000);
}
取出可调电阻,观察模拟A0端口的浮动
当不接任何外接,A0 读数在300 上下浮动
当接5V,A0 读数在1023
当接3.3,A0 读数在690
当接GND,读数为0
- 数码管显示
分共阴极、共阳极,接法不一样
共阴极数码管需要给数码管各段正极接数字io,给电压即亮
阴极common接470电阻,再接地。
数码管显示
电子色子,加了倾斜开关在2号数字端口,一倾斜就会检测到。
数码管需要增加电阻,否则易烧坏;
共阴极,电阻接在gnd前;
class LedSegmentDisplays
{
private:
int ports[8];
int digits[10][8];
public:
LedSegmentDisplays(int a,int b,int c,int d,int e,int f,int g,int h)
{
ports[0]=a;ports[1]=b;ports[2]=c;ports[3]=d;ports[4]=e;ports[5]=f;ports[6]=g;ports[7]=h;
int digits_copy[10][8]={
{1,1,1,1,1,1,0,0},//0
{0,1,1,0,0,0,0,0},//1
{1,1,0,1,1,0,1,0},//2
{1,1,1,1,0,0,1,0},//3
{0,1,1,0,0,1,1,0},//4
{1,0,1,1,0,1,1,0},//5
{1,0,1,1,1,1,1,0},//6
{1,1,1,0,0,0,0,0},//7
{1,1,1,1,1,1,1,0},//8
{1,1,1,1,0,1,1,0},//9
};
for(int i=0;i<8;i++)
pinMode(ports[i],OUTPUT);
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
digits[i][j]=digits_copy[i][j];
}
void noLight()
{
for(int i=0;i<8;i++)
digitalWrite(ports[i],LOW);
}
void d(int digit)
{
for(int i=0;i<8;i++)
digitalWrite(ports[i], digits[digit][i]);
}
};
void setup() {
randomSeed(analogRead(A0));
pinMode(2,INPUT);//倾斜开关在2号数字接口
digitalWrite(2,HIGH);
}
LedSegmentDisplays Disp(3,10,7,8,9,4,5,6);
void loop() {
if(digitalRead(2) == LOW)
{
Disp.d(random(1,7));//[1,6]
}
delay(20);
}