arduino 入门

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);
}
  1. 数字输出——流水灯
    这里写图片描述
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);
  }
}
  1. 蜂鸣器和电子琴
    这里写图片描述

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);
  }

}
  1. 模拟输出——呼吸灯
    将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);
}
  1. 可调台灯——模拟电压输入
    可调电阻,输出可变电压到模拟输入,量化读入的【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

  1. 数码管显示
    分共阴极、共阳极,接法不一样
    共阴极数码管需要给数码管各段正极接数字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);
}

猜你喜欢

转载自blog.csdn.net/qq_35508344/article/details/80867054
今日推荐