搜索
bottom↓
回复: 10

uCGUI中使用Graph控件如何来画一个简单的YT曲线

[复制链接]

出0入0汤圆

发表于 2012-5-7 14:08:21 | 显示全部楼层 |阅读模式
本帖最后由 QQ373466062 于 2012-5-7 14:20 编辑

本想在Graph控件中画一个简单的曲线,想使用用GRAPH_DATA_YT_AddValue()函数来增加数据,可是写了后却是另一番效果



我猜想应该是没有设置GRAPH_DATA_YT_AddValue()之间的间隔吧,否则应该不会是竖线了??

那么有两个问题:
1. AddValue这个函数该如何使用才可以绘出连续的曲线而不是图中的竖线 ?
2. 在3.9.8版本的uCGUI中没有GRAPH_DATA_YT_MirrorX()函数?
     没有这个函数我该如何才可以是曲线是从左到右绘制,而非默认的从右向左绘制呢?


代码张贴如下:
其中关键是:

         GRAPH_DATA_YT_AddValue(hData,50);
       
        for(a = 0; a< 100; a++)
        {
                GRAPH_DATA_YT_AddValue(hData,a + 10);
        }

我该如何才可以绘制出一条简单的曲线呢?
  1. #include "GUI.h"
  2. #include "GUIDEMO.h"
  3. #include "GRAPH.h"

  4.         GRAPH_DATA_Handle  hData;
  5.         GRAPH_SCALE_Handle hScale;

  6.         I16 m = 50;
  7.         I16 *aData0 = &m;

  8.         WM_HWIN hGraph;       
  9.         WM_HWIN  hWM_HBKWIN;
  10.        
  11.        
  12. /*********************************************************************
  13. *
  14. *       _cbBk
  15. */
  16. static void _cbBk(WM_MESSAGE * pMsg) {
  17.         static unsigned int GirdFlag = 0;
  18.   switch (pMsg->MsgId) {
  19.   case WM_PAINT:
  20. //   GUIDEMO_DrawBk(1);
  21.     break;
  22.         case WM_TOUCH:
  23.                 GirdFlag++;
  24.                 GRAPH_SetGridVis(hGraph,GirdFlag%3);  //!< Display the  if touch the screen
  25.                 break;
  26.   default:
  27.     WM_DefaultProc(pMsg);
  28.   }
  29. }



  30. void MainTask(void) {
  31.         int a = 0;
  32.         GUI_Init();
  33.        
  34.         //!< Create a window as desktop
  35.         hWM_HBKWIN =
  36.         WM_CreateWindow(5,5,380,230,WM_CF_SHOW,0,0);
  37.        
  38.         // Set Callback function for background window
  39.   WM_SetCallback(hWM_HBKWIN, _cbBk);
  40.        
  41.         WM_SetDesktopColor(GUI_BLUE);        //!< SetDesktopColor
  42.        
  43.         //!< Create a graph widget
  44.         hGraph = GRAPH_CreateEx(30, 15, 300, 200, hWM_HBKWIN, WM_CF_SHOW, 0, 100);
  45.         //GRAPH_DATA_YT_MirrorX(hGraph , 1);
  46.         //!< Create a YT_data
  47.         hData  = GRAPH_DATA_YT_Create(GUI_RED, 10, aData0, 10);
  48.        
  49.        
  50.         GRAPH_DATA_YT_AddValue(hData,50);
  51.        
  52.         for(a = 0; a< 100; a++)
  53.         {
  54.                 GRAPH_DATA_YT_AddValue(hData,a + 10);
  55.         }
  56.        
  57.         hScale = GRAPH_SCALE_Create(28, GUI_TA_RIGHT, GRAPH_SCALE_CF_VERTICAL, 20);
  58.         GRAPH_AttachScale(hGraph, hScale);
  59.         GRAPH_SetGridDistX(hGraph,20);
  60.         GRAPH_SetGridDistY(hGraph,20);       
  61.         GRAPH_SetGridVis(hGraph,1);  //!< Display the Grid
  62.        
  63.         GRAPH_SetBorder(hGraph,30,5,5,5);  //!< Set the frame border
  64.                
  65.         GRAPH_AttachData(hGraph, hData); //!< Attach the data to graph

  66.   while(1) {
  67.   //  GUIDEMO_main();
  68.          GUI_Exec();       
  69. //         OSTimeDlyHMSM(0,0,0,100);
  70.   }
  71. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2012-5-7 15:14:55 | 显示全部楼层
解决了第一个问题:
  1. AddValue函数应该在Attach之后调用
  2. hData  = GRAPH_DATA_YT_Create(GUI_RED, 10, aData0, 10)中的数据项应该比较多 eg 100,而不是上面的10
  3. AddValue中的给的Value应该在坐标的范围内

第二个问题还不知道该如何处理

出0入0汤圆

发表于 2012-5-8 08:30:05 | 显示全部楼层
本帖最后由 dongfo 于 2012-5-8 08:33 编辑

ucGUI3.98版本没找到这个函数,我决得你可以使用uCGUI自身的绘制图表的函数GUI_DrawGraph()来实现曲线图表的绘制而不必自己绘制
void GUI_DrawGraph(I16 *pay, int NumPoints, int x0, int y0)

*pay为将要绘制在图表上的Y值数组,NumPoints为将要绘制的点数,x0,y0为起点。
这个函数简洁明了,而且是uCGUI自带的。

出0入0汤圆

 楼主| 发表于 2012-5-8 10:51:28 | 显示全部楼层
dongfo 发表于 2012-5-8 08:30
ucGUI3.98版本没找到这个函数,我决得你可以使用uCGUI自身的绘制图表的函数GUI_DrawGraph()来实现曲线图 ...

我想要做的是采集数据,然后显示曲线,所谓的实时曲线. 用这个函数如何完成呢  而且如果用这个我应该还需要自己绘制轴

出0入0汤圆

发表于 2012-5-31 09:34:57 | 显示全部楼层
void GUI_DrawGraph(I16 *pay, int NumPoints, int x0, int y0)

使用这个是不2的选择,坐标轴当然自己在画了,数据采集到的数据存入到数值,写一个转换的函数也就是将之前的数组转换为与屏幕坐标相关的*pay即可。不过是打点实现的,使用分片存储的方式。需要定义#define GUI_SUPPORT_MEMDEV        1

出0入0汤圆

 楼主| 发表于 2012-5-31 12:57:58 | 显示全部楼层
lyzhangxiang 发表于 2012-5-31 09:34
void GUI_DrawGraph(I16 *pay, int NumPoints, int x0, int y0)

使用这个是不2的选择,坐标轴当然自己在画 ...

已经用Graph控件完成  还蛮好用的

出0入0汤圆

发表于 2013-1-4 17:03:55 | 显示全部楼层
大侠,小弟跟你遇到同样的问题哦,求指点,另外还想请教一下,怎么设置波形的y方向和x方向的增益哦,谢谢大侠。

出0入0汤圆

发表于 2013-1-25 10:33:31 | 显示全部楼层
同求解答。。。

出0入0汤圆

发表于 2013-3-22 14:46:53 | 显示全部楼层
求指导,graph控件怎么用

出0入0汤圆

发表于 2015-5-31 10:25:33 | 显示全部楼层
请问没有GRAPH_DATA_YT_MirrorX()情况下波形从左到右绘制是怎么解决的呢

出0入0汤圆

 楼主| 发表于 2015-6-6 09:51:31 | 显示全部楼层
gushanyun 发表于 2015-5-31 10:25
请问没有GRAPH_DATA_YT_MirrorX()情况下波形从左到右绘制是怎么解决的呢

请参考代码:
https://github.com/tonyho/MIO_PID_Controller
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 17:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表