如何创建Arduino库?

时间:2015-07-24 13:13:57

标签: arduino

我需要一个简单的Arduino库示例。

我读到了这个:https://www.arduino.cc/en/Hacking/LibraryTutorial

这对我来说有点复杂 - 我从代码示例中了解得更清楚。

我需要为Arduino构建一个库。在库内部,我需要有2个函数,每个函数接收3个字符串值。然后该函数需要将值连接到一个大字符串并发送使用Serial.println(the new value);

创建的值

我只需要进行演示。所以,这些价值观对我来说并不重要。这样我才能从中学习。我希望以这种方式使用它。

className.Function1("val1", "val2", val3");
className.Function2("val1", "val2", val3");

文件应该有什么扩展名(.h .cpp)?当然我试图使用Arduino的库,但它们非常复杂。

如果有人有例子,我相信它会帮助我理解。

1 个答案:

答案 0 :(得分:6)

如果您想要的只是一些功能,则不需要课程,但是如果您想学习该方法,我可以指出您正确的方向。

这是一个简单的库。我们称之为var React = require('react'); var Route = require('react-router').Route var Counter = require('./flashCard.js'); var App = require('./main.js') var Demo = require('./demo.js') var routes = ( <Route name="home" handler={App}> <Route path="/" handler={Counter}/> <Route path="/demo" name ="demo" handler={Demo}/> </Route> ); module.exports = routes;

在此示例中,我们将使用库重新创建blink example(包含在IDE中)。这显然比示例使用的工作更多,但是比较两者应该可以让您更容易理解。

LED.h

var express = require('express');
var http = require('http');
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
require('node-jsx').install();
var db = require('./models/schema.js');
var mongoose = require('mongoose');
var app = express();
var React = require('react');
var RouterModule = require('react-router')
var routes = require('./components/routes.js')
var posts = require('./routes/index.js');

//database
db.connectDB().then(function(){
            console.log('connected');
          }, function(err){
            console.log('error');
          });
//database

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(favicon());
app.use(logger('dev'));
app.use( bodyParser.json() );       // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({     // to support URL-encoded bodies
    extended: true
}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));


app.use('/posts', posts);

//server side rendering code
    app.use(function(req, res) {
      RouterModule.run(routes, req.path, function(Handler) {
        var Html = React.createElement(Handler);
        res.send(React.renderToString((Html)));
      });
    });

标题包含所谓的包含警卫,并在此处进行说明:Why are #ifndef and #define used in C++ header files?

LED.cpp

LED

如果要在库中使用任何Arduino API,则需要包含#ifndef LED_h //Prevents header contents from being added twice. #define LED_h class LED{ public: void begin( char PinToUse ); void on(); void off(); private: char pin; }; #endif 。当我在 .cpp 文件中使用#include "Arduino.h" #include "LED.h" void LED::begin( char PinToUse ){ // LED:: indicates the function belongs to the LED class, and isn't a global function. pin = PinToUse; pinMode( pin, OUTPUT ); } void LED::on(){ digitalWrite( pin, HIGH ); } void LED::off(){ digitalWrite( pin, LOW ); } 时,我需要在此示例中包含它。如果您在标题中使用API​​,则需要将其包含在那里。

草图

Arduino.h

如您所见,库被分为声明(.h)和定义(.cpp)。 sketch和.cpp文件都包含库头(.h)。

当他们想在自己的代码中使用像SPI类这样的另一个库时,会发生一些引发很多人的事情。不幸的是,IDE的设计方式要求草图也包括内部使用的库,无论草图是否直接使用它。有一个更深入的解释here

分享您的作品

图书馆完成后,您可以在Arduino论坛中发布图书馆。确保您有一些工作示例,以增加人们尝试工作的机会。这里有一个很好的图书馆位置:Other Software Development

如果您对GitHub(Intro)感到满意,您甚至可以将您的库直接添加到IDE库管理器,这样人们只需单击安装即可使用它。访问1.5 Library specification以查看添加要求。