电路原理图:
以下是示例所需的组件:
● NRF24L01收发器模块
● Arduino开发板
● 操纵杆模块
● 伺服电机
● 按钮
● LED指示灯
源代码
以下是两个代码,以及对它们的描述。
发射机代码
/*
* Arduino Wireless Communication Tutorial
* Example 2 - Transmitter Code
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
* Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/
#include 《SPI.h》
#include 《nRF24L01.h》
#include 《RF24.h》
#define led 12
RF24 radio(7, 8); // CE, CSN
const byte addresses[][6] = {"00001", "00002"};
boolean buttonState = 0;
void setup() {
pinMode(12, OUTPUT);
radio.begin();
radio.openWritingPipe(addresses[1]); // 00001
radio.openReadingPipe(1, addresses[0]); // 00002
radio.setPALevel(RF24_PA_MIN);
}
void loop() {
delay(5);
radio.stopListening();
int potValue = analogRead(A0);
int angleValue = map(potValue, 0, 1023, 0, 180);
radio.write(&angleValue, sizeof(angleValue));
delay(5);
radio.startListening();
while (!radio.available());
radio.read(&buttonState, sizeof(buttonState));
if (buttonState == HIGH) {
digitalWrite(led, HIGH);
}
else {
digitalWrite(led, LOW);
}
}
接收机代码
/*
* Arduino Wireless Communication Tutorial
* Example 2 - Receiver Code
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
* Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/
#include 《SPI.h》
#include 《nRF24L01.h》
#include 《RF24.h》
#include 《Servo.h》
#define button 4
RF24 radio(7, 8); // CE, CSN
const byte addresses[][6] = {"00001", "00002"};
Servo myServo;
boolean buttonState = 0;
void setup() {
pinMode(button, INPUT);
myServo.attach(5);
radio.begin();
radio.openWritingPipe(addresses[0]); // 00002
radio.openReadingPipe(1, addresses[1]); // 00001
radio.setPALevel(RF24_PA_MIN);
}
void loop() {
delay(5);
radio.startListening();
if ( radio.available()) {
while (radio.available()) {
int angleV = 0;
radio.read(&angleV, sizeof(angleV));
myServo.write(angleV);
}
delay(5);
radio.stopListening();
buttonState = digitalRead(button);
radio.write(&buttonState, sizeof(buttonState));
}
}
与前一个示例的不同之处在于,我们需要为双向通信创建两个管道或地址。
radio.stopListening();
int potValue = analogRead(A0);
int angleValue = map(potValue, 0, 1023, 0, 180);
radio.write(&angleValue, sizeof(angleValue));
另一方面,使用radio.startListening()函数,我们将第二个Arduino设置为接收器,并检查是否有可用数据。当有数据可用时,我们将读取它,将其保存到“angleV”变量,然后使用该值旋转伺服电机。
radio.startListening();
if ( radio.available()) {
while (radio.available()) {
int angleV = 0;
radio.read(&angleV, sizeof(angleV));
myServo.write(angleV);
}
接下来,在发送器中,我们将第一个Arduino开发板设置为接收器,并使用空的“while”循环,我们等待第二个Arduino开发板发送数据,数据表示按钮状态是否被按下。如果按下按钮,LED将点亮。这些过程不断重复,并且两个Arduino开发板都不断发送和接收数据。
原文https://www.yiboard.com/thread-994-1-1.html
I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
ESP32的DAC函数可以实现真正的模拟输出。
ESP32 没有Arduino输出 PWM 的 analogWrite(pin, value) 方法,取而代之的 ESP32 有一个 LEDC 来实现PWM功能。
本文档作为UNO R4 WiFi的技术概览,您将找到一系列资源和指南链接,帮助您开始下一个项目。
Arduino OneButton库是一个用于简化按钮操作的库,它可以轻松地处理按钮的单击、双击和长按等操作。适用于Arduino开发板以及ESP32等其他基于Arduino的开发板。