2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 触摸屏控制智能家居开关灯

触摸屏控制智能家居开关灯

时间:2022-04-26 08:09:33

相关推荐

触摸屏控制智能家居开关灯

这里我用到的是三个zigbee模块、两个uno、一个mega2560开发板。

思路如图:由于 目前只有三个zigbee,所以暂时就控制两个灯吧。逻辑图如下:

涉及到的知识:zigbee组网、spi触摸屏如何设计屏幕以及获取触摸点击事件。

一、zigbee组网设置

我买的zigbee模块是zigbee CC2530 UART串口透传模块,比较适合二次开发 。组网设置简单,设置一个协调器,其他两个设置成终端,通过串口发送给协调器消息,协调器在发消息给终端。

其中,设置协调器、终端的方是用的是商家提供的软件,设置比较简单,注意记录下波特率,我们写程序的时候最好用和zigbee一样的波特率。

二、mega2560 触摸屏

使用的是spi通信的4.0寸屏幕ST7796

1、中文字体屏幕显示一般都是取字模,如图:

将字模放入代码里,屏幕的坐标轴,x轴图中已经标出,竖着的是y轴。

代码:压缩包在审核,之后上传。如果需要会员才能下载,评论我发你,刚写博客,不太会弄这个。。。

arduinomega2560触摸屏中英文显示-嵌入式文档类资源-CSDN文库

部分代码如下:

my_lcd.Init_LCD();//屏幕初始化my_lcd.Fill_Screen(BLACK);//屏幕背景色show_chinese(50, 100, BLUE, WHITE, "下午好哈!", 32, 1);//括号里依次是:x\y轴,文字色、文字背景色,文字,“1”表示不需要文字背景色,“0”是需要文字背景色show_chinese(50, 150, BLUE, WHITE, "朋友们!", 32, 1);my_lcd.Set_Text_Back_colour(BLACK);//背景色my_lcd.Set_Text_colour(BLUE);my_lcd.Set_Text_Size(3);my_lcd.Print_String("Hello World!", 30, 200);//括号里依次是:文字,x\y轴

2、触摸事件,打印坐标,设置范围

这两句代码点击屏幕,会显示坐标,这里可以加一个300毫秒。

3、触摸屏智能家居灯代码

代码压缩包:

触摸屏智能家居灯触摸屏代码-智能家居文档类资源-CSDN文库

#include "LCDWIKI_GUI.h"//Core graphics library#include "LCDWIKI_SPI.h"//Hardware-specific library#include "LCDWIKI_TOUCH.h" //touch screen library#define MODEL ST7796S#define CS A5#define CD A3#define RST A4#define LED A0#define TCS 45#define TCLK 46#define TDOUT 47#define TDIN 48#define TIRQ 49LCDWIKI_SPI my_lcd(MODEL, CS, CD, RST, LED);LCDWIKI_TOUCH my_touch(TCS, TCLK, TDOUT, TDIN, TIRQ);#define BLACK 0x0000#define BLUE 0x001F#define RED0xF800#define GREEN 0x07E0#define CYAN 0x07FF#define MAGENTA 0xF81F#define YELLOW 0xFFE0#define WHITE 0xFFFFuint16_t color_mask[] = {0xF800, 0xFFE0, 0x07E0, 0x07FF, 0x001F, 0xF81F}; //color select#define COLORBOXSIZE my_lcd.Get_Display_Width()/6#define PENBOXSIZE my_lcd.Get_Display_Width()/4int16_t old_color, current_color, flag_colour;int16_t old_pen, current_pen, flag_pen;boolean show_flag = true;void show_string(uint8_t *str, int16_t x, int16_t y, uint8_t csize, uint16_t fc, uint16_t bc, boolean mode){my_lcd.Set_Text_Mode(mode);my_lcd.Set_Text_Size(csize);my_lcd.Set_Text_colour(fc);my_lcd.Set_Text_Back_colour(bc);my_lcd.Print_String(str, x, y);}int x=100;void button1(void)//对button两个按钮定义,同一横排y轴相同,x不同{my_lcd.Set_Draw_color(GREEN);//底色my_lcd.Fill_Round_Rectangle(100, 150, 150, 200, 20); //距左 上 横向 纵向 四周边角设计my_lcd.Fill_Round_Rectangle(200, 150, 250 , 200, 20); //距左 上 横向 纵向 四周边角设计show_string("LED1", 100, x, 2, BLUE, BLACK, 1); //文字show_string("LED2", 200, 165, 2, RED, BLACK, 1);}void button2(void){my_lcd.Set_Draw_color(RED);my_lcd.Fill_Round_Rectangle(100, 80, 150, 130, 20);my_lcd.Fill_Round_Rectangle(200, 80, 250 , 130, 20);show_string("LED1", 100, 100, 2, BLUE, BLACK, 1);show_string("LED2", 200, 100, 2, YELLOW, BLACK, 1);}void button3(void){my_lcd.Set_Draw_color(BLUE);my_lcd.Fill_Round_Rectangle(100, 220, 150, 270, 20);my_lcd.Fill_Round_Rectangle(200, 220, 250 , 270, 20);show_string("LED1", 100, 240, 2, RED, BLACK, 1);show_string("LED2", 200, 240, 2, YELLOW, BLACK, 1);}void button4(void){my_lcd.Set_Draw_color(YELLOW);my_lcd.Fill_Round_Rectangle(100, 290, 150, 340, 20);my_lcd.Fill_Round_Rectangle(200, 290, 250 , 340, 20);show_string("LED1", 100, 305, 2, BLUE, WHITE, 1);show_string("LED2", 200, 305, 2, BLUE, WHITE, 1);show_string("CLOSE", 100, 345, 2, RED, WHITE, 1);show_string("CLOSE", 200, 345, 2, RED, WHITE, 1);show_string("Please control the light switch", 20, 400, 2, WHITE, WHITE, 1);}void setup(void){my_lcd.Init_LCD();my_lcd.Set_Rotation(0);my_touch.TP_Set_Rotation(3);my_touch.TP_Init(my_lcd.Get_Rotation(), my_lcd.Get_Display_Width(), my_lcd.Get_Display_Height());my_lcd.Fill_Screen(BLACK);button1();button2();button3();button4();current_color = RED;current_pen = 0;Serial.begin(38400);}void loop(){comme:my_touch.TP_Scan(0);if (my_touch.TP_Get_State()&TP_PRES_DOWN)//如果有触摸{Serial.println(my_touch.y);//打印坐标Serial.println(my_touch.x);//对button1区域两个按钮触发点击范围判断if ((my_touch.y > 150) && (my_touch.y < 200)){if (((my_touch.x > 100) && (my_touch.x < 150)) && !flag_pen){Serial.println("1");//传给zigbee,串口透传,zigbee终端收到消息发给uno,uno控制灯delay(300);}if (((my_touch.x > 200) && (my_touch.x < 250)) && !flag_pen){Serial.println("2");delay(300);}}//对button2区域两个按钮触发点击范围判断if ((my_touch.y > 80) && (my_touch.y < 110)){if (((my_touch.x > 100) && (my_touch.x < 130)) && !flag_pen){Serial.println("3");delay(300);}if (((my_touch.x > 200) && (my_touch.x < 250)) && !flag_pen){Serial.println("4");delay(300);}}//对button3区域两个按钮触发点击范围判断if ((my_touch.y > 220) && (my_touch.y < 260)){if (((my_touch.x > 80) && (my_touch.x < 130)) && !flag_pen){Serial.println("5");delay(300);}if (((my_touch.x > 200) && (my_touch.x < 250)) && !flag_pen){Serial.println("6");delay(300);}}//对button4区域两个按钮触发点击范围判断if ((my_touch.y > 300) && (my_touch.y < 340)){if (((my_touch.x > 80) && (my_touch.x < 130)) && !flag_pen){Serial.println("7");delay(300);}if (((my_touch.x > 200) && (my_touch.x < 250)) && !flag_pen){Serial.println("8");delay(300);}}}}

其中,我把需要的库文件都放在arduino文件中,大家没有库也不会报错

伙伴们也可以github下载,搜这些库,复制上面代码,把" "改成< >这种就可以了

uno端代码,两个uno终端,uno连接zigbee

zigbee的vcc一定要连3.3v,RX连接uno的10引脚,TX连接11引脚

#include <SoftwareSerial.h>//uno部分,两个终端代码const int led=7;int ledstate =HIGH;SoftwareSerial arduinoSerial = SoftwareSerial(10,11);String clientRequest ="";void setup() {// put your setup code here, to run once:Serial.begin(38400);arduinoSerial.begin(38400);arduinoSerial.flush();pinMode(4,OUTPUT);digitalWrite(4,HIGH);pinMode(5,OUTPUT);digitalWrite(5,HIGH);pinMode(6,OUTPUT);digitalWrite(6,HIGH);pinMode(7,OUTPUT);digitalWrite(7,HIGH);}void loop(){if (arduinoSerial.available() > 0){clientRequest =clientRequest + char(arduinoSerial.read());Serial.println(clientRequest);//if (clientRequest=="3"){//RED//上传一次代码后,第二个uno换成注释的这几段// digitalWrite(5,LOW);//digitalWrite(6,HIGH);//digitalWrite(7,HIGH);//delay(300);//}//// if (clientRequest=="1"){//GREEN// digitalWrite(5,HIGH);//digitalWrite(6,LOW);//digitalWrite(7,HIGH);//delay(300);//}//if (clientRequest=="5"){//BLUE// digitalWrite(5,HIGH);//digitalWrite(6,HIGH);//digitalWrite(7,LOW);//delay(300);//}//if (clientRequest=="7"){//CLOSE// digitalWrite(5,HIGH);//digitalWrite(6,HIGH);//digitalWrite(7,HIGH);//delay(300);//}if (clientRequest=="4"){//REDdigitalWrite(5,LOW);digitalWrite(6,HIGH);digitalWrite(7,HIGH);delay(300);}if (clientRequest=="2"){//GREENdigitalWrite(5,HIGH);digitalWrite(6,LOW);digitalWrite(7,HIGH);delay(300);}if (clientRequest=="6"){//BLUEdigitalWrite(5,HIGH);digitalWrite(6,HIGH);digitalWrite(7,LOW);delay(300);}if (clientRequest=="8"){//CLOSEdigitalWrite(5,HIGH);digitalWrite(6,HIGH);digitalWrite(7,HIGH);delay(300);}}clientRequest="";}

看运行结果,我用的rgb共阳级灯,大家可以试试pwm变色灯呢,加个继电器,把uno板换成nano板,家里就可以用了呢。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。