第一课:超级helloarduino.使用多种知识串联一个入门小项目,很适合初学第一课哟.(代码片段)

rubik795 rubik795     2022-12-29     207

关键词:

开关+led+旋钮电位器的实验视频

已经购买Arduino开发版的同学,开始上课~来一场紧张刺激的hello Arduino之旅吧~

前言

开发工具的下载,安装,使用都很简单,我这里就不赘述了,附上官方的说明,跟着步骤来,十分钟搞定~

相关连接

  • ide下载:https://www.arduino.cn/thread-5838-1-1.html
  • 官方hello world:https://www.arduino.cn/thread-76154-1-1.html
  • 为什么成为Arduino开发?https://www.arduino.cn/thread-5414-1-1.html
  • 函数参考文档:https://wiki.arduino.cn/?file=home-%E9%A6%96%E9%A1%B5

实验内容

  • 通过开关,来控制整体的通电功能

  • 通过旋钮电位器实现灯的亮度

  • 开关灯的时候,使用呼吸的方式

  • 开关灯的时候,根据旋钮电位器当前的位置来决定最高亮度

  • 异步做开关监听

  • 开灯关灯无异常

    • 目前还有小问题,关灯的时候无法完全关闭,会有低电荷在led灯里面,有细微亮点.

实验说明

开关

本实验中,对开关没有使用电阻,而是采用的高拉电阻的方式.通过这种方式,并且采用死循环卡点方式,实现类似于监听开关按钮的能力.

普通电阻功能: 当开关不按下去的时候,开关处于低电荷情况,按下去时,处于高电荷.

不带电阻功能: 开关不管是否按下去,都处于不稳定电荷状态.

高拉电阻功能: 开关不按下去,开关稳定处于高电荷位,按下去后,使之变为高电荷位.

led灯

末尾白色led灯为rgb三色灯,放在4号引脚,4号引脚没有pwm功能,不支持呼吸.黄色5号引脚,红色9号引脚,绿色10号引脚.

提供PWM功能的引脚为3、5、6、9、10、11。 亮度取值范围0~255

白色灯自由闪烁,不做特殊处理,黄色,红色,绿色灯使用pwm功能,让亮度产生一个渐变过程,从而达到类似于呼吸的功能.

旋钮电位器

通过读取旋钮电位器的阻值,通过比例转换为亮度.然后对led灯做修改亮度操作,达到旋钮控制亮度的功能.

Arduino 模拟输入功能有10位精度,即可以将0~5V的电压信号转换为0~1023的整数形式表示。

废话不多说,直接上代码

/*
 * 开关控制灯 开和关
 * 
 * 通过旋钮电位器来控制灯的亮度.
 * 
 * 通过呼吸的方式将灯缓慢开启 和 缓慢关闭.
 * 
 */

// 设置各引脚别名
const int buttonPin = 2;     // 连接按键的引脚
const int ledPin[3] = 6,9,10;      // 连接LED 具有 PWM功能的引脚 
const int ledPin2 = 4;  // 白色rgb三色闪烁led

const int pot=A0;   //旋钮电位器引脚

int fadeValueMax = 255;  //最大亮度

// 变量定义
//int buttonState = 0;         // 存储按键状态的变量

boolean ledState=false;  // 记录LED状态
boolean buttonState=true;  // 记录按键状态


/**
 * 程序执行之前都会先执行该方法
 */
void setup() 
  // 初始化LED引脚为输出状态
  for(int i=0; i<3; i++)
    pinMode(ledPin[i], OUTPUT);   
  
  pinMode(ledPin2, OUTPUT);

  // 监听9600 串口
  Serial.begin(9600);
  // 初始化按键引脚为输入状态
  pinMode(buttonPin, INPUT_PULLUP);     


/**
 * 程序会一直循环的调用该方法
 */
void loop()

  //按照比例计算当前的最大亮度
  fadeValueMax = analogRead(pot)/4;

  //如果当前按钮处于高电荷状态,就一直循环该方法,实现类似于监听功能
  while(digitalRead(buttonPin)==HIGH)

    if(ledState)
      //如果当前led处于开启状态,让旋钮电位器控制led的亮度
      int fadeValue = analogRead(pot)/4;
      analogWrite(ledPin[0], fadeValue);
      analogWrite(ledPin[1], fadeValue);
      analogWrite(ledPin[2], fadeValue);
      Serial.println(fadeValue);

      //稍稍停一下,防止太快发生意想不到的问题
      delay(50);
    
    
  
  

  // 当按键按下时,点亮或熄灭LED
  if(ledState==true)
    //如果当前处于亮灯状态,就让所有设备处于低电荷状态
    digitalWrite(ledPin2,LOW);

    delay(1000);

//    digitalWrite(ledPin[0],LOW);

    //呼吸的方式关闭led灯
    int i = fadeValueMax;
    do
      analogWrite(ledPin[0], i);
      i= i - 5;
      delay(30);
    while(i>=0);

    delay(1000);

//    digitalWrite(ledPin[1],LOW);
    i = fadeValueMax;
    do
      analogWrite(ledPin[1], i);
      i= i - 5;
      delay(30);
    while(i>=0);

    delay(1000);

//    digitalWrite(ledPin[2],LOW);
    i = fadeValueMax;
    do
      analogWrite(ledPin[2], i);
      i= i - 5;
      delay(30);
    while(i>=0);

    delay(1000);

    //状态取反
    ledState=!ledState;
  
  else
  
    //如果当前是关闭状态,就让所有设备处于高电荷状态
    
//    digitalWrite(ledPin[2],HIGH);

    //呼吸的方式缓慢开启led灯
    int i = 5;
    while(i<=fadeValueMax)
      analogWrite(ledPin[2], i);
      i= i+ 5;
      delay(30);
    

    delay(30);

//    digitalWrite(ledPin[1],HIGH);

    i = 0;
    while(i<=fadeValueMax)
      analogWrite(ledPin[1], i);
      i= i+ 5;
      delay(30);
    

    delay(30);

    digitalWrite(ledPin[0],HIGH);

    i = 0;
    while(i<=fadeValueMax)
      analogWrite(ledPin[0], i);
      i= i+ 5;
      delay(30);
    

    delay(1000);

    
    digitalWrite(ledPin2,HIGH);
//
//    i = 0;
//    analogWrite(ledPin2, i);
//    while(i<255)
//      i+=5;
//      delay(30);
//    
    
    delay(1000);

    //状态取反
    ledState=!ledState;
  
  delay(500);

关键代码说明

  • const 修饰的变量为常量,不能修改哦
  • delay 休眠时间不可过长,不然无法起到监听效果.可能会导致按下开关没有反应.也不可没有,否则太快按一次之后,可能会执行方法多次,导致灯状态混乱.
  • Serial.begin 监听串口,打开ide的串口监听页面,选择对应波特率,就可以看到相关输出了.
  • Serial.println 将要输出的内容输出到对应的串口上面
  • analogWrite 使用pwm能力,让灯以特定值亮起来. 最低0 关闭. 最高255 亮
  • digitalWrite(ledPin[0],HIGH); 将ledPin[0] 引脚位置设置为高电荷模式, LOW为低电荷模式
  • pinMode(buttonPin, INPUT_PULLUP); 设置为上拉电阻. INPUT 为普通的输入模式
  • digitalRead analogRead 读取对应引脚的数据

下课~

光说不练假把式,记得练习哦~

javascript第一课

     今天进入到了js的阶段,了解到了JavaScript是一个很重要的阶段,所以要好好的理清每一个知识点      JavaScript的使用: 在<head>标签里应用<script><!DOCTYPEhtml><html><head&g 查看详情

第一课(代码片段)

...p; name="animoo"    age=22    第一个字符不能是 查看详情

ng第一课:引言(introduction)

MachineLearning(机器学习)是研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的... 查看详情

ng第一课:引言(introduction)

MachineLearning(机器学习)是研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的... 查看详情

行人重识别计算机视觉进阶系列第一课基础知识

【行人重识别】🖐计算机视觉进阶系列🖐第一课基础知识概述行人重识别rank-1mAP损失函数交叉熵TripletLossHardNegative概述行人重识别(PersonRe-Identification)是利用计算机视觉技术判断图片或视频中是否存在特定行人的技术.行... 查看详情

第一课mongodb概述与安装

1.课程大纲本次课主要介绍MongoDB背景知识和MongoDB的安装与配置,让大家对MongoDB有一个初认识。其基本的知识点包含:NoSQL数据库概述MongoDB数据库简单介绍Linux下安装MongoDB数据库Mac和Windows下安装MongoDB数据库2.课程简单介绍MongoDB... 查看详情

第一课

  5个目标点(知识点)环境说明,连接实例,hash运算dbs目录文件解释参数文件解释启动过程三阶段实战演练本次课程目标是讲解oracle实例的启动过程首先了解一下本次实验环境   之前已经创建好了一个数据库-... 查看详情

第一课:网络爬虫准备

本课知识路线  Requests框架:自动爬取HTML页面与自动网络请求提交  robots.txt:网络爬虫排除标准  BeautifulSoup框架:解析HTML页面  Re框架:正则框架,提取页面关键信息  Scrapy框架:网络爬虫原理介绍,专业爬虫框架介... 查看详情

电子学第一课:logicfamily和pull-up等

当学过了电路基本的知识之后,我觉得接下来需要掌握的重要的知识有:(待续)1.logicfamily:掌握元器件的编号规则,以及半导体设计中”代“的概念,这样你就知道如何在仿真和之际制作中选择元件了。走过了很多弯路,终... 查看详情

第一课(20180327):helloword(代码片段)

问:程序员编写的第一个程序是啥米?猿:这个问题,soeasy。我选择闭着眼睛回答,那就是“HelloWorld”。问:那在python里面怎么来进行HelloWord呢?猿:听我细细到来。小黑板开始讲课了:知识点:print():打印。将要打印的内容... 查看详情

第一课jenkins的环境的配置

以前断断续续接触jenkins,这次系统学习一下,发现还是有很多以前不熟悉的地方,和以前的知识串联起来很有必要。《Jenkins权威指南》这本书很好,以前只是了解到jenkins客户端的一些基础配置,没有结合代码端的配置,这次系... 查看详情

大数据开发hadoop工程师-第一课java基本知识和jdk的安装配置

...展,建立了强大的生态体系,目前已经覆盖IT各行业的“第一大语言”,是计算机界的“英语”。 JavaSE(J2SE)(Java2PlatformStandardEdition)(Java平台标准版)标准版 查看详情

行人重识别计算机视觉进阶系列第一课基础知识

【行人重识别】🖐计算机视觉进阶系列🖐第一课基础知识概述行人重识别rank-1mAP损失函数交叉熵TripletLossHardNegative概述行人重识别(PersonRe-Identification)是利用计算机视觉技术判断图片或视频中是否存在特定行人的技术.行... 查看详情

第一课

由于期末考试和英语四级最近都没有更(dou)新(shi)博(jie)客(kou),现在已放假,全力冲刺。1.C++的预处理是  #include<iostream>使用cin和cout进行输入输出必须包含该头文件。注意没有.h。2.使用visualstudio时让程序暂停,在return前加... 查看详情

运维第一课——计算机组成与操作

  计算机是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。由硬件系统和软件系统所组成... 查看详情

软件工程第一课

...大一的时候就知道这门课,但是对它的理解很模糊。通过第一堂课的学习,感觉对这门课有了清晰一些的认识。我认为软件工程这个学科是一门很大的学科,大在应用范围广泛,和知识内容的量。一个好的软件,不论在哪个平台... 查看详情

推荐学java——spring第一课

索引Spring简介框架核心简介第一个Spring项目创建流程容器可以映射的对象Spring给属性赋值第一种方式,set注入第二种方式,注解方式@Component注解示例@Value使用@Autowired使用@Resource使用总结Spring简介官网地址ÿ... 查看详情

嵌入式第一课——计算机基础知识

                                   1计算机基础知识1.计算机简介1.1计算机定义:按照一定逻辑处理数据的带存储的机器。微型,小型,大型等。2.2计算机组成分为硬件、软件2.2.1硬件组成1)三大... 查看详情