错过了愚人节,还有清明节

愚人节表白简直弱爆了,清明节表白才是王道。
由于万一被拒绝,能够说:“很差意思,刚才被附体了。”html

愚人节已通过去,是否是还在后悔没来的及向女神表白?别怕,错过了愚人节还有清明节!清明节表白才是王道。既然是清明节表白,固然须要寻找一份和这个节日匹配的礼物。做为一名资深技术屌,本身动手才更有诚意。细想和清明节有关联的元素,脑海中迅速浮现了一大堆形容词,最终选了两个比较有表明的形容词:蓝光和诡异。
如何将蓝光和诡异集中在同一件礼物上了,这是个问题。蓝光能够选择蓝色 LED 灯便可,但是诡异就有点难了。LED 灯如何才能产生诡异效果了,还好本人机智,利用视觉停留不就能够完美呈现吗?当 LED 移动时出现一些奇怪的东西,静止时就是普通的闪光灯。没错,这就是摇摇棒。下面就介绍如何利用 Arduino 制做摇摇棒。git

硬件电路

我选择了16位 LED 灯,能够理解为对应的也就是16个像素点。晃动过程当中,每一个像素的的亮灭时间都须要准确控制,这里直接选取了利用16个管脚进行控制。因此,硬件电路就至关简单,采用 LED 阳极统一接高电平, LED 阴极分别接各管脚。以下图:编程

图片描述

上图中的1N4007为整流二极管,保护电路所用,缺失并不会影响主要功能。这就是本次的核心电路,就是这么简单。固然要作成可晃动的成品,参考 Arduino 官网焊接一个最小系统便可,这里不做赘述。这样会有一个问题,就是反方向晃动时会产生镜像文字。有种办法,就是每次反方向晃动时按一下开关,固然,咱们不能作这样没有追求的事情。能够采用比较经常使用的作法,焊一个水银开关,因为清明节,水银开关须要周一发货,索性就不展现。数组

软件编程

人眼的视觉停留时间大概是41.67ms(1/24),也就是说,当 LED 移动时,41.67ms内的 LED 亮灭都会被人眼做为一幅画面。手晃动的时,在第一个位置,LED 点亮其中的一部分灯,晃动到第二个位置时,点亮一部分灯。控制每个位置 LED 灯的亮灭,也就控制了每一列的像素显示,从而控制了一整幅画面的图案。以下面示意图(以八位模拟):函数

图片描述

Talk is cheap!oop

void setup() {
 char i;
 char arr[] = {0,2,3,4,5,6,7,8,9,10,11,15,16,17,18,19};
 for(i=0;i<16;i++){   
   pinMode(arr[i], OUTPUT);
 }
  
}



// the loop function runs over and overagain forever
void loop() {   
  char loveyou[] = {
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x00,0x20,0x00,0x20,0x00,0x20,
    0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x0F,
    0x04,0x10,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x04,0x10,0xF8,0x0F,0x00,0x00,
    0x00,0x00,0x00,0x00,0xFE,0x07,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x20,0x00,0x10,
    0x00,0x08,0xFE,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x82,0x20,0x82,0x20,
    0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  };   
  char i;
  for(i=0;i<64;i++){
      char j, k, tempa, tempb;
      char arr[] = {0,2,3,4,5,6,7,8,9,10,11,15,16,17,18,19};
      
         tempa =  loveyou[i*2 ];
        for(j=0;j<8;j++){
          char hh = (0x01 & ~tempa);
          digitalWrite(arr[j], hh);
          tempa = tempa >> 1;
        }

        tempb =  loveyou[i*2 + 1];
        for(k=0;k<8;k++){   
          char hh = (0x01 & ~tempb);
          digitalWrite(arr[k+8],hh);   
          tempb = tempb >> 1;
       }
       delay(1.2);
  }
              
}

上面是 Arduino 显示"LOVE"的程序,其中 loveyou 数组中存储的是字母“LOVE”对应的 LED 亮灭点阵。这里存储的是16进制,每两个16进制数控制的一列 LED 灯的亮灭。主函数初始化了16个管脚控制16个 LED 灯,循环函数中的for循环进行的是位操做,目的是将数组中的16进制数转化成二进制控制对应的 LED 亮灭。效果以下图:ui

图片描述

写在后面的话

上面就是做为一个技术宅送女神的表白礼物,是否是至关低碳环保?整个制做并无比较难度的地方,最难的是清明节表白的勇气和显示图案的创意,祝你们清明节成功追到女神。spa

更多内容可参考:探索物联网code

相关文章
相关标签/搜索