查看: 1136|回复: 6
收起左侧

[实例1-Processing画框点灯]:Processing与RISC-Vduino编程实战(既面向对象又面向过程编程)

[复制链接]

  离线 

  • TA的每日心情

    2022-6-26 13:17
  • 签到天数: 4 天

    [LV.2]

    发表于 2022-1-25 16:55:33 | 显示全部楼层 |阅读模式

    有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站

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

    x
    本帖最后由 51MCU 于 2022-1-25 17:21 编辑

          最近一直在思考,当今物联网时代,有没有一种既可以快速学习面向过程编程(C语言)知识,又能学习面向对象编程(Java语言)知识,而且还能把硬件电路玩起来的一种实战AIoT电子编程教程?回首过去十多年技术生涯,发现答案是:有的!      在国产化软硬件的时代趋势下,基于各位先人前辈实现的开源技术基础。我想有必要展示一下基于RISC-V国产化单片机硬件编程和基于Processing Java软件编程相结合的视觉互动交互电子艺术,仅此向各位同学,非电子计算机专业,但对电子感兴趣的爱好者介绍物联网时代,国产化硬件芯片电子艺术与视觉交互的魅力!使大家能够低门槛进入电子交互领域,将大家的灵感想法用视觉+电子呈现出来!分享给大家,让大家感受到科技的魅力!

          从本篇开始,我将通过几个小例子让各位同学快速地掌握Processing与RISC-Vduino编程实战知识(既面向对象又面向过程编程)。


    实例1-Processing画框点灯

    任务:在Processing界面上画一个小矩形,
    当鼠标单击矩形内时,RISC-Vduino板载LED黄灯HelloWorld点亮;当鼠标单击矩形外时,RISC-Vduino板载的LED黄灯HelloWorld熄灭。

    【1】硬件
    1.1笔记本或PC电脑(建议系统Windows/Linux)[电脑应该都有吧]
    1.2RISC-Vduino UNO Board [手头没有,某宝或PDD淘一块吧]
    1.3USB 下载线
    1.4USB mini通信线
    Processing Java-[实例1-Processing画框点灯]:Processing与RISC-Vduino编程实战(既面向对象又面向过程编程)risc-v单片机中文社区(1)

    图1-1 RISC-Vduino UNO Board

    Processing Java-[实例1-Processing画框点灯]:Processing与RISC-Vduino编程实战(既面向对象又面向过程编程)risc-v单片机中文社区(2)

    图1-2 RISC-Vduino USB mini cable

    Processing Java-[实例1-Processing画框点灯]:Processing与RISC-Vduino编程实战(既面向对象又面向过程编程)risc-v单片机中文社区(3)

    图1-3 RISC-Vduino USB Download cable

    【2】软件
    2.1.MRS(除了MounRiver Studio IDE,也可以选其他RISC-V IDE
    Processing Java-[实例1-Processing画框点灯]:Processing与RISC-Vduino编程实战(既面向对象又面向过程编程)risc-v单片机中文社区(4)

    图2-1 RISC-V IDE-MRS(C语言)

    2.2.Processing
    Processing Java-[实例1-Processing画框点灯]:Processing与RISC-Vduino编程实战(既面向对象又面向过程编程)risc-v单片机中文社区(5)

    图2-2 Processing(Java语言)

    【3】实战操作步骤
    3.1首先RISC-Vduino连接USB下载线到电脑USB口,打开MRS下载好RISC-Vduino源码到RISC-Vduino板子。(见图3-1)
    Processing Java-[实例1-Processing画框点灯]:Processing与RISC-Vduino编程实战(既面向对象又面向过程编程)risc-v单片机中文社区(6)

    图3-1 下载RISC-Vduino源码

    3.2上传开源代码,RISC-Vduino UNO Board开源代码:
    1. /********************************** (C) COPYRIGHT *******************************
    2. * File Name          : main.c
    3. * Author             : www.RISC-Vduino.cc
    4. * Version            : V1.0.0
    5. * Date               : 2020/11/1
    6. * Description        : Main program body.
    7. *******************************************************************************/

    8. #include "debug.h"
    9. /*******************************************************************************
    10. * Function Name  : main
    11. * Description    : Main program.
    12. * Input          : None
    13. * Return         : None
    14. *******************************************************************************/
    15. void HelloWorld_LED_Init(void)
    16. {
    17.       GPIO_InitTypeDef  GPIO_InitStructure;
    18.       RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    19.       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    20.       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    21.       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    22.       GPIO_Init(GPIOA, &GPIO_InitStructure);
    23.       GPIO_ResetBits(GPIOA,GPIO_Pin_1);
    24. }
    25. int main(void)
    26. {
    27.     u16 buttonState1;// read the input on ANALOG pin 6:(eg.RISC-Vduino UNO RC is Pin-GPIOA6)
    28.     //u8 HIGH = 1;
    29.     u8 LOW = 0;
    30.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    31.     Delay_Init();
    32.     USART_Printf_Init(9600);// initialize serial communication at 9600 bits per second:
    33.     printf("SystemClk:%d\r\n",SystemCoreClock);
    34.     printf("This is Processing SerialCommunication example\r\n");
    35.     HelloWorld_LED_Init();
    36.     // the while function runs over and over again forever
    37.     while(1)
    38.     {
    39.         //Processing串口编程+RISC-Vduino串口通信(RISC-Vduino串口读取Processing下发的数据)
    40.         if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != RESET)
    41.         {
    42. printf("I am RISC-Vduino Board!\r\n");
    43.            if(USART_ReceiveData(USART1) == 'a')
    44.            {
    45.              GPIO_ResetBits(GPIOA,GPIO_Pin_1);// CLOSE RISC-Vduino BOARD LED
    46.            }
    47.            if(USART_ReceiveData(USART1) == 'b')
    48.            {
    49.              GPIO_SetBits(GPIOA,GPIO_Pin_1); // OPEN RISC-Vduino BOARD LED
    50.            }
    51.         }
    复制代码

    3.3然后接入USBmini线,电脑设备管理器中,查看RISC-Vduino板子的端口COM口。(见图3-2)
    Processing Java-[实例1-Processing画框点灯]:Processing与RISC-Vduino编程实战(既面向对象又面向过程编程)risc-v单片机中文社区(7)

    图3-2 查看RISC-Vduino板子串口为COM7

    3.4 打开Processing中的COM口,进行Processing源代码编写运行。(见图3-3)
    Processing Java-[实例1-Processing画框点灯]:Processing与RISC-Vduino编程实战(既面向对象又面向过程编程)risc-v单片机中文社区(8)

    图3-3 Processing源代码运行

    3.5 Processing开源代码:
    1. import processing.serial.*;//导入serial库Serial port
    2. Serial riscvduino_port; // Create object from Serial class 实例化一个Serial对象
    3. String message;

    4. void setup()
    5. {
    6.       //初始化RISC-Vduino端口,根据电脑系统为RISC-Vduino分配的端口号填写。
    7.       riscvduino_port = new Serial(this, "COM7", 9600);//open windows Device COM7,from RISC-Vduino UNO Board connect!
    8.       size(300,300);
    9. }
    10. void draw()
    11. {
    12.       rect(100,100,50,50);//绘制矩形
    13. }

    14. void mouseClicked()
    15. {
    16.       if((mouseX>=100)&(mouseX<=150)&mouseY>=100&(mouseY<=150))
    17.         {
    18.             //当鼠标在矩形区域内单击时,往RISC-Vduino串口发送小写字母a
    19.             println("RISC-Vduino LED turn ON!");
    20.             riscvduino_port.write("a");
    21.         }
    22. else
    23.         {
    24.             //当鼠标在矩形区域外单击时,往RISC-Vduino串口发送小写字母b
    25.             println("RISC-Vduino LED turn OFF!");
    26.             riscvduino_port.write("b");
    27.         }
    28. }
    复制代码

    3.6 鼠标操作
    单击Processing界面中方框内,可以看到RISC-Vduino板载LED黄灯HelloWorld点亮;
    单击Processing界面方框外,可以看到RISC-Vduino板载LED黄灯HelloWorld熄灭
    如图3-8所示,当单击白色矩形内时(见图3-4),Processing提示RISC-Vduino Board LED已经打开
    (见图3-5),板载LED点亮(见图3-6).


    Processing Java-[实例1-Processing画框点灯]:Processing与RISC-Vduino编程实战(既面向对象又面向过程编程)risc-v单片机中文社区(9)

    图3-4 Processing代码执行效果图



    Processing Java-[实例1-Processing画框点灯]:Processing与RISC-Vduino编程实战(既面向对象又面向过程编程)risc-v单片机中文社区(10)

    图3-5 提示灯打开



    Processing Java-[实例1-Processing画框点灯]:Processing与RISC-Vduino编程实战(既面向对象又面向过程编程)risc-v单片机中文社区(11)

    图3-6 RISC-Vduino UNO板载LED点亮


    当单击白色矩形外时,Processing提示RISC-Vduino Board LED已经关闭(见图3-7),板载LED熄灭(见图3-8).


    Processing Java-[实例1-Processing画框点灯]:Processing与RISC-Vduino编程实战(既面向对象又面向过程编程)risc-v单片机中文社区(12)

    图3-7 提示灯熄灭



    Processing Java-[实例1-Processing画框点灯]:Processing与RISC-Vduino编程实战(既面向对象又面向过程编程)risc-v单片机中文社区(13)

    图3-8 板载LED熄灭


    [实例1-Processing画框点灯]:Processing与RISC-Vduino编程实战(既面向对象又面向过程编程)演示完毕!点击此处查看演示视频










    上一篇:RISC-Vduino UNO Board+Processing串口通信
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

      离线 

    该用户从未签到

    发表于 2022-1-27 21:05:36 | 显示全部楼层
    向大佬学习 。。。
    全球首家只专注于RISC-V单片机行业应用的中文网站

      离线 

  • TA的每日心情
    奋斗
    2022-6-21 08:23
  • 签到天数: 2 天

    [LV.1]

    发表于 2022-1-28 19:37:02 | 显示全部楼层
    学习了,感谢分享   Processing Java-[实例1-Processing画框点灯]:Processing与RISC-Vduino编程实战(既面向对象又面向过程编程)risc-v单片机中文社区(14)

    点评

    面向过程的语言也称为结构化程序设计语言, 在面向过程程序设计中,问题被看作一系列需要完成的任务,函数则用于完成这些任务,解决问题的焦点集中于函数。 其概念最早由E.W.Dijikstra在1965年提出,是软件  详情 回复 发表于 2022-2-10 12:30
    全球首家只专注于RISC-V单片机行业应用的中文网站

      离线 

  • TA的每日心情

    2022-6-26 13:17
  • 签到天数: 4 天

    [LV.2]

     楼主| 发表于 2022-2-10 12:30:21 | 显示全部楼层

           面向过程的语言也称为结构化程序设计语言, 在面向过程程序设计中,问题被看作一系列需要完成的任务,函数则用于完成这些任务,解决问题的焦点集中于函数。 其概念最早由E.W.Dijikstra在1965年提出,是软件发展的一个重要里程碑。 它的主要观点是采用自顶向下、逐步求精的程序设计方法。"面向过程"(Procedure Oriented)是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。与面向对象明显的不同就是封装、继承、类。

    ---面向过程(Procedure Oriented 简称PO :如C语言)

    从名字可以看出它是注重过程的。当解决一个问题的时候,面向过程会把事情拆分成: 一个个函数和数据(用于方法的参数) 。然后按照一定的顺序,执行完这些方法(每个方法看作一个过程),等方法执行完了,事情就搞定了。

    ---面向对象(Object Oriented简称OO :如C++,JAVA等语言)

    看名字它是注重对象的。当解决一个问题的时候,面向对象会把事物抽象成对象的概念,就是说这个问题里面有哪些对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法,问题得到解决。


    用3个例子说明两者的区别

    例子一:问题: 洗衣机里面放有脏衣服,怎么洗干净?


    面向过程的解决方法

    1、执行加洗衣粉方法;

    2、执行加水方法;

    3、执行洗衣服方法;

    4、执行清洗方法;

    5、 执行烘干方法;

    以上就是将解决这个问题的过程拆成一个个方法(是没有对象去调用的),通过一个个方法的执行来解决问题。

    面向对象的解决方法

    1、我先弄出两个对象:“洗衣机”对象和“人”对象

    2、针对对象“洗衣机”加入一些属性和方法:“洗衣服方法”“清洗方法”、“烘干方法”

    3、针对对象“人”加入属性和方法:“加洗衣粉方法”、“加水方法”

    4、然后执行

    人.加洗衣粉

    人.加水

    洗衣机.洗衣服

    洗衣机.清洗

    洗衣机.烘干

    解决同一个问题 ,面向对象编程就是先抽象出对象,然后用对象执行方法的方式解决问题。
    例子二 : 打麻将例子 你 我 他


    面向过程的解决方法: 打麻将 (你,我,他)

    ---解决问题
    拆成一个动作,把数据丢进去

    面向对象的解决方法:我.打麻将(你,他) or 你.打麻将(我,他) or 他.打麻将(我,你)

    ---解决问题
    抽象出对象,对象执行动作 。



    例子三:一个网上常见的五子棋例子


    面向过程的解决方法就是首先分析问题的步骤:

    1、开始游戏,
    2、黑子先走,
    3、绘制画面,
    4、判断输赢,
    5、轮到白子,
    6、绘制画面,
    7、判断输赢,
    8、返回步骤2,
    9、输出最后结果。

    把上面每个步骤用不同的方法来实现。

    面向对象的解决方法则是从另外的思路来解决问题。

    整个五子棋可以分为
    1、黑白双方,这两方的行为是一模一样的,
    2、棋盘系统,负责绘制画面,
    3、规则系统,负责判定诸如犯规、输赢等。
    第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

    可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了多个步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。

    面向过程与面向对象的优缺点



    用面向过程的方法写出来的程序是一份蛋炒饭,而用面向对象写出来的程序是一份盖浇饭。

    蛋炒饭制作的细节不说了,最后的一道工序肯定是把米饭和鸡蛋混在一起炒匀。盖浇饭呢,则是把米饭和盖菜分别做好,你如果要一份红烧肉盖饭呢,就给你浇一份红烧肉;如果要一份青椒土豆盖浇饭,就给浇一份青椒土豆丝。

    蛋炒饭的好处就是入味均匀,吃起来香。如果恰巧你不爱吃鸡蛋,只爱吃青菜的话,那么唯一的办法就是全部倒掉,重新做一份青菜炒饭了。盖浇饭就没这么多麻烦,你只需要把上面的盖菜拨掉,更换一份盖菜就可以了。盖浇饭的缺点是入味不均,可能没有蛋炒饭那么香。

    到底是蛋炒饭好还是盖浇饭好呢?其实这类问题都很难回答,非要比个上下高低的话,就必须设定一个场景,否则只能说是各有所长。如果大家都不是美食家,没那么多讲究,那么从饭馆角度来讲的话,做盖浇饭显然比蛋炒饭更有优势,他可以组合出来任意多的组合,而且不会浪费。

    盖浇饭的好处就是‘’菜”“饭”分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是”可维护性“比较好,”饭” 和”菜”的耦合度比较低。蛋炒饭将”蛋”“饭”搅和在一起,想换”蛋”“饭”中任何一种都很困难,耦合度很高,以至于”可维护性”比较差。软件工程追求的目标之一就是可维护性,可维护性主要表现在3个方面:可理解性、可测试性和可修改性。面向对象的好处之一就是显著的改善了软件系统的可维护性。

    总结来说



    面向过程

    优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。

    缺点:没有面向对象易维护、易复用、易扩展

    面向对象

    优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护

    缺点:性能比面向过程低


    点评

    [attachimg]8231[/attachimg] 面向过程:面向处理,更多的是从计算机角度思考,注重计算每一个步骤,程序更像是一本cpu操作手册。 面向对象:以日常生活的角度思考问题的解决,更接近人的思维方式,让人可以从更高  详情 回复 发表于 2022-2-10 12:41
    全球首家只专注于RISC-V单片机行业应用的中文网站

      离线 

  • TA的每日心情

    2022-6-26 13:17
  • 签到天数: 4 天

    [LV.2]

     楼主| 发表于 2022-2-10 12:41:00 | 显示全部楼层
    本帖最后由 51MCU 于 2022-2-10 12:42 编辑
    51MCU 发表于 2022-2-10 12:30
    面向过程的语言也称为结构化程序设计语言, 在面向过程程序设计中,问题被看作一系列需要完成的任 ...

    Processing Java-[实例1-Processing画框点灯]:Processing与RISC-Vduino编程实战(既面向对象又面向过程编程)risc-v单片机中文社区(15)

    面向过程:面向处理,更多的是从计算机角度思考,注重计算每一个步骤,程序更像是一本cpu操作手册。

    面向对象:以日常生活的角度思考问题的解决,更接近人的思维方式,让人可以从更高的层面考虑系统的构建

    以你请朋友吃饭为例:
    Processing Java-[实例1-Processing画框点灯]:Processing与RISC-Vduino编程实战(既面向对象又面向过程编程)risc-v单片机中文社区(16)

    面向对象的优点

    面向对象更加适合做应用的开发 --- 面向实体性编程为主,造飞机,造轮船

    面向对象可以使你的代码更加优雅和紧凑

    面向对象开发效率更高 ---- 将功能和数据进行隔离

    面向对象代码复用度更高、可维护性更好

    面向对象是一种思维方式,它认为万事万物皆对象,程序是由多个对象协作共同完成功能的,所以



    以后我们要从面向过程转向面向对象。以面向对象的方式考虑程序的构建。


    面向对象的核心是:类和对象 [类是抽象的,在使用的时候通常会找到这个类的一个具体的存在,使用这个具体的存在。一个类可以找


    到多个对象。对象是类的行为属性和数据属性进行具体化后的实例。]

    [生活角度]

    :具有相同特征和行为的对象的集合,是一个概念

    对象:客观存在的一切事物,是类的实例

    : 汽车 超级英雄 电脑 杯子

    ​对象: 红色的宝马 美国队长 桌上的mac pro 老王的黑色杯子

    ​类就相当于制造飞机时的图纸,用它来进行创建的飞机就相当于对象

    [程序角度]

    :用户自定义的数据类型,是模板,不占用内存

    对象:由类定义的变量,占用内存



      成员属性(成员变量)  描述对象的静态特征,诸如,名字、身高体重

      成员方法  描述对象的动态特征,例如:吃饭、睡觉、打豆豆


    类和对象之间的关系:
    Processing Java-[实例1-Processing画框点灯]:Processing与RISC-Vduino编程实战(既面向对象又面向过程编程)risc-v单片机中文社区(17)


    点评

    面向对象的程序设计思想其实就是 约束全局变量(因为C语言使用了很多的全局变量来使各个功能模块之间数据共享,是模块化程序之间沟通的桥梁。因为模块化程序总是需要 “低耦合,高内聚”的编程理念来实现。)使用的  详情 回复 发表于 2022-4-24 01:18
    全球首家只专注于RISC-V单片机行业应用的中文网站

      离线 

  • TA的每日心情
    奋斗
    2024-10-29 17:08
  • 签到天数: 56 天

    [LV.5]

    发表于 2022-2-10 15:08:39 | 显示全部楼层
    非常感谢使用  RISC-Vduino UNO Board ,支持国产,支持中国芯!!!
    全球首家只专注于RISC-V单片机行业应用的中文网站

      离线 

  • TA的每日心情

    1656220668
  • 签到天数: 4 天

    发表于 2022-4-24 01:18:51 | 显示全部楼层
    51MCU 发表于 2022-2-10 12:41
    面向过程:面向处理,更多的是从计算机角度思考,注重计算每一个步骤,程序更像是一本cpu操作手册。

    面 ...

    面向对象的程序设计思想其实就是 约束全局变量(因为C语言使用了很多的全局变量来使各个功能模块之间数据共享,是模块化程序之间沟通的桥梁。因为模块化程序总是需要 “低耦合,高内聚”的编程理念来实现。)使用的一味良药,面向对象与面向过程都是一种思维方式的存在,并非孰优孰劣。
    目前软件设计的发展来看, 面向对象的程序设计思想   在大型程序的设计和把控上有更多的优势!它能够把各个抽象的个体描绘得更加的直观,这样个体之间的相互联系也就顺理成章的表达和约束。
    全球首家只专注于RISC-V单片机行业应用的中文网站
    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条


    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-11-26 08:17 , Processed in 0.446196 second(s), 62 queries .

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