内容
- 产品描述
- 图形用户界面设计
3.电路图
- 代码
- 视频
产品描述
在这个项目中,我们将设计一个时钟和一个自动化系统,在这个帮助下我们可以打开或关闭家里的灯,还有一个可以显示时间和日期的时钟。
为此,我们正在使用 TFT显示屏(STONE-HMI),该显示器有一个 GUI 软件,借助此软件,我们将设计包含部分时钟和自动化的界面。下载 GUI 软件 点击此处
时钟部分设计:-
让我们首先设计时钟部分,首先我们必须添加文件夹中给出的所有图像单击 这里 。
正如您在左侧看到的,所有图像都已添加到图片文件部分中。现在单击图像“14”,您将看到如图所示的界面。现在从触摸配置中选择“RTC”来设置时间和日期并进行所有配置,首先添加“页面中”图像作为图像编号 6,该图像将在设置时使用。现在转到图像编号 6 并添加所有按钮及其键值。这些值将采用这种格式。
对于“1”——0031
对于“2”——0031
对于“3”——0031
对于“4”——0031
对于“5”——0031
对于“6”——0031
对于“7”——0031
对于“8”——0031
对于“9”——0031
对于“0”——0030
对于“确定” – 00F1
之后,为所有按钮添加按钮效果,如图 nimber-7 所示,因此这部分将完成时钟设置。让我们进一步创建时钟指针。
类似地从顶部添加表盘时钟并添加所有时针、分针和秒针,首先我们必须为这些手制作图标,因此为此请转到图标生成器并选择这些图像,您将在该部分中找到一个新文件夹从这里的“图标文件”中,您必须根据指针要求选择所有图标。之后根据时钟指针要求选择所有图标,并且不要忘记选择时钟每个指针的中心,使用此程序现在将完成此操作,我们必须选择自动化部分,为此我们添加了一个自动化符号,如上图所示,对于此选择按钮,并将该按钮放在此自动机图标的区域中,然后选择“页面切换'为image-1,因为这是自动化的图像,之后选择image-1进行进一步设计。
自动化部分设计:-
让我们为此设计自动化部分,我们要求 Arduino 通过地址发送特定的键值,这里我们使用“0001”作为所有键值。对于风扇(ON)按钮,我们发送“0001”键值,对于风扇(OFF)按钮,我们发送“0002”键值。 )我们正在发送“XNUMX”键值,类似地,我们正在发送所有设备的所有特定值。这里我们还添加了一个按钮来切换到时钟 GUI,这将有助于从该界面移动到时钟界面。
对于页面切换,我们使用位于左上角的“按钮”,对于自动化按钮,我们使用“返回按键值”功能,该功能有两个参数,第一个是地址值,另一个是键值,正如我们上面提到的那样为每个自动化按钮使用不同的键值。
电路图
正如您在连接中看到的,有三个 LED light-1、light-2,对于风扇,这里我们仅使用 LED,但您可以将实际设备连接到此。Light-1 连接到 Arduino 的引脚 -D6、light- 2 连接到Arduino的D7引脚,类似的风扇与Arduino的D5连接。并按照电路图连接Rx和Tx。这里我们将Tx与Arduino的pin-2连接,Rx与Arduino的pin-3连接根据 Arduino 代码。让我们进一步了解它如何使用代码。
串行通信有不同类型。当您在项目中使用Arduino板时,您可以从Arduino板内部的UART选择标准串行引脚作为Arduino软件串行Rx Tx,因此称为串行TTL。在这种情况下,我们使用硬件serial.h库,但一些额外的引脚可以用作Rx或Tx。例如,SPI 通信引脚可以用作 MISO、MOSI 和选择 (SC),但它们也是可以用作数字输入或数字输出的引脚,或者如果您需要,可以使用软件串行将这些引脚用作 Rx、Tx .h 库。
让我们进一步了解代码是如何工作的。
代码 :-
#包括//软件串口库
软件串行 max232(2,3);
字符数据;
字符串 mystring;
整数 f = 5; // 风扇引脚
整数 l1 = 6; // light-1 的引脚
整数 l2 = 7; // light-2 的引脚
无效设置()
{
串行.开始(115200); //这里波特率为115200
max232.begin(115200);
pinMode(f, 输出);
digitalWrite(f, 低);
引脚模式(l1,输出);
数字写入(l1,低);
引脚模式(l2,输出);
数字写入(l2,低);
}
无效循环()
{
if (max232.available()>0)
{
数据 = max232.read();
mystring = mystring + byte(数据);
延迟(10);
}
else if (mystring.endsWith(“101”)) //风扇开启的条件
{
mystring = “”;
数字写入(f,高);
}
else if (mystring.endsWith(“102”)) //风扇关闭的条件
{
mystring = “”;
数字写入(f,低);
}
else if (mystring.endsWith(“103”)) //Light-1 ON 的条件
{
mystring = “”;
数字写入(l1,高);
}
else if (mystring.endsWith(“104”)) //Light-1 关闭的条件
{
mystring = “”;
数字写入(l1,低);
}
else if (mystring.endsWith(“105”)) //Light-2 ON 的条件
{
mystring = “”;
数字写入(l2,高);
}
else if (mystring.endsWith(“106”)) //Light-2 关闭的条件
{
mystring = “”;
数字写入(l2,低);
}
else if (mystring.endsWith(“107”)) //所有电器开启的条件
{
mystring = “”;
数字写入(l1,高);
数字写入(l2,高);
数字写入(f,高);
}
else if (mystring.endsWith(“108”)) //所有电器关闭的条件
{
mystring = “”;
数字写入(l1,低);
数字写入(l2,低);
数字写入(f,低);
}
}
在职的 :-
正如我们所讨论的,我们正在使用软件串行库通过地址传输密钥值,为此我们添加了在这段代码中,给出了连接 Arduino 和 STON-HMI 显示器的接口。之后,我们声明了所有用于 LED 和风扇的输出引脚,对于这些设备,我们将这些引脚声明为 OUTPUT,然后设置波特率对于软件串行库。这些都在 void 设置部分中完成,现在让我们为我们正在使用的设备创建条件,这部分被添加到 void 循环中,因为这将重复很多次,因为我们将按显示屏上的按钮。
在无效循环部分中,设备有四个条件。第一个条件是风扇打开和关闭,这里我们通过地址“0001”发送“0002”键值作为打开条件,“0001”作为关闭条件,该地址是对于所有设备都相同。对于 light-1 的第二个设备,我们发送“0003”表示开启条件,发送“0004”表示关闭条件,类似地,对于 light-2,“0005”表示开启,“0006”表示关闭条件,因此通过这种方式,这些条件适用于单个设备。
一次关闭或打开所有设备还有一个条件,为此我们使用“0007”表示“打开”,“0008”表示“关闭”。
输出视频:-
这是该项目的输出视频,在该视频中首先显示了时钟的设置,并且如您在视频中看到的那样,自动化正在工作。
这是输出视频,您可以通过点击该视频进行下载。我们已经添加了与此相关的所有数据。如果您对 GUI 设计有任何疑问,您可以下载项目文件并直接打开它,在这种情况下您不必设计任何 GUI,您都会得到我们构建的设计。但如果你想设计不同的 GUI,那么你必须遵循所有步骤。
代码
//有关该项目的更多信息,请访问:- wwww. electrocircut.net //
#包括
软件串行 max232(2,3);
字符数据;
字符串 mystring;
整数 f = 5;
整数 l1 = 6;
整数 l2 = 7;
无效设置()
{
Serial.begin(115200);
max232.begin(115200);
pinMode(f, 输出); /////////红色的////////
digitalWrite(f, 低);
引脚模式(l1,输出); ////////绿色的///////
数字写入(l1,低);
引脚模式(l2,输出); ///////蓝色的/////////
数字写入(l2,低);
}
无效循环()
{
if (max232.available()>0)
{
数据 = max232.read();
mystring = mystring + byte(数据);
延迟(10);
}
else if (mystring.endsWith(“101”))
{
mystring = “”;
数字写入(f,高);
}
else if (mystring.endsWith(“102”))
{
mystring = “”;
数字写入(f,低);
}
else if (mystring.endsWith(“103”))
{
mystring = “”;
数字写入(l1,高);
}
else if (mystring.endsWith(“104”))
{
mystring = “”;
数字写入(l1,低);
}
else if (mystring.endsWith(“105”))
{
mystring = “”;
数字写入(l2,高);
}
else if (mystring.endsWith(“106”))
{
mystring = “”;
数字写入(l2,低);
}
else if (mystring.endsWith(“107”))
{
mystring = “”;
数字写入(l1,高);
数字写入(l2,高);
数字写入(f,高);
}
else if (mystring.endsWith(“108”))
{
mystring = “”;
数字写入(l1,低);
数字写入(l2,低);
数字写入(f,低);
}
}
资料来源:柏拉图数据智能