我需要一个简单的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的库,但它们非常复杂。
如果有人有例子,我相信它会帮助我理解。
答案 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中)。这显然比示例使用的工作更多,但是比较两者应该可以让您更容易理解。
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
如果要在库中使用任何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以查看添加要求。