Arduino面向对象
/*面向对象*/
class Led{
public:
Led(); //构造函数(对象建立时马上执行)
~Led(); //析构函数 (对象删除前马上执行)
void on();
void off();
};
Led::Led(){
Serial.println("Led对象创建");
pinMode(A2, OUTPUT);
}
Led::~Led(){
Serial.println("Led对象已被删除了");
}
void Led::on(){
Serial.println("Led点亮了");
digitalWrite(A2, HIGH);
}
void Led::off(){
Serial.println("Led熄灭了");
digitalWrite(A2, LOW);
}
void setup() {
Serial.begin(9600);
Led myled;
Serial.println("Hello, this is from Setup()");
for (int i=0; i<3; i++)
{
myled.on();
delay(1000);
myled.off();
delay(1000);
}
}
void loop() {
}
1根线(正极)连接A2引脚,一根线(负极)连接GND,正极上再连接一个电阻防止led烧坏
16:46:26.050 -> Led对象创建
16:46:26.050 -> Hello, this is from Setup()
16:46:26.083 -> Led点亮了
16:46:27.035 -> Led熄灭了
16:46:28.057 -> Led点亮了
16:46:29.049 -> Led熄灭了
16:46:30.042 -> Led点亮了
16:46:31.030 -> Led熄灭了
16:46:32.053 -> Led对象已被删除了
/*面向对象*/
class Led{
public:
Led(); //构造函数(对象建立时马上执行)
Led(int userLedPin);
~Led(); //析构函数 (对象删除前马上执行)
void on();
void off();
int ledPin = 16; //16是A2引脚
};
Led::Led(){
Serial.println("Led对象创建");
pinMode(16, OUTPUT);
}
Led::Led(int userLedPin){
Serial.println("传参数的Led对象创建");
ledPin = userLedPin;
pinMode(ledPin, OUTPUT);
}
Led::~Led(){
Serial.println("Led对象已被删除了");
}
void Led::on(){
Serial.print(ledPin);
Serial.println("引脚的Led点亮了" );
digitalWrite(ledPin, HIGH);
}
void Led::off(){
Serial.print(ledPin);
Serial.println("引脚的Led熄灭了");
digitalWrite(ledPin, LOW);
}
void setup() {
Serial.begin(9600);
Led myled;
Led myled2(17); // 17是A3引脚
Serial.println("Hello, this is from Setup()");
for (int i=0; i<3; i++)
{
myled.on();
myled2.on();
delay(1000);
myled.off();
myled2.off();
delay(1000);
}
}
void loop() {
}
17:35:22.568 -> Led对象创建
17:35:22.568 -> 传参数的Led对象创建
17:35:22.615 -> Hello, this is from Setup()
17:35:22.615 -> 16引脚的Led点亮了
17:35:22.709 -> 17引脚的Led点亮了
17:35:23.618 -> 16引脚的Led熄灭了
17:35:23.618 -> 17引脚的Led熄灭了
17:35:24.618 -> 16引脚的Led点亮了
17:35:24.618 -> 17引脚的Led点亮了
17:35:25.640 -> 16引脚的Led熄灭了
17:35:25.640 -> 17引脚的Led熄灭了
17:35:26.619 -> 16引脚的Led点亮了
17:35:26.619 -> 17引脚的Led点亮了
17:35:27.633 -> 16引脚的Led熄灭了
17:35:27.633 -> 17引脚的Led熄灭了
17:35:28.616 -> Led对象已被删除了
17:35:28.616 -> Led对象已被删除了
/*面向对象*/
class Led{
public:
Led(); //构造函数(对象建立时马上执行)
Led(int userLedPin);
~Led(); //析构函数 (对象删除前马上执行)
void on();
void off();
int getLedPin();
void setLedPin(int userLedPin);
private:
int ledPin = 16; //16是A2引脚
};
Led::Led(){
Serial.println("Led对象创建");
pinMode(16, OUTPUT);
}
Led::Led(int userLedPin){
Serial.println("传参数的Led对象创建");
ledPin = userLedPin;
pinMode(ledPin, OUTPUT);
}
Led::~Led(){
Serial.println("Led对象已被删除了");
}
void Led::on(){
Serial.print(ledPin);
Serial.println("引脚的Led点亮了" );
digitalWrite(ledPin, HIGH);
}
void Led::off(){
Serial.print(ledPin);
Serial.println("引脚的Led熄灭了");
digitalWrite(ledPin, LOW);
}
int Led::getLedPin(){
return ledPin;
}
void Led::setLedPin(int userLedPin){
ledPin = userLedPin;
pinMode(ledPin, OUTPUT);
}
void setup() {
Serial.begin(9600);
Led myled;
myled.setLedPin(18); // 18是A4引脚
int myLedPin = myled.getLedPin();
Serial.print("int myLedPin = ");
Serial.println(myLedPin);
Led myled2(17); // 17是A3引脚
int myLed2Pin = myled2.getLedPin();
Serial.print("int myLed2Pin = ");
Serial.println(myLed2Pin);
Serial.println("Hello, this is from Setup()");
for (int i=0; i<3; i++)
{
myled.on();
myled2.on();
delay(1000);
myled.off();
myled2.off();
delay(1000);
}
}
void loop() {
}
19:29:52.348 -> Led对象创建
19:29:52.348 -> int myLedPin = 18
19:29:52.382 -> 传参数的Led对象创建
19:29:52.415 -> int myLed2Pin = 17
19:29:52.415 -> Hello, this is from Setup()
19:29:52.448 -> 18引脚的Led点亮了
19:29:52.481 -> 17引脚的Led点亮了
19:29:53.431 -> 18引脚的Led熄灭了
19:29:53.431 -> 17引脚的Led熄灭了
19:29:54.445 -> 18引脚的Led点亮了
19:29:54.445 -> 17引脚的Led点亮了
19:29:55.428 -> 18引脚的Led熄灭了
19:29:55.428 -> 17引脚的Led熄灭了
19:29:56.445 -> 18引脚的Led点亮了
19:29:56.445 -> 17引脚的Led点亮了
19:29:57.431 -> 18引脚的Led熄灭了
19:29:57.431 -> 17引脚的Led熄灭了
19:29:58.453 -> Led对象已被删除了
19:29:58.453 -> Led对象已被删除了
4.h头文件和cpp文件
led.ino
# include "Led.h"
void setup() {
Serial.begin(9600);
Led myled;
myled.setLedPin(18); // 18是A4引脚
int myLedPin = myled.getLedPin();
Serial.print("int myLedPin = ");
Serial.println(myLedPin);
Led myled2(17); // 17是A3引脚
int myLed2Pin = myled2.getLedPin();
Serial.print("int myLed2Pin = ");
Serial.println(myLed2Pin);
Serial.println("Hello, this is from Setup()");
for (int i=0; i<3; i++)
{
myled.on();
myled2.on();
delay(1000);
myled.off();
myled2.off();
delay(1000);
}
}
void loop() {
}
Led.cpp
#include "Led.h"
Led::Led(){
Serial.println("Led对象创建");
pinMode(16, OUTPUT);
}
Led::Led(int userLedPin){
Serial.println("传参数的Led对象创建");
ledPin = userLedPin;
pinMode(ledPin, OUTPUT);
}
Led::~Led(){
Serial.println("Led对象已被删除了");
}
void Led::on(){
Serial.print(ledPin);
Serial.println("引脚的Led点亮了" );
digitalWrite(ledPin, HIGH);
}
void Led::off(){
Serial.print(ledPin);
Serial.println("引脚的Led熄灭了");
digitalWrite(ledPin, LOW);
}
int Led::getLedPin(){
return ledPin;
}
void Led::setLedPin(int userLedPin){
ledPin = userLedPin;
pinMode(ledPin, OUTPUT);
}
Led.h
#ifndef _LED_H_ //如果没用定义(防止多次编译),如果是#ifdef如果用定义了
#define _LED_H_
#include<Arduino.h>
class Led{
public:
Led(); //构造函数(对象建立时马上执行)
Led(int userLedPin);
~Led(); //析构函数 (对象删除前马上执行)
void on();
void off();
int getLedPin();
void setLedPin(int userLedPin);
private:
int ledPin = 16; //16是A2引脚
};
#endif
5.类的继承
led.ino
# include "Led.h"
PwmLed myPwmLed;
void setup() {
Serial.begin(9600);
myPwmLed.setLedPin(3); //D3引脚
int myPwmLedPin = myPwmLed.getLedPin();
Serial.print("int myPwmLedPin=") ;
Serial.println(myPwmLedPin);
}
void loop() {
for(int i = 0; i < 255; i++){
myPwmLed.on(i);
Serial.print("myPwmLed.getLedPin()=");
Serial.println(myPwmLed.getLedPin());
delay(10);
}
// myPwmLed.on() 错误写法,子类里面只有带参数的函数,必须加参数
}
Led.cpp
#include "Led.h"
Led::Led(){
Serial.println("Led对象创建");
pinMode(16, OUTPUT);
}
Led::Led(int userLedPin){
Serial.println("传参数的Led对象创建");
ledPin = userLedPin;
pinMode(ledPin, OUTPUT);
}
Led::~Led(){
Serial.println("Led对象已被删除了");
}
void Led::on(){
Serial.print(ledPin);
Serial.println("引脚的Led点亮了" );
digitalWrite(ledPin, HIGH);
}
void Led::off(){
Serial.print(ledPin);
Serial.println("引脚的Led熄灭了");
digitalWrite(ledPin, LOW);
}
int Led::getLedPin(){
return ledPin;
}
void Led::setLedPin(int userLedPin){
ledPin = userLedPin;
pinMode(ledPin, OUTPUT);
}
void PwmLed::on(int userPwmVal){
pwmVal = userPwmVal;
analogWrite(getLedPin(), pwmVal);
}
int PwmLed::getPwmVal(){
return pwmVal;
}
Led.h
#ifndef _LED_H_ //如果没用定义(防止多次编译),如果是#ifdef如果用定义了
#define _LED_H_
#include<Arduino.h>
class Led{
public:
Led(); //构造函数(对象建立时马上执行)
Led(int userLedPin);
~Led(); //析构函数 (对象删除前马上执行)
void on();
void off();
int getLedPin();
void setLedPin(int userLedPin);
private:
int ledPin = 16; //16是A2引脚
};
/*继承父类*/
class PwmLed : public Led{
public:
void on(int userPwmVal);
int getPwmVal();
private:
int pwmVal = 0;
};
#endif
16:36:56.688 -> myPwmLed.getLedPin()=3
1.首先在Arduino\librarie新建一个文件夹比如yys_led
2.把.cpp和.h文件放入yys_led文件夹
C:\Users\yys53\Documents\Arduino\libraries\yys_led\Led.cpp
C:\Users\yys53\Documents\Arduino\libraries\yys_led\Led.h
3.在yys_led新建一个examples文件夹,
4.再examples新建一个文件夹比如yys_led
5.把.ino放进取,文件名必须和文件夹命一样
"C:\Users\yys53\Documents\Arduino\libraries\yys_led\examples\yys_led\yys_led.ino"
6.打开arduino,打开example,往下拉可以看到自己项目了
7.设置高亮关键字,再C:\Users\yys53\Documents\Arduino\libraries\yys_led下新建keywords.txt
C:\Users\yys53\Documents\Arduino\libraries\yys_led\keywords.txt
#######################################
# 数据类型/Datatypes (KEYWORD1)
#######################################
Led KEYWORD1
PwmLed KEYWORD1
#######################################
# 函数/Functions (KEYWORD2)
#######################################
on KEYWORD2
off KEYWORD2
getLedPin KEYWORD2
setLedPin KEYWORD2
#######################################
# 其它关键字测试演示
#######################################
testKEYWORD1 KEYWORD1
testKEYWORD2 KEYWORD2
testKEYWORD3 KEYWORD3
testLITERAL1 LITERAL1
testLITERAL2 LITERAL2
testRESERVED_WORD RESERVED_WORD
testRESERVED_WORD_2 RESERVED_WORD_2
testDATA_TYPE DATA_TYPE
testPREPROCESSOR PREPROCESSOR
本文作者: 永生
本文链接: https://yys.zone/detail/?id=184
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
评论列表 (0 条评论)