模数转换子系统用于将传感器采集的模拟信号转换为数字信号。Arduino UNO R3主处理器ATMega328P的模数转换子系统采用逐次逼近的方式完成模数转换。
使用Arduino库函数进行模数转换十分简单,下面的示例可以将A0引脚上的模拟信号转换为数字信号,并将转换结果打印到串口0上:
// ReadAnalogVoltage.ino
void setup() {
   Serial.begin(9600);
}
 
void loop() {
   int sensorValue = analogRead(A0);
   float voltage = sensorValue * (5.0 / 1023.0);
   Serial.println(voltage);
}与模数转换相关的Arduino库函数有:
analogRead(pin):将指定引脚上的模拟信号转换为数字信号
pin:指定模拟引脚
函数返回转换结果,是一个无符号整数,取值为0~1023
ATMega328P的模数转换子系统由2个相关寄存器控制。模数转换多路选择寄存器ADMUX的结构如下图所示:
| REFS1 | REFS0 | ADLAR |  | MUX3 | MUX2 | MUX1 | MUX0 | 
输入通道选择MUX[3:0]位用于指定模拟信号输入的引脚,Arduino UNO R3开发板上有6个模拟信号输入引脚,它们分别是A0~A5,在ANALOG IN组中。
模数转换控制和状态寄存器ADCSRA的结构如下图所示:
| ADEN | ADSC | ADATE | ADIF | ADIE | ADPS2 | ADPS1 | ADPS0 | 
向模数转换使能位ADEN写入1则启用模数转换,写入0则禁用;向模数转换启动转换位ADSC写入1则启动模数转换,写入0则不启动;模数转换中断标志位ADIF在被置1时模数转换完成,可以向它写1清0;模数转换预分频选择位ADPS[2:0]用于设置模数转换的时钟源,它的设置如下表所示:
| ADPS[2:0] | 时钟源 | 
| 000 | 系统时钟2分频 | 
| 001 | 系统时钟2分频 | 
| 010 | 系统时钟4分频 | 
| 011 | 系统时钟8分频 | 
| 100 | 系统时钟16分频 | 
| 101 | 系统时钟32分频 | 
| 110 | 系统时钟64分频 | 
| 111 | 系统时钟128分频 | 
模数转换的结果保存在模数转换数据寄存器ADCH和ADCL中。通过直接访问寄存器改写以上程序为:
void setup() {
  ADMUX = 0x00;
  ADCSRA |= (1 << ADEN);
  Serial.begin(9600);
}
void loop() {
  ADCSRA |= (1 << ADSC);
  while (!(ADCSRA & (1 << ADIF)));
  int sensorValue = (ADCH << 8) | ADCL;
  float voltage = sensorValue * (5.0 / 1023.0);
  Serial.println(voltage);
  ADCSRA |= (1 << ADIF);
}原文:https://www.cnblogs.com/lets-blu/p/7530879.html
 
            智能体(Agent)是指能够感知环境并采取行动以实现特定目标的代理体。它可以是软件、硬件或一个系统,具备自主性、适应性和交互能力。智能体通过感知环境中的变化(如通过传感器或数据输入),根据自身学习到的知识和算法进行判断和决策,进而执行动作以影响环境或达到预定的目标。
Arduino-ESP32与ESP-IDF的版本对应表。
Arduino+ESP32上使用TFT_eSPI库快速点亮这个屏幕,驱动芯片ST7789
Queue 库提供了一个通用的 C++ 动态队列实现,专为在 Arduino 项目中使用而定制。
 
            本程序是小鹏物联网智能浇花套件的单机版程序(不连接物联网),供同学们参考。
 
            ArrayList 类是一个 C++ 模板类,它提供了 ArrayList 的实现,以便轻松存储任何指定类型的值。它允许使用索引进行高效存储和检索,支持排序操作。
 
            ESP32系列(包括ESP32-S3)搭载Xtensa双核处理器,默认情况下Arduino框架仅使用单核运行用户代码,通过多核编程,可以充分利用硬件资源来提升系统响应和性能。
在本文中,先解释 MSB(最高有效位)和 LSB(最低有效位)的概念,以及 MSBFIRST 和 LSBFIRST。然后展示了 MSBFIRST 和 LSBFIRST 的使用如何影响移位寄存器的输出。
TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制其转速与方向,输入电压在3V~12V,因此在集成化、小型化的电机控制系统中,它可以作为理想的电机驱动器件。
 
            Arduino-ESP32项目提供的Preferences库是一个专为ESP32设计的非易失性存储解决方案,它替代了传统的Arduino EEPROM库,提供了更强大、更可靠的数据存储功能。
用于Arduino的Adafruit_GFX库为我们所有的LCD和OLED显示器提供了通用语法和图形功能集。这使Arduino程序可以轻松地在显示类型之间进行调整,而不必花太多精力……
