Arduino 类初始化执行
Arduino class initialization execution
我正在尝试为UNO板编写一个简单的固件,该板能够在按下按钮时切换LCD(16x2(显示器的内容。我尝试使用类和标头编写它,以便我可以更轻松地向代码添加更多按钮。问题是我的类初始化方法在while(1)
循环之外不起作用,如下所示。
这根本不起作用:
main.ino
#include "button.h"
#include <avr/io.h>
#include <util/delay.h>
#include <LiquidCrystal.h>
//Buttons PORTX register
#define buttonPortx PORTD
//Buttons DDRx register
#define buttonDdrx DDRD
//Buttons PINx register
#define buttonPinx PIND
//Buttons pins definition
#define B0 PD2
#define B1 PD3
#define B2 PD4
#define B3 PD5
//LCD pins definition
#define RS A5
#define EN A4
#define D4 A3
#define D5 A2
#define D6 A1
#define D7 A0
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);
Button button1 = Button();
int main()
{
buttonDdrx = (0 << B0) | (0 << B1) | (0 << B2) | (0 << B3);
buttonPortx = (1 << B0) | (1 << B1) | (1 << B2) | (1 << B3);
//My initialization method:
button1.Initialize(buttonPinx, B0);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(5,0);
lcd.print("Hello!");
while (1)
{
if (button1.IsReleased())
{
lcd.clear();
lcd.setCursor(4,0);
lcd.print("Pressed!");
while (1);
}
_delay_ms(50);
}
}
但是这个效果很好:
main.ino
#include "button.h"
#include <avr/io.h>
#include <util/delay.h>
#include <LiquidCrystal.h>
//Buttons PORTX register
#define buttonPortx PORTD
//Buttons DDRx register
#define buttonDdrx DDRD
//Buttons PINx register
#define buttonPinx PIND
//Buttons pins definition
#define B0 PD2
#define B1 PD3
#define B2 PD4
#define B3 PD5
//LCD pins definition
#define RS A5
#define EN A4
#define D4 A3
#define D5 A2
#define D6 A1
#define D7 A0
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);
Button button1 = Button();
int main()
{
buttonDdrx = (0 << B0) | (0 << B1) | (0 << B2) | (0 << B3);
buttonPortx = (1 << B0) | (1 << B1) | (1 << B2) | (1 << B3);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(5,0);
lcd.print("Hello!");
while (1)
{
//My initialization method:
button1.Initialize(buttonPinx, B0);
if (button1.IsReleased())
{
lcd.clear();
lcd.setCursor(4,0);
lcd.print("Pressed!");
while (1);
}
_delay_ms(50);
}
}
还有我的头文件/cpp 文件:
按钮.h
#ifndef Button_h
#define Button_h
class Button
{
public:
Button();
void Initialize(int port, int pin);
bool IsReleased();
private:
bool pressed = false;
int _port;
int _pin;
};
#endif
按钮.cpp
#include "button.h"
Button::Button()
{
}
void Button::Initialize(int port, int pin)
{
_port = port;
_pin = pin;
}
bool Button::IsReleased()
{
if (!(_port & (1 << _pin)) && (pressed == false))
{
pressed = true;
}
if ((_port & (1 << _pin)) && (pressed == true))
{
pressed = false;
return true;
}
return false;
}
我正在使用带有参数C++类构造函数来设置_port
和_pin
值,但是在查看此论坛帖子后,我创建了Initialize(int port, int pin)
方法,但仍然无法解决问题。
任何帮助将不胜感激!
你的 _ port
变量是简单的 int。它不会从真实的PINx
寄存器中获得任何东西。它至少应该是到字节的易失性指针(并取消引用(。
相关文章:
- 在C/C++中执行"_dl_init"(程序初始化)是单线程的吗
- make_shared是否对每个成员变量执行默认初始化(零初始化)
- Arduino 类初始化执行
- Visual Studio 2010 是否执行零初始化
- 执行输入检查并在C++中初始化对象
- 使用构造函数的可变参数中的其他模板化类执行模板化类的初始化
- 通过写入全局llvm的地址从执行引擎外部初始化全局llvm值有效吗
- 在构造函数中的成员初始化之前执行必要的工作
- G++ 在执行复制初始化时找不到正确的复制构造函数
- 如何在执行加载库时初始化 CRT( "*.exe" )
- 为什么此处不对引用初始化执行复制初始化?
- 为什么 std::atomic 初始化不执行原子释放,以便其他线程可以看到初始化的值?
- std::make_shared是否执行值初始化(GCC和clang不同意)
- Clang静态分析-根据执行流检查可为空的变量初始化
- c++符号分析:如何确定执行了哪些静态初始化
- 代码是否被视为可移植可执行文件格式中的初始化数据,初始化数据和单元化数据之间的确切区别是什么
- C++,是由多个线程执行的静态初始化
- 在引导过程中,在驱动程序初始化后执行操作
- 是在构造函数初始值设定项列表执行之前初始化的成员值
- 执行 std::元组和 std::p air 支持聚合初始化