Arduino学习笔记4

news2024/11/28 18:56:23

一.声控灯实验

1.源代码

int led=2;//定义板子上数字2口控制小灯
int flag=0;//定义一个变量记录小灯是亮起还是熄灭
int shengyin=3;//定义声音传感器的控制口

void setup()
{
    pinMode(led,OUTPUT);//定义小灯为输出模式
    pinMode(shengyin,INPUT);//定义声音控制口为输入模式
}
void loop()
{

    if(digitalRead(shengyin)==HIGH)//判断是否检测到声音信号
    { 
         if(flag==0){//判断小灯是否亮起
            flag=1; //标志小灯亮起 
            digitalWrite(led,HIGH);//对应的LED小灯亮起
          }else{
            flag=0;  //标志小灯亮熄灭
            digitalWrite(led,LOW);//对应的LED小灯熄灭
    
          }
          delay(1000);//延时

    } 
    

 

2.电路图

TRD4.jpg

3.声音传感器

digitalRead(shengyin)==HIGH你可能对这个代码段比较好奇,为什么使用digitalRead函数,传感器不是应该接模拟引脚然后使用analogRead函数吗?其实传感器既可以接数字引脚也可以接模拟引脚,只有接数字引脚它只产生0和1两种输出,即数字引脚的高电平和低电平;而模拟引脚却会产生0到1024之间的数值,两种引脚都可以,只是我们平时一般对于这种传感器都采用接模拟引脚的方式。

delay(1000);//延时的作用是使效果延迟,易于我们肉眼观察。

二.红外解码实验

1.源代码

#include <IRremote.h>
int RECV_PIN = 3; // 红外一体化接收头连接到Arduino 3号引脚
IRrecv irrecv(RECV_PIN);
decode_results results; // 用于存储编码结果的对象
void setup()
{
  Serial.begin(9600); // 初始化串口通信
  irrecv.enableIRIn(); // 初始化红外解码
}

//遥控器的每个按键都对应了不同的编码,不同的遥控器使用的编码也不相同。
//出现“FFFFFFFF”编码或者“0”编码,是因为使用的是NEC协议的遥控器,当按住某按键不放时,其会发送一个重复编码“FFFFFFFF”或者“0”编码

void loop() {
  
    if (irrecv.decode(&results)) {
       Serial.println(results.value, HEX);//通过红外遥控输出,串口显示出来
       irrecv.resume(); // 接收下一个编码  
    }
}

2.电路图

Tajv.jpg

3.<IRremote.h>

<IRremote.h> 是一个用于控制红外线遥控器的 Arduino 库。它允许您使用 Arduino 控制接收和发送红外线信号,从而实现红外线遥控功能。使用该库可以方便地读取和解码来自红外线遥控器发送的信息,并将其转换为可供 Arduino 使用的格式。同时,您也可以使用该库向外部设备发送红外线信号,以实现控制外部设备的功能。<IRremote.h> 库在 Arduino IDE 的 Library Manager 中可以直接安装和使用。

4.IRrecv类

在Arduino中,IRrecv 是一个类,在使用红外线(IR)遥控器的 Arduino 项目中经常使用。它是 <IRremote .h>库的一部分,该库允许 Arduino 接收和解码来自 IR 遥控器的信号。

IRrecv irrecv(RECV_PIN)这段代码的意思是在 Arduino 中创建了一个名为 irrecvIRrecv 类实例,它的构造函数参数是 RECV_PIN。这个irrecv 对象用来接收RECV_PIN指代的3号数字引脚的红外信号。

5.decode_results结构体

decode_results 是一个结构体,用于存储解码后的红外信号信息。

decode_results results表示建立一个名叫results的结构体实例对象,以便后面用来存储解码结果。

decode_results 结构体包含以下成员变量:

  • uint32_t value:表示解码后的红外数据;
  • uint16_t *rawbuf:指向原始数据缓冲区的指针;
  • uint16_t rawlen:原始数据缓冲区中的数据位数(即元素个数);
  • uint8_t decode_type:表示解码协议类型;
  • uint16_t panasonicAddress:仅适用于 Panasonic 协议,表示地址信息;
  • uint8_t numberOfBits:表示解码后的数据位数;
  • volatile uint16_t *rawbufPtr:指向原始数据缓冲区的当前位置的指针;
  • uint8_t overflow:表示是否发生了溢出。

6. .enableIRIn()函数

该函数无参数,直接在setup()调用,用于启用红外接收器模块。这个函数初始化接收器并准备好接收红外信号。一旦调用了这个函数,红外接收器就会开始监听传入的红外信号。

7..decode()函数

它是一个解码函数,用于解码红外线信号。

irrecv.decode(&results)这句代码的作用是从红外传感器接收到的数据流中解码出具体的红外编码信息,并将其存储在 results 变量中。

语法:bool decode(decode_results *results)

参数:它的参数是一个decode_results类型的结构体,意为解码存储的对象地址,注意他是一个地址。

返回值:它是一个bool声明类型,如果成功解码了信号,则返回值为 true,否则为 false。

8.HEX

在 Arduino 中,HEX 是一个常量,表示将数字以十六进制形式输出。在该行代码中,Serial.println() 是一个函数,用于将变量的值打印到串行监视器上。results.value 是要被打印的变量,它通常包含一个红外遥控器发送的编码值。通过使用 HEX 常量,将以十六进制的格式打印这个编码值。

  • Serial.println(results.value, HEX)表示十六进制输出results.value
  • Serial.println(results.value, DEC)表示十进制输出results.value
  • Serial.println(results.value, OCT)表示八进制输出results.value
  • Serial.println(results.value, BIN)表示二进制输出results.value

9..resume()函数

irrecv.resume()函数是用于接收下一个编码的。在Arduino中使用IR库时,当你想要读取下一个接收到的红外编码时,可以通过调用这个函数来启动红外接收器,从而等待接收下一个码值。

具体地说,irrecv.resume()函数会等待接收下一个红外信号,并将其解码为一个类型为decode_results的结构体。这个结构体包含了有关接收到的编码信息,例如协议、地址和命令等信息。之后,您就可以使用这些信息来执行相应的操作,如控制电子设备等。

需要注意的是,在使用irrecv.resume()函数之前,您需要先使用irrecv.enableIRIn()初始化红外接收器,以确保它能够正常工作。此外,为了避免出现干扰和错误,建议在每次读取完一个编码后,都调用irrecv.resume()函数清空缓存区并准备接收下一个编码。

三.红外控制实验

1.源代码

#include <IRremote.h>//引入的库文件
int RECV_PIN = 3; // 红外一体化接收头连接到Arduino 3号引脚
int led = 4;//数字口4控制led灯
IRrecv irrecv(RECV_PIN);
decode_results results; // 用于存储编码结果的对象
void setup()
{
  Serial.begin(9600); // 初始化串口通信
  pinMode(led,OUTPUT);  //定义数字接口为输出接口
  irrecv.enableIRIn(); // 初始化红外解码
}

//遥控器的每个按键都对应了不同的编码,不同的遥控器使用的编码也不相同。
//出现“FFFFFFFF”编码或者“0”编码,是因为使用的是NEC协议的遥控器,当按住某按键不放时,其会发送一个重复编码“FFFFFFFF”或者“0”编码

void loop() {
  
    if (irrecv.decode(&results)) {
      
       Serial.println(results.value, HEX);//通过红外遥控输出,串口显示出来,输出结果为16进制

       if(results.value == 0xFFA25D){//通过16进制判断是否是红外的CH-按键按下

          digitalWrite(led,HIGH);//打开LED灯
          
       }else if(results.value == 0xFF629D){//通过16进制判断是否是红外的CH按键按下
        
         digitalWrite(led,LOW);//关闭LED灯
       }
 
       irrecv.resume(); // 接收下一个编码  
    }
}

2.电路图

参考上一个实验的电路图

3.红外遥控键盘

本次实验实际上是上次实验的补充,红外遥控键盘就像一个遥控器,他有几种按键会产生不同的红外线信号,而Arduino开发板可以通过连接红外一体化接收头来接收其产生的红外线信号,通过引脚接收进行判断哪种信号。红外遥控键盘产生的各种信号,都可以以一种十六进制的二进制序列表达,但是红外遥控键盘各个按键的信号16进制表达式通常是由厂商确定的,并且不同品牌、型号的遥控器可能会采用不同的编码方式。因此,这些信号的具体编码方式需要查询相应的资料或手册。

TmXy.jpg

四.一位数码管显示

1.源代码

//共阴极数码管
int a=2;//定义数字接口2 连接a 段数码管
int b=3;// 定义数字接口3 连接b 段数码管
int c=4;// 定义数字接口4 连接c 段数码管
int d=5;// 定义数字接口5 连接d 段数码管
int e=6;// 定义数字接口6 连接e 段数码管
int f=7;// 定义数字接口7 连接f 段数码管
int g=8;// 定义数字接口8 连接g 段数码管
int dp=9;// 定义数字接口9 连接dp 段数码管

void digital_0(void) //显示数字0
{
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(e,HIGH);
    digitalWrite(f,HIGH);
    digitalWrite(g,LOW);
    digitalWrite(dp,HIGH);
}
void digital_1(void) //显示数字1
{
    digitalWrite(a,LOW);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,LOW);
    digitalWrite(e,LOW);
    digitalWrite(f,LOW);
    digitalWrite(g,LOW);
    digitalWrite(dp,HIGH);
}
void digital_2(void) //显示数字2
{
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,LOW);
    digitalWrite(d,HIGH);
    digitalWrite(e,HIGH);
    digitalWrite(f,LOW);
    digitalWrite(g,HIGH);
    digitalWrite(dp,HIGH);
}

void digital_3(void) //显示数字3
{
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(e,LOW);
    digitalWrite(f,LOW);
    digitalWrite(g,HIGH);
    digitalWrite(dp,HIGH);
}

void digital_4(void) //显示数字4
{
    digitalWrite(a,LOW);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,LOW);
    digitalWrite(e,LOW);
    digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
    digitalWrite(dp,HIGH);
}
void digital_5(void) //显示数字5
{
    digitalWrite(a,HIGH);
    digitalWrite(b,LOW);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(e,LOW);
    digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
    digitalWrite(dp,HIGH);
}
void digital_6(void) //显示数字6
{
    digitalWrite(a,HIGH);
    digitalWrite(b,LOW);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(e,HIGH);
    digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
    digitalWrite(dp,HIGH);
}
void digital_7(void) //显示数字7
{
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,LOW);
    digitalWrite(e,LOW);
    digitalWrite(f,LOW);
    digitalWrite(g,LOW);
    digitalWrite(dp,HIGH);
}
void digital_8(void) //显示数字8
{
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(e,HIGH);
    digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
    digitalWrite(dp,HIGH);
}
void digital_9(void) //显示数字9
{
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(e,LOW);
    digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
    digitalWrite(dp,HIGH);
}
void setup()
{
    int i;//定义变量
    for(i=2;i<=9;i++)
    pinMode(i,OUTPUT);//设置2~9 引脚为输出模式
}
void loop()
{

    digital_0();//显示数字0
    delay(1000);//延时1s
    digital_1();//显示数字1
    delay(1000);//延时1s
    digital_2();//显示数字2
    delay(1000); //延时1s
    digital_3();//显示数字3
    delay(1000); //延时1s
    digital_4();//显示数字4
    delay(1000); //延时1s
    digital_5();//显示数字5
    delay(1000); //延时1s
    digital_6();//显示数字6
    delay(1000); //延时1s
    digital_7();//显示数字7
    delay(1000); //延时1s
    digital_8();//显示数字8
    delay(1000); //延时1s
    digital_9();//显示数字9
    delay(1000); //延时1s

}

2.电路图

Thmh.jpg

3.数码管八段表示

数码管八段表示法是指使用八个独立的LED(发光二极管)来显示数字、字母和符号等字符。这些LED被编号为a、b、c、d、e、f、g和dp,其中dp表示小数点。

每个数字或字符都可以通过在对应LED上提供电源信号来表示。下面是每个LED代表的数字及其对应的八段表示法:

TpgQ.jpg

我们知道通过数字8可以表示0到9的任意数字,因此把8分解成8个部分(包括小数点),这样我们可以通过控制每一个部分的亮度来显示任意数字。

4.数码管结构

数码管的GF公共端和ED公共端通常被用于七段数码管的显示。其中,GF代表着左侧的两个数字段(也称为"组F"),这些数字段包括了LED数码管中的a、b、c和d四个段;而ED则代表右侧的三个数字段(也称为"组E"和"组D"),这些数字段包括了LED数码管中的e、f、g三个段。

在使用数码管进行显示时,GF和ED都需要与对应数字段的阳极或阴极连接,以便通过控制它们的电压或电流来控制对应数字段是否亮起。同时,由于这些数字段都是共阳极或共阴极的,因此要控制哪一组数字段亮起,需要将对应组的公共端(GF或ED)连接到对应的电源上。

两端每端四个引脚,分别表示四部分,把这八个引脚接入Arduino开发板的数字引脚即可听过数字电路显示任意数字。

五.四位数码管显示

1.源代码

//共阴极数码管
int a=2;//定义数字接口2 连接a 段数码管
int b=3;// 定义数字接口3 连接b 段数码管
int c=4;// 定义数字接口4 连接c 段数码管
int d=5;// 定义数字接口5 连接d 段数码管
int e=6;// 定义数字接口6 连接e 段数码管
int f=7;// 定义数字接口7 连接f 段数码管
int g=8;// 定义数字接口8 连接g 段数码管
int dp=9;// 定义数字接口9 连接dp 段数码管

int num1=10;//定义数字接口10 选中第一个数码管
int num2=11;//定义数字接口11 选中第二个数码管
int num3=12;//定义数字接口12 选中第三个数码管
int num4=13;//定义数字接口13 选中第四个数码管

int num=0;//切换数码管的变量

void digital_0(void) //显示数字0
{
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(e,HIGH);
    digitalWrite(f,HIGH);
    digitalWrite(g,LOW);
    digitalWrite(dp,LOW);

}
void digital_1(void) //显示数字1
{
    digitalWrite(a,LOW);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,LOW);
    digitalWrite(e,LOW);
    digitalWrite(f,LOW);
    digitalWrite(g,LOW);
    digitalWrite(dp,LOW);

}
void digital_2(void) //显示数字2
{
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,LOW);
    digitalWrite(d,HIGH);
    digitalWrite(e,HIGH);
    digitalWrite(f,LOW);
    digitalWrite(g,HIGH);
    digitalWrite(dp,LOW);

}

void digital_3(void) //显示数字3
{
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(e,LOW);
    digitalWrite(f,LOW);
    digitalWrite(g,HIGH);
    digitalWrite(dp,LOW);

}

void digital_4(void) //显示数字4
{
    digitalWrite(a,LOW);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,LOW);
    digitalWrite(e,LOW);
    digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
    digitalWrite(dp,LOW);

}
void digital_5(void) //显示数字5
{
    digitalWrite(a,HIGH);
    digitalWrite(b,LOW);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(e,LOW);
    digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
    digitalWrite(dp,LOW);

}
void digital_6(void) //显示数字6
{
    digitalWrite(a,HIGH);
    digitalWrite(b,LOW);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(e,HIGH);
    digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
    digitalWrite(dp,LOW);

}
void digital_7(void) //显示数字7
{
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,LOW);
    digitalWrite(e,LOW);
    digitalWrite(f,LOW);
    digitalWrite(g,LOW);
    digitalWrite(dp,LOW);

}
void digital_8(void) //显示数字8
{
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(e,HIGH);
    digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
    digitalWrite(dp,LOW);

}
void digital_9(void) //显示数字9
{
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(e,LOW);
    digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
    digitalWrite(dp,LOW);
}
void setup()
{
    int i;//定义变量
    for(i=2;i<=13;i++)
    pinMode(i,OUTPUT);//设置2~13 引脚为输出模式
}
void loop()
{

    num++;//切换数码管的变量,四个数码管循环显示
    if(num>4){
      num=1;  
    }
    if(num==1){//选中第一个数码管
      
      digitalWrite(num1,LOW);
      digitalWrite(num2,HIGH);
      digitalWrite(num3,HIGH);
      digitalWrite(num4,HIGH);
      
    }else if(num==2){//选中第二个数码管

      digitalWrite(num1,HIGH);
      digitalWrite(num2,LOW);
      digitalWrite(num3,HIGH);
      digitalWrite(num4,HIGH);
    
    }else if(num==3){//选中第三个数码管

      digitalWrite(num1,HIGH);
      digitalWrite(num2,HIGH);
      digitalWrite(num3,LOW);
      digitalWrite(num4,HIGH);
    
    }else if(num==4){//选中第四个数码管

      digitalWrite(num1,HIGH);
      digitalWrite(num2,HIGH);
      digitalWrite(num3,HIGH);
      digitalWrite(num4,LOW);
    }

    digital_0();//显示数字0
    delay(1000);//延时1s
    digital_1();//显示数字1
    delay(1000);//延时1s
    digital_2();//显示数字2
    delay(1000); //延时1s
    digital_3();//显示数字3
    delay(1000); //延时1s
    digital_4();//显示数字4
    delay(1000); //延时1s
    digital_5();//显示数字5
    delay(1000); //延时1s
    digital_6();//显示数字6
    delay(1000); //延时1s
    digital_7();//显示数字7
    delay(1000); //延时1s
    digital_8();//显示数字8
    delay(1000); //延时1s
    digital_9();//显示数字9
    delay(1000); //延时1s

}

2.电路图

T4LR.jpg

这幅图详细给出了四段数码管引脚的意义和连接情况,大家参考。

3.代码理解

这段代码是用来控制共阴极数码管显示数字的程序。首先定义了每个数字接口连接到数码管的哪一段,以及选择数码管的变量和四个数码管的引脚设置为输出模式。然后在loop()函数中循环切换四个数码管,并调用digital_0()到digital_9()函数分别显示数字0到9,每次显示后延时1秒。其中,数字的显示通过控制不同段的电平状态实现,比如digital_0()函数中通过将a-g段设为HIGH或LOW来显示数字0。

运行这段代码后,会发现四个数码管会循环显示数字0到9。每次只有一个数码管被选中,并且会闪烁一下,表示它正在显示数字。在数码管上显示的数字是通过控制不同段的电平状态实现的,当一个段处于HIGH状态时,则此段不亮;当一个段处于LOW状态时,则此段亮起来。延时1秒是为了让每个数字能够停留一段时间后再切换到下一个数字。整个程序运行起来比较简单,也很容易理解。

六.说明

接上一篇博客,Arduino学习笔记3!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/474330.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python+Django社区疫情防控系统 uniapp微信小程序

随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&#xf…

[jenkins自动化2]: linux自动化部署方式之流水线(下篇)

目录 1. 引言: 2. 进阶操作 流水线 -> 2.1 简介: -> 2.2 最终效果图展示: -> 2.3 有没有心动, 真的像流水线一样, 实现了一键部署启动 3. 实现方式 3.1 下载几个插件 3.2 创建流水线任务 3.3 点击配置 3.4 根据流水线语法 写一个简单的helloworld 3.5 执行…

数字化医院PACS影像系统 三维影像后处理技术应用

PACS影像存取与传输系统以实现医学影像数字化存储、诊断为核心任务&#xff0c;从医学影像设备&#xff08;如CT、CR、DR、MR、DSA、RF等&#xff09;获取影像&#xff0c;集中存储、综合管理医学影像及病人相关信息&#xff0c;建立数字化工作流程。 PACS系统可实现检查预约、…

【C++入门】内联函数

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【C之路】 目录 什么是内联函数内联函数特性 什么是内联函数 内联函数概念&#xff1a; 内联函数就是以inline修饰的函数叫做内联函数&a…

No.051<软考>《(高项)备考大全》【冲刺5】《软考之 119个工具 (3)》

《软考之 119个工具 &#xff08;3&#xff09;》 41.进度计划编制工具:42.绩效审查:43.卖方投标分析:44.质量成本:45.成本汇总:46.历史关系:47.资金限制平衡:48.挣值管理:49.预测:50.完工尚需绩效指数:51.成本效益分析:52.试验设计:53.七种基本质量工具:54.统计抽样:55.其他质…

Linux拓展:链接库

一.说明 本篇博客介绍Linux操作系统下的链接库相关知识&#xff0c;由于相关概念已在Windows下链接库一文中介绍&#xff0c;本篇博客直接上操作。 二.静态链接库的创建和使用 1.提前看 这里主要介绍的是C语言的链接库技术&#xff0c;而在Linux下实现C语言程序&#xff0c…

Web入门脚本三:一键完成与dex的交互,羊毛党必备

前言 该脚本用途&#xff1a;一键可以完成与dex的所有交互&#xff0c;包括2次swap&#xff0c;添加/移除流动性&#xff0c;以及farm和提取LP。一次运行可以有6条交易记录。 无论是个人单刷还是羊毛党批量地址刷交互都完美适配。当然反女巫方案不在这次文章的讨论范围内。 一、…

Python快速入门,看这一篇就够了

大家好&#xff0c;我是老三&#xff0c;我最近在看一些人工智能相关的东西&#xff0c;大部分相关的框架&#xff0c;都是用Pyhon写的。 老三会用Python&#xff0c;但谈不上多熟练&#xff0c;最近准备拿Python作为自己的第二语言&#xff0c;那么这期我们来一起快速梳理一下…

程序员该如何学习技术

程序员该如何学习技术 前言 学习是第一生产力&#xff0c;我从来都是这么认为的&#xff0c;人只有只有不断地学习才能意识到自己的缺点和不足&#xff0c;身为程序员&#xff0c;我更认为人们应当抱着终身学习的想法实践下去&#xff0c;这是我所一直践行且相信的。 高处不胜寒…

体验 GPT-4 后,回顾 OpenAI 发展历程及感悟

从 ChatGPT Plus 发布第一天就开始重度使用&#xff0c;刚刚和新发布的 GPT-4 进行了 20 多轮对话&#xff0c;来简单介绍下这几个模型背后的技术&#xff0c;并且分享下感受。 GPT 在发展历程中&#xff0c;一共经历了 4 个阶段&#xff0c;分别是 1、2、3、4。这几个阶段分别…

【VM服务管家】VM4.x算法模块开发_4.3 联合Halcon开发

目录 4.3.1 联合开发&#xff1a;集成HALCON第三方算子到VM工具箱的方法 4.3.1 联合开发&#xff1a;集成HALCON第三方算子到VM工具箱的方法 描述 环境&#xff1a;VM4.0及以上 VS2013 问题&#xff1a;有的用户在使用VisionMaster软件在开发视觉项目时&#xff0c;可能同时也…

来了来了,我使用 ChatGPT 开发了一个 AI 应用

ChatGpt 实在太火爆了&#xff0c;很多人在问我怎么使用 chatgpt 开发一个 AI 应用程序。这不就来了吗~ 开始 你所需要准备的一个OpenAI 的密钥和一点点代码来发送提示并返回结果&#xff0c;例如下面这段代码&#xff1a; import { OpenAIApi, Configuration } from openai…

基于RAM树莓派实现智能家居:语音识别控制,Socket网络控制,火灾报警检测,实时监控

目录 一 项目说明 ① 设计框架 ② 功能说明 ③ 硬件说明 ④ 软件说明 二 项目代码 <1> mainPro.c 主函数 <2> InputCommand.h 控制设备头文件 <3> contrlDevices.h 外接设备头文件 <4> bathroomLight.c 泳池灯 <5> livin…

GraphQL(三)DataLoader 详解

DataLoader是一个通用实用程序&#xff0c;用作应用程序数据获取层的一部分&#xff0c;通过批处理和缓存为各种远程数据源&#xff08;如数据库或 Web 服务&#xff09;提供简化且一致的 API 批处理 const user await userLoader.load(1); const invitedBy await userLoade…

【C++】7. auto和nullptr(c++11)

文章目录 一、auto二、nullptr 一、auto 在C98中&#xff0c;auto是一个存储类说明符&#xff0c;表示变量具有自动存储期&#xff0c;即在函数或块的作用域内创建和销毁。 在C11中&#xff0c;auto是一个类型占位符&#xff0c;表示变量的类型由其初始化器自动推断。 使用如下…

分类和扩展与继承

文章目录 [TOC](文章目录) 分类定义分类的使用使用场景使用注意点 Extension 扩展分类和扩展的区别 继承的定义使用注意点 新建一个分类 分类基础知识 分类 分类是指为已有的类添加方法&#xff0c;也可以说是将很多很复杂的代码划分为几个分区。 定义 分类的作用是扩展已有…

第十四届蓝桥杯大赛软件赛省赛 Java 大学 B 组题解

试题 A: 阶乘求和 本题总分&#xff1a;5 分 【问题描述】 令 S 1! 2! 3! ... 202320232023!&#xff0c;求 S 的末尾 9 位数字。 提示&#xff1a;答案首位不为 0。 【答案提交】 这是一道结果填空的题&#xff0c;你只需要算出结果后提交即可。本题的结果为一 个整数&am…

Linux信号:SIGCHLD信号和僵尸进程

1. SIGCHLD信号产生条件&#xff1a; &#xff08;1&#xff09;子进程终止&#xff1b; &#xff08;2&#xff09;子进程收到SIGSTOP暂停&#xff1b; &#xff08;3&#xff09;子进程处于暂停状态&#xff0c;收到SIGCONT被唤醒。 2. 捕捉SIGCHLD&#xff0c;避免僵尸进程&…

网络钓鱼:工作场所保护电子邮件安全的五个步骤

导语&#xff1a;Sophos电子邮件产品管理高级总监David Mitchell分享了他的主要技巧&#xff0c;以优化工作场所的电子邮件安全性。 Sophos电子邮件产品管理高级总监David Mitchell分享了他的主要技巧&#xff0c;以优化工作场所的电子邮件安全性。 尽管工作场所的聊天和即时…

云原生时代崛起的编程语言Go基础实战

文章目录 概述定义使用场景Go 安全 使用须知搜索工具Go基础命令标准库 基础语法Effective Go 概览命名规范注释变量常量(const)控制结构数据类型迭代&#xff08;range&#xff09;函数指针字符串和符文结构体(struct)方法接口(interface)泛型错误&#xff08;errors&#xff0…