在Arduino上用Java编程
1.序
2.TotoroVM使用方法
3.通过Eclipse开发Arduino程序
Eclipse是广受欢迎的程序开发环境,支持Java,C等多种程序语言,由于他优秀的插件机制和成熟的社区支撑,有着近乎无限的可能性。用惯了Eclipse的语法提示的我,对于Arduino自带的IDE实在是不能适应。通过Eclipse开发Arduino程序,自然也是要通过插件的支持,而这个插件名叫AVR Eclipse Plugin,它不但可以编写,编译Arduino程序,还支持一键烧录的功能。下面,让我们来一步一步搭建一个支持Arduino的Eclipse。
第一步,Eclipse:
去到Eclipse的官网的下载页面 http://www.eclipse.org/downloads/ 找到最新版的 Eclipse IDE for C/C++ Developper,下载需要的32/64位版本。http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/juno/SR2/eclipse-cpp-juno-SR2-win32.zip
有了Eclipse IDE for C/C++之后还可以安装一个mingw或者cygwin,两者都有gcc可以编译出windows下的执行文件,区别是mingw编译出来的文件可以直接执行,而cygwin编译出来的文件比较小,但需要有一个cygwin1.dll支持。装他们的目的是为了调试为Arduino写的C++程序(需要自己实现一些调试用的Arduino.h中的方法),以弥补Arduino芯片上难于调试程序的尴尬。
我使用的的mingw,下载安装包 http://sourceforge.net/projects/mingw/files/latest/download?source=files 安装好后,将<MingGW>\bin目录加到path中,启动Eclipse后会自动实别。然后就可以在新建C/C++项目中选择MinGW GCC,初次使用可以选择 New->C++ Project->Executable->Hello World C++ Project,在Toolchains中选择MinGW GCC,系统会自动生成一个Hello World项目,直接执行<Ctrl+F11>即可编译生成Hello World程序。
上面简单介绍了Eclipse IDE for C++的一般使用方法,接下来进入正题,开始Arduino编译之旅:
第二步,Arduino IDE
从Arduiono官网 http://arduino.cc/en/Main/Software 上下载Arduino IDE,其中包含了Arduino的编译命令avr-gcc,库文件和硬件配置信息。以供Eclipse直接使用。
第三步,AVR Eclipse Plugin
Eclipse的插件有多种安装方式,我倾向于把插件安装到Eclipse目录之外,通过link的方式调用。方法为:
解压插件包到任意目录,如: D:\eclipse_plugins\avreclipse.2.4.0.final.p2repository
到Eclipse的安装目录下新建一个links目录,在links目录中新建一个任何名称的.link文件,如avreclipse.link,编译这个文件,填入刚才的插件路径:
path=D:\\eclipse_plugins\\avreclipse.2.4.0.final.p2repository
重启Eclipse,如能在Window->Preferences菜单中看到AVR选项即说明插件安装成功。
配置插件Window->Preferences->AVR->Paths,统统指向Arduino IDE里的目录
AVR-GCC : <arduino-1.0.4>\hardware\tools\avr\bin
GNU-make : <arduino-1.0.4>\hardware\tools\avr\utils\bin
AVR Header Files : <arduino-1.0.4>\hardware\tools\avr\avr\include
AVRDude : <arduino-1.0.4>\hardware\tools\avr\bin
如图:
配置插件Window->Preferences->AVR->AVRDude,
选择Use custom config file for AVRDude,输入<arduino-1.0.4>/hardware\tools\avr\etc\avrdude.conf
在Programmer configuration中添加配置
- Programmer Hardware选择Arduino
- Override default port 填写arduino的com口,不知道可以去设备管理器中的Usb serial port上找
- Override default baudrate填写115200
如图:
配置完成!
第四步,编译静态链接库
Arduino的一些标准的库需要事先编译,以省得每个新的项目都把这些东西重要编译一遍。
新建一个C++ AVR静态库项目ArduinoCore:
- Toolchains : AVR-GCC
- Configurations : Release(Arduino没法调试)
- MCU Type : ATMega328P (我的Arduino UNO是这个芯片)
- MCU Frequency : 16000000
Finish
导入静态库通用源码:在ArduinoCore项目上右键->Import->File System
- From Directory : <arduino-1.0.4>\hardware\arduino\cores\arduino
钩选所有文件,Finish
导入静态库型号源码:在ArduinoCore项目上右键->Import->File System
- From Directory : <arduino-1.0.4>hardware\arduino\variants\standard\pins_arduino.h (Arduino UNO的型号)
钩选,Finish
设置编译参数:在ArduinoCore项目上右键->Preferences->C/C++ Build->Settings
- AVR Compiler -> Directories : "${workspace_loc:/${ProjName}}" (引入ArduinoCore自己)
- AVR Compiler -> Optimization -> Other Optimize Flags -ffunction-sections -fdata-sections
* 这两个参数是告诉编译器把程序中的代码段和数据库都分散保存,这样以后编译时就有可能只包含用到的方法和数据,给执行文件减肥
- AVR C++ Compiler -> Directories : "${workspace_loc:/${ProjName}}"
- AVR C++ Compiler -> Optimization -> Other Optimize Flags -ffunction-sections -fdata-sections
Finish
编译项目 Project->Build Project。成功后会生成一个静态文件libArduinoCore.a并出现如下信息:
第五步,编写Arduino程序
准备就绪,可以编写自己的项目了。
新建一个C++ AVR应用项目 ArduinoDemo:
- Toolchains : AVR-GCC
- Configurations : Release
- MTU Type : ATMega328P
- MTU Frequency : 16000000
Finish
配置编译参数
- AVR Compiler -> Directories : "${workspace_loc:/ArduinoCore}" (引入ArduinoCore)
- AVR Compiler -> Optimization -> Other Optimize Flags -ffunction-sections -fdata-sections
- AVR C++ Compiler -> Directories : "${workspace_loc:/ArduinoCore}"
- AVR C++ Compiler -> Optimization -> Other Optimize Flags -ffunction-sections -fdata-sections
- AVR C++ Linker -> General -> Other Arguments -Wl,--gc-sections
* 配合之前的 -ffunction-sections -fdata-sections,编译时过滤未用到的方法和数据
- AVR C++ Linker -> Libraries -> Libraries ArduinoCore (libArduinoCore.a,去除lib和.a)
- AVR C++ Linker -> Libraries -> Libraries Path "${workspace_loc:/ArduinoCore/Release}"
完成,下面可以写程序了,我们以arduino标准的demo程序Blink为例,新建一个新的cpp文件blink.cpp:
/* Blink Turns on an LED on for one second, then off for one second, repeatedly. *复制自arduino示例 This example code is in the public domain. */ // Pin 13 has an LED connected on most Arduino boards. // give it a name: int led = 13; // the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); } // the loop routine runs over and over again forever: void loop() { digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(led, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second } /* main方法 */ int main(void) { /* Must call init for arduino to work properly */ init(); setup(); for (;;) { loop(); } }
*arduino代码和c++代码的唯一区别就是arduino会自动生成main方法,依次调用init(), setup()和loop()方法,我们需要自己添加它。
编译项目 Project->Build Project。成功后会会打印程序的大小,用户需要自行确保程序小于arduino的flash空间大小32K
烧录程序:
把arduino连接到电脑的USB口
右键点击项目 Properties->AVR->AVRDude,在Programmer Configuration中选取之前设置过的Arduino,关闭。
选择菜单AVR->Upload Project to Target Device或者按工具栏上的AVR图标
完工,在Arduino上测试我们的程序吧!
相关推荐
Sloeber,用于Eclipse的Arduino IDE Eclipse IDE(集成开发环境)是功能齐全的编程编辑器,具有许多出色的功能,可帮助您更快速,更轻松地进行编码。 Arduino IDE的功能非常强大–但是在编写,浏览和理解您(以及...
该程序专为我设计并安装在旧公寓天花板上的灯而设计。 它由 16 个 3 英尺长的 12V RGB LED 灯条组成。 每个条带通过将 Arduino 连接到一组 4 个 TLC5940 芯片来单独控制,每个通道由一个晶体管和一个外部 12V 电源...
蓝牙RFCOMM(正在开发中,将在v1.0上受支持) 在Linux Mint 18上测试。 依存关系: jSSC,用于com支持驱动程序-https: 将库导入其他项目 单机版 下载jSSC和。 将此库导入到Eclipse Build Path项目中。 玛文 如果...
这是一个旨在开发由基于Android或Java的客户端控制的自动饮料搅拌机的项目。 Arduino相关代码在/ Arduino中。 Arduino / State_Machine.ino是用于控制和测量流体流量的Arduino。 Arduino / led_machine.ino是控制...
物联网梯形图编辑器 该项目是...如何执行源代码从Oracle安装Java 8(JDK) 下载Eclipse IDE,解压缩并执行在Eclipse IDE上导入项目,请阅读以执行此操作在项目上,用鼠标右键单击并选择“运行方式”>“ Java应用程序”
RobotBTRCControllerV1 包含必须在 PC 上运行才能向 Arduno 发送命令的程序的 Eclipse 项目文件。 RobotResponder 包含 ArduinoControl.ino 文件,该文件必须在 Arduino IDE 中打开并上传 Arduino。
固件-Java-GUI 标准的 Firamata GUI 界面。 使用 Eclipse、JDK 1.7.0_51 和 SerialRxTX x64 库(来自 mfizz)制作。... 测试: Arduino UNO Arduino Mega ADK Arduino Mega 2560 使用 StandardFirmata.ino 示例
BumperBotAndroid 该项目控制由BTW Robotics开发的BumperBot。 #图片 机器人的一些图片。... 要使用此应用程序,请克隆/下载存储库并将其导入Eclipse。 您也可以在此处直接下载该应用程序的最新版本:。
草坪割草机Bot2 机器人割草机项目 现状-150516 ... lawn3_arduino:(ArdunioMegaADK软件控制电机控制器通过USB与Android手机通信) 应该可以 去做: 添加线传感器并更新软件以进行自主操作 (很多改进)
嵌入式系统设计与实践指导首手册,内容包括两部分,arduino部分包括安装平台和基本程序编程实验指导,Android部分包括平台安装和基于eclipse的可视化界面设计简单APP的教程
该库使扫描程序处于异步模式和多线程状态,并且可以使数据解析器在内存中(来自字符串) 创建此库的主要目的是在Arduino IDE自动完成系统中使用。建造使用maven进行构建,生成的jar包含必要的依赖项mvn包我相信这是...
软件开发:为该项目开发了3个软件集合。 第一个是驻留在android文件夹中的android手机的Java代码。 该代码旨在使用Eclipse IDE中的android SDK包进行编译并上传到手机。 此代码包含一个多线程android应用程序,该...
用于在 Android 上与 Arduinos 和其他 USB 串行设备交谈的库,使用 USB 主机模式和 Android 3.1+ 主页: : 关于 该项目为 USB 串行设备提供了一个 Android 用户空间驱动程序。 您可以使用它与您的 Arduino 或任何...
ThingML方法由以下各项组成: i )建模语言, ii )一组工具,以及iii )方法。 建模语言结合了久经考验的软件建模结构,用于分布式React系统的设计和实现: 通过异步消息传递进行通信的状态图和...在eclipse上安装T