Arduino 3.5寸vLcds | 电容触摸屏 带GPU 支持Arduino I2C接口 组态屏

在这里插入图片描述
资料下载
vLcds I2C接口显示屏入门指南

http://www .hundatech.com/download/vLcds_I2C_接口显示屏入门指南.pdf

参考程序

// IIC Wire lcd Master Writer
// by martin xhli <http://www.hundatech.com>

// This example code is in the public domain.

#include <LiquidCrystalDisplay.h>


const uint8_t String01[]="Password ok!";
const uint8_t String02[]="Password error!";
const uint8_t String03[]="Error";

const uint8_t String04[]="Input number ok!";
const uint8_t String05[]="Input number error!";

uint8_t   identifier,cnt;
uint8_t   cmd_buffer[CMD_MAX_SIZE];
uint8_t   data_size;
uint8_t   update_en;
uint8_t   command_cmd;
uint8_t   command_statu;
uint8_t   command_length;
uint8_t   page_Id_bk = 0;
uint8_t   page_Id = 0;
uint8_t   targe_Id = 0;

LiquidCrystal TFTlcd(13);//RST pin13

void setup()
{
   update_en =0;
   data_size =0;
   TFTlcd.queue_reset();
   
   Serial.begin(9600);
   Serial.println(F("Paint!"));
   TFTlcd.begin();

   attachInterrupt(0,LcdIICInterrupt,FALLING);//Interrupt 0 is D2 PIN
   TFTlcd.SetPage(4);//main page id is 4
}

void LcdIICInterrupt()
{
    command_cmd = TFTlcd.I2C_Read();
    TFTlcd.queue_push(command_cmd);
    for(cnt =0;cnt <2;cnt++)
    {
     identifier = TFTlcd.I2C_Read();
     TFTlcd.queue_push(identifier);
     //Serial.println(identifier, HEX);
    }
    command_statu = TFTlcd.I2C_Read();
    TFTlcd.queue_push(command_statu);
    identifier = TFTlcd.I2C_Read();
    TFTlcd.queue_push(identifier);
    command_length = TFTlcd.I2C_Read();
    TFTlcd.queue_push(command_length);
    if((command_cmd == GET_EDIT_VALUE && command_statu == 0x6f)||(command_cmd == GET_TOUCH_EDIT_VALUE && command_statu == 0x6f))
    {
       for(cnt =0;cnt <command_length;cnt++)
      {
       identifier = TFTlcd.I2C_Read();
       TFTlcd.queue_push(identifier);
       //Serial.println(identifier, HEX);
      }
    }
}

void loop()
{
	data_size = TFTlcd.queue_find_cmd(cmd_buffer,CMD_MAX_SIZE);
  if(data_size>0)//receive command
  {
    //Serial.println(data_size, HEX);
    Serial.println(F("ProcessMessage"));
    ProcessMessage((PCTRL_MSG)cmd_buffer, data_size);//command process
  } 

  if(update_en)
  {
    Serial.println(F("UpdateUI"));
    update_en = 0;
    delay(100);
    UpdateUI();
  }
}

void ProcessMessage( PCTRL_MSG msg, uint16_t dataSize )
{
    uint8_t cmd_type    = msg->cmd_type;
    uint8_t control_id  = msg->control_id;
    uint8_t page_id     = msg->page_id;
    uint8_t _status     = msg->status;
    uint8_t key_type    = msg->key_type;
    uint8_t key_value   = msg->key_value;
    switch(cmd_type)
    {
    case NOTIFY_TOUCH_BUTTON:
      NotifyTouchButton(page_id,control_id,_status,key_type,key_value);
      break;
  
    case NOTIFY_TOUCH_CHECKBOX:
      NotifyTouchCheckbox(page_id,control_id,_status,key_type,key_value);
      break;
  
    case NOTIFY_TOUCH_SLIDER:
      NotifyTouchSlider(page_id,control_id,_status,key_type,key_value);
      break;

    case NOTIFY_TOUCH_EDIT:
    NotifyTouchEdit(page_id,control_id,_status,key_type,key_value);
    break;
    
    case NOTIFY_GET_EDIT:
     NotifyGetEdit((PEDIT_MSG)cmd_buffer);
      break;

    case NOTIFY_GET_TOUCH_EDIT:
    NotifyGetTouchEdit((PEDIT_MSG)cmd_buffer);
    break;
  
    case NOTIFY_GET_PAGE:
      NotifyGetPage(page_id,_status);
      break;
  
    case NOTIFY_GET_CHECKBOX:
      NotifyGetCheckbox(page_id,control_id,_status,key_type,key_value);
      break;
  
    case NOTIFY_GET_SLIDER:
      NotifyGetSlider(page_id,control_id,_status,key_type,key_value);
      break;
      
    default:
      break;
  }
}

void UpdateUI()
{
    int i;
    int value;
    if(page_Id == Text_PAGE)
    {
      TFTlcd.SetNumberValue(page_Id,19,20);
      TFTlcd.SetNumberValue(page_Id,20,21);
      TFTlcd.SetNumberValue(page_Id,21,28);
      TFTlcd.SetNumberValue(page_Id,22,35);
      TFTlcd.SetNumberValue(page_Id,23,46);
      TFTlcd.SetNumberValue(page_Id,24,58);
      TFTlcd.SetLableValue(page_Id,16,(unsigned char *)String03);
      TFTlcd.SetLableValue(page_Id,17,(unsigned char *)String03);
      TFTlcd.SetLableValue(page_Id,18,(unsigned char *)String03);
    }
    else if(page_Id == Waveform_PAGE)
    {
       Serial.println(F("Waveform_PAGE"));
      for(i=-125;i<125;i+=1)
      {
        value = 20*sin(PI/50*i);
        TFTlcd.SetWaveformValue(page_Id,9,2,value+119);
        TFTlcd.SetWaveformValue(page_Id,9,1,value+59);
        delay(10);
      }
    }
    else if(page_Id == Temperture_PAGE)
    {
      value =20;
      for(i=0;i<=10;i+=1)
      {
        TFTlcd.SetThermometerValue(page_Id,9,value);
        TFTlcd.SetNumberValue(page_Id,11,value-20);
        value +=10;
        delay(200);
      }
  
      value =120;
      for(i=0;i<=10;i+=1)
      {
        TFTlcd.SetThermometerValue(page_Id,9,value);
        TFTlcd.SetNumberValue(page_Id,11,value-20);
        value -=10;
        delay(200);
      }
    }
    else if(page_Id == Slider_PAGE)
  {
    value =0;
    for(i=0;i<10;i+=1)
    {
      TFTlcd.SetProgressbarValue(page_Id,18,value);
      TFTlcd.SetProgressbarValue(page_Id,20,value);
      value +=10;
      delay(200);
    }
  }
  else if(page_Id == CircleGauge_PAGE)
  {
    value =0;
    for(i=0;i<=10;i+=1)
    {
      TFTlcd.SetCircleGaugeValue(page_Id,37,value);
      TFTlcd.SetBarGaugeValue(page_Id,40,value);
      
      value +=10;
      delay(200);
    }

    value =100;
    for(i=0;i<=10;i+=1)
    {
      TFTlcd.SetCircleGaugeValue(page_Id,37,value);
      TFTlcd.SetBarGaugeValue(page_Id,40,value);
      
      value -=10;
      delay(200);
    }
  }
  else if(page_Id == BarGauge_PAGE)
  {
    value =0;
    for(i=0;i<=10;i+=1)
    {
      TFTlcd.SetBatteryValue(page_Id,44,value);
      TFTlcd.SetWaterGaugeValue(page_Id,42,value);
      value +=10;
      delay(100);
    }

    value =100;
    for(i=0;i<=10;i+=1)
    {
      TFTlcd.SetBatteryValue(page_Id,44,value);
      TFTlcd.SetWaterGaugeValue(page_Id,42,value);
      value -=10;
      delay(100);
    }
  }
}

void NotifyTouchButton(uint8_t page_id, uint8_t control_id, uint8_t  state,uint8_t type,uint8_t value)
{
  //TODO:
  if(type == CHANGE_PAGE&& state == KEY_RELEASE)
  {
    page_Id = value;
    update_en = 1;
    //UpdateUI();
  }
  else if(type == ENTER&& state == KEY_RELEASE)
  {
    targe_Id = value;//targe Edit Id
     TFTlcd.GetEditValue(page_Id,targe_Id);
  }
  else if(type == CHAR)
  {
  
  }
  else if(type == UPLOAD_CONTROL_ID)
  {
  }
  else if(type == CLEAR)
  {
  }

}

void NotifyTouchCheckbox(uint8_t page_id, uint8_t control_id, uint8_t  state,uint8_t type,uint8_t value)
{
  //TODO:
  if(state == SELECT)
    update_en = 1;
  //UpdateUI();
}

void NotifyTouchSlider(uint8_t page_id, uint8_t control_id, uint8_t  state,uint8_t type,uint8_t value)
{
  //TODO:
  if(update_en != 1)
  TFTlcd.SetNumberValue(page_Id,28,(uint16_t)value);
  //UpdateUI();
}

void NotifyTouchEdit(uint8_t page_id, uint8_t control_id, uint8_t  state,uint8_t type,uint8_t value)
{
  //TODO:
  if(update_en != 1)
    TFTlcd.GetTouchEditValue(page_Id,control_id);
  
}

void NotifyGetEdit(PEDIT_MSG msg)
{
  uint8_t cmd_type    = msg->cmd_type;  //command
  uint8_t control_id  = msg->control_id;//object Id
  uint8_t page_id     = msg->page_id;   //page Id
  uint8_t _status     = msg->status;


  //The test passward number 1 2 3 4,ASCII code is 0x31 0x32 0x33 0x34
  if(msg->param[0] == 0x31 && msg->param[1] == 0x32 && msg->param[2] == 0x33 && msg->param[3] == 0x34)
  {
    TFTlcd.Display_Message(0X18,2,(unsigned char *)String01);  
  }
  else
  {
    TFTlcd.Display_Message(0X18,2,(unsigned char *)String02);  
  }
 
}

void NotifyGetTouchEdit(PEDIT_MSG msg)
{
  uint8_t cmd_type    = msg->cmd_type;  //command
  uint8_t control_id  = msg->control_id;//object Id
  uint8_t page_id     = msg->page_id;   //page Id
  uint8_t _status     = msg->status;


  //The test passward number 1 2 3 4,ASCII code is 0x31 0x32 0x33 0x34
  if(msg->param[0] == 0x31 && msg->param[1] == 0x32 && msg->param[2] == 0x33 && msg->param[3] == 0x34)
  {
    TFTlcd.Display_Message(0X18,2,(unsigned char *)String04);  
  }
  else
  {
    TFTlcd.Display_Message(0X18,2,(unsigned char *)String05);  
  }
 
}

void NotifyGetPage(uint8_t page_id,uint8_t status)
{
  //TODO:
  if(status == SUCCESS)
    page_Id = page_id;
}


void NotifyGetCheckbox(uint8_t page_id, uint8_t control_id, uint8_t  state,uint8_t type,uint8_t value)
{
  //TODO:
  if(state == SELECT)
  {
    update_en = 1;
  }
  //UpdateUI();
}

void NotifyGetSlider(uint8_t page_id, uint8_t control_id, uint8_t  state,uint8_t type,uint8_t value)
{
  //TODO:
  if(state == SUCCESS)
  {
    //success get value
  }
  update_en = 1;
}



发布了75 篇原创文章 · 获赞 58 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/Naiva/article/details/103838598
今日推荐