arduino入门开发案例(下)

jimoshalengzhou
发布于 2020-11-3 18:47
浏览
0收藏

上篇链接:https://harmonyos.51cto.com/posts/1541

 

11,电子骰子,使用一个电子数码管,电阻,滚珠开关;其中电子数码管是由8个LED灯组合的,有共阴极和共阳极,使用时需要了解阴阳,如果是共阴需要接GND;并且数码管极易烧坏,需要连接电阻;

arduino入门开发案例(下)-鸿蒙开发者社区

arduino入门开发案例(下)-鸿蒙开发者社区

源代码:(使用的是共阴极一位数码管)

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(0));   //设置随机种子,配合random使用
  pinMode(2, INPUT);
  digitalWrite(2, HIGH);
}

LedSegmentDisplays Disp(3,10,7,8,9,4,5,6);   //LedSegmentDisplays 是一个模板,Disp是模板下的实例

void loop() {
  if(digitalRead(2) == LOW)
    Disp.d(random(1,7));  // [1,6]      d是实例Disp下的一个方法,radom不包含下限;
    
  delay(20);
}

12,震荡的LED:需要光敏电阻,电阻,LED;

将光敏电阻一端接到5v,另一端接电阻,电阻接GND,两者中间拉出一条线接analogIn;

arduino入门开发案例(下)-鸿蒙开发者社区

arduino入门开发案例(下)-鸿蒙开发者社区

代码:

void setup(){
Setrial.begin(9600);

}

void loop(){
Setril.printIn(analogWrite(0));  //中间那根线接0端口,即串口输出端口;

delay(200);

}

电铃的原理:通电时,电磁感应产生磁力,开关(振荡器)被吸引下拉,然后断电,线圈失去磁性,开关又复原,然后又通电;周而复始。这也是晶振的原理;

arduino入门开发案例(下)-鸿蒙开发者社区

源代码:

void setup(){
pinMode(9,OUTPUT);

Setrail.begin(9600);

}

void loop(){
Setrail.printIn(analogRead(0));

analogWrite(9, map(analogRead(0), 400,700,0,255);   //map(值,a1,b1,a2,b2),即,将值的原始范围[a1,b1]映射到[a2,b2];

delay(200);

}

13,测量温度。器材:LM35

arduino入门开发案例(下)-鸿蒙开发者社区

arduino入门开发案例(下)-鸿蒙开发者社区

LM35有三条腿,左边接正极,右边接地,中间接串口输出0端口;

void setup(){
Serail.begin(9600);

}
void loop(){
Serail.printIn(analogRead(0)*0.48828125);  //与0.48828125相乘在串口助手界面显示的时温度值,(5/开发板的测量精度)*100

delay(200);

}

14,红外热释报警。器材:红外热释传感器,蜂鸣器。红外热释传感器左边接5v,中间接数字输入7号,右边接GND;

arduino入门开发案例(下)-鸿蒙开发者社区

arduino入门开发案例(下)-鸿蒙开发者社区

有探测角度和探测距离等参数;

void setup(){
pinMode(7, INPUT);  

}

void  loop(){
if(digitalRead(7)==LOW)

tone(13,2000);  //蜂鸣器的震动频率

else{
noTone(13);

}

}

 

15,74HC595芯片。功能:扩展输入端口;

 

arduino入门开发案例(下)-鸿蒙开发者社区

arduino入门开发案例(下)-鸿蒙开发者社区

从8号端口输出一个1,在芯片内部设置8个位,然后这8个位作为输出,是并行同时输出。所以是串转并。

 

原文作者:kalinux

 

分类
标签
已于2020-11-3 18:47:00修改
收藏
回复
举报
回复