我正在编写一个项目,在该项目中读取一个字节的串行数据,将其转换为二进制,然后将其打印到串行。目前,我正在使用堆栈来存储二进制文件。但是,当我将二进制数插入堆栈时,它们似乎是在我调用 push() 的方法中插入的,但我无法从该方法外部的数组中弹出整数,因为没有要弹出的元素。为什么,有什么方法可以解决这个问题。我认为堆栈是引用变量。
void convertToBinary(byte number, StackArray<int> binaryList){
while(number > 0){
int rem = number % 2;
binaryList.push(rem);
number /= 2;
}
}
这看起来似乎很好。但是,当我尝试用另一种传递要弹出的堆栈的方法来弹出它时,没有任何元素可以弹出。
void printToLED(StackArray<int> list){
//digitalWrite(ledPin, HIGH);
while(!list.isEmpty()){
int ledState = list.pop();
//Serial.println(ledState);
if(ledState == 1){
digitalWrite(ledPin, HIGH);
}
else{
digitalWrite(ledPin, LOW);
}
delay(1000);
transitionFlash();
}
}
由于在设置中我将串行指定为堆栈打印机,因此当我尝试从堆栈中弹出元素时,它会向我显示此消息。
STACK: can't pop item from stack: stack is empty.
编辑(完整示例):
#include <StackArray.h>
StackArray<int> binary;
int ledPin = 13;
byte data = 0;
void setup() {
Serial.begin(9600);
binary.setPrinter(Serial);
pinMode(ledPin, OUTPUT);
}
void transitionFlash(){
for(int i = 0; i < 20; i++){
digitalWrite(ledPin, LOW);
delay(50);
digitalWrite(ledPin, HIGH);
delay(50);
}
}
void convertToBinary(byte number, StackArray<int> binaryList){
while(number > 0){
int rem = number % 2;
binaryList.push(rem);
number /= 2;
}
}
void printToLED(StackArray<int> list){
while(!list.isEmpty()){
int ledState = list.pop();
if(ledState == 1){
digitalWrite(ledPin, HIGH);
}
else{
digitalWrite(ledPin, LOW);
}
delay(1000);
transitionFlash();
}
}
void blink(int times, int duration){
for(int i = 0; i < times; i++){
digitalWrite(ledPin, HIGH);
delay(duration);
digitalWrite(ledPin, LOW);
delay(duration);
}
}
void loop() {
while(Serial.available()){
data = Serial.read();
convertToBinary(data, binary);
printToLED(binary);
blink(10, 500);
}
}
最佳答案
我已经解决了这个问题。为了将它作为引用变量传递,我需要在前面添加一个&符号,以通知C它实际上是一个引用变量。
关于c - Arduino StackArray 不是全局的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35836413/