if(angle_1>60&&angle_2>60){ display.setCursor(0,55); // 设置开始显示文字的坐标 display.println("Good job!"); display.display(); // 使更改的显示生效 digitalWrite(buzzer,HIGH); } else{ display.setCursor(0,55); // 设置开始显示文字的坐标 display.println("Keep trying!"); display.display(); // 使更改的显示生效 digitalWrite(buzzer,LOW); }
时间: 2024-03-31 19:34:57 浏览: 103
这段代码是什么意思?
这是一个Arduino程序中的if-else语句,用于判断两个角度是否都大于60度。如果是,LCD显示器将显示“Good job!”,蜂鸣器将响起;否则,LCD显示器将显示“Keep trying!”,蜂鸣器将停止响声。其中,display.setCursor()函数用于设置LCD显示器上要显示的文字的位置,display.println()函数用于在该位置上打印文字,display.display()函数用于使更改的显示生效,digitalWrite()函数用于设置蜂鸣器的状态。
相关问题
if(angle_1<92&&angle_1>60){ display.setCursor(0,55); // 设置开始显示文字的坐标 display.println("Good job!"); display.display(); // 使更改的显示生效解释代码
这段代码是一个条件语句,判断变量 angle_1 是否在 60 到 92 的范围内。如果满足条件,就会在显示屏上显示 "Good job!" 的文本。 display.setCursor(0,55) 设置了文本显示的起始位置,即第一行第 55 个像素。 display.println() 是将文本打印到显示屏上的函数,display.display() 用来使更改的显示生效。
:(i)使用Arduino控制显示屏ili9341,在屏幕上显示一个尽可能大的时钟表盘,包含12个刻度和对应的1~12数字,以及一个秒针。秒针最初向上指向数字12。 (ii)Arduino上连接1个按钮。按钮第一次按下,秒表开始计时,秒针要准确地转动。按钮第二次按下,秒针暂停,在时钟表盘旁边用数字显示过去了多少秒(精确到0.01秒)。按钮第三次按下,秒针接着继续转动。第四次按下,秒针再次暂停,在时钟表盘旁边换行用数字显示过去了多少秒(精确到0.01秒)。第五次按下,同第三次……如此重复。 (iii)使用定时器进行准确的计时。Arduino上再加1个按钮,此按钮按下时,秒针归零。全部重新开始。
好的,这是一个有趣的项目!我们可以按照以下步骤进行实现:
步骤 1:准备材料
我们需要以下材料:
- Arduino UNO 板
- ILI9341 2.8寸 TFT 显示屏
- 4个杜邦线(公-公)
- 1个按钮
- 面包板
步骤 2:连接按钮和显示屏
将按钮连接到 Arduino 的数字引脚 2,用杜邦线连接。
将显示屏连接到 Arduino 的 SPI 引脚(11、12、13),并将 CS 引脚连接到数字引脚 10,RS 引脚连接到数字引脚 9,RST 引脚连接到数字引脚 8。
步骤 3:编写代码
首先,我们需要引入所需的库文件。这里我们需要用到 Adafruit_GFX 库和 Adafruit_ILI9341 库。如果您还没有安装这些库,可以在 Arduino IDE 中选择“工具”>“管理库”,然后搜索并安装。
接下来,我们需要定义一些全局变量和常量,如下所示:
```
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#define TFT_CS 10
#define TFT_RST 8
#define TFT_DC 9
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
const int buttonPin = 2;
int buttonState = 0;
unsigned long startTime = 0;
unsigned long pauseTime = 0;
unsigned long elapsedTime = 0;
bool paused = false;
```
在 setup() 函数中,我们需要初始化显示屏和按钮:
```
void setup() {
Serial.begin(9600);
tft.begin();
tft.setRotation(3);
tft.fillScreen(ILI9341_BLACK);
pinMode(buttonPin, INPUT);
}
```
在 loop() 函数中,我们需要检测按钮的状态,并根据需要更新秒针的位置和计时器的值:
```
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
if (paused) {
// Resume timer
startTime += millis() - pauseTime;
paused = false;
} else {
if (startTime == 0) {
// Start timer
startTime = millis();
} else {
// Pause timer
pauseTime = millis();
paused = true;
// Display elapsed time
elapsedTime = pauseTime - startTime;
displayElapsedTime();
}
}
// Wait for button release
while (digitalRead(buttonPin) == HIGH) {}
}
// Update clock
updateClock();
}
```
以上代码中,我们使用 digitalRead() 函数检测按钮的状态。如果按钮被按下,则根据计时器的状态执行相应的操作。如果计时器已经开始,则暂停计时器并显示经过的时间。否则,启动计时器。
在 updateClock() 函数中,我们需要根据当前时间计算秒针的位置,并将其绘制到显示屏上:
```
void updateClock() {
// Clear previous second hand
tft.drawLine(120, 120, prevX, prevY, ILI9341_BLACK);
// Calculate current second hand position
long currentTime = millis();
float angle = map(currentTime % 60000, 0, 60000, 0, 360) - 90;
float radians = angle * 0.0174532925;
int x = round(120 + 70 * cos(radians));
int y = round(120 + 70 * sin(radians));
// Draw current second hand
tft.drawLine(120, 120, x, y, ILI9341_WHITE);
// Remember current second hand position
prevX = x;
prevY = y;
}
```
以上代码中,我们使用 millis() 函数获取当前时间,并将其转换为秒针的角度。然后,我们使用三角函数计算秒针的位置,并将其绘制到显示屏上。最后,我们需要记住当前秒针的位置,以便下次更新时清除它。
在 displayElapsedTime() 函数中,我们需要将经过的时间显示在屏幕上:
```
void displayElapsedTime() {
int seconds = elapsedTime / 1000;
int milliseconds = (elapsedTime % 1000) / 10;
tft.setCursor(10, 140);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.print("Elapsed Time: ");
tft.print(seconds);
tft.print(".");
if (milliseconds < 10) {
tft.print("0");
}
tft.print(milliseconds);
tft.println("s");
}
```
以上代码中,我们将经过的时间转换为秒和毫秒,并将其显示在屏幕上。
最后,在 resetTimer() 函数中,我们需要将计时器重置为零:
```
void resetTimer() {
startTime = 0;
paused = false;
tft.fillRect(10, 140, 220, 50, ILI9341_BLACK);
}
```
步骤 4:完整代码
下面是完整的代码:
```
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#define TFT_CS 10
#define TFT_RST 8
#define TFT_DC 9
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
const int buttonPin = 2;
int buttonState = 0;
unsigned long startTime = 0;
unsigned long pauseTime = 0;
unsigned long elapsedTime = 0;
bool paused = false;
int prevX = 120;
int prevY = 50;
void setup() {
Serial.begin(9600);
tft.begin();
tft.setRotation(3);
tft.fillScreen(ILI9341_BLACK);
pinMode(buttonPin, INPUT);
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
if (paused) {
// Resume timer
startTime += millis() - pauseTime;
paused = false;
} else {
if (startTime == 0) {
// Start timer
startTime = millis();
} else {
// Pause timer
pauseTime = millis();
paused = true;
// Display elapsed time
elapsedTime = pauseTime - startTime;
displayElapsedTime();
}
}
// Wait for button release
while (digitalRead(buttonPin) == HIGH) {}
}
// Update clock
updateClock();
}
void updateClock() {
// Clear previous second hand
tft.drawLine(120, 120, prevX, prevY, ILI9341_BLACK);
// Calculate current second hand position
long currentTime = millis();
float angle = map(currentTime % 60000, 0, 60000, 0, 360) - 90;
float radians = angle * 0.0174532925;
int x = round(120 + 70 * cos(radians));
int y = round(120 + 70 * sin(radians));
// Draw current second hand
tft.drawLine(120, 120, x, y, ILI9341_WHITE);
// Remember current second hand position
prevX = x;
prevY = y;
}
void displayElapsedTime() {
int seconds = elapsedTime / 1000;
int milliseconds = (elapsedTime % 1000) / 10;
tft.setCursor(10, 140);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.print("Elapsed Time: ");
tft.print(seconds);
tft.print(".");
if (milliseconds < 10) {
tft.print("0");
}
tft.print(milliseconds);
tft.println("s");
}
void resetTimer() {
startTime = 0;
paused = false;
tft.fillRect(10, 140, 220, 50, ILI9341_BLACK);
}
```
步骤 5:测试
将代码上传到 Arduino 板上,然后按下按钮进行测试。第一次按下按钮启动计时器,第二次按下按钮暂停计时器并显示经过的时间,第三次按下按钮继续计时器,第四次按下按钮暂停计时器并显示经过的时间。按下第五次按钮,重复第三步。如果按下另一个按钮,则计时器将被重置为零。
恭喜您完成了这个有趣的项目!
阅读全文