c - Arduino StackArray 不是全局的

标签 c arduino stack

我正在编写一个项目,在该项目中读取一个字节的串行数据,将其转换为二进制,然后将其打印到串行。目前,我正在使用堆栈来存储二进制文件。但是,当我将二进制数插入堆栈时,它们似乎是在我调用 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/

相关文章:

assembly - 在 Extern 8086 程序中写入堆栈无效,通过 MOV [BP] ,AL

c++ - 检查堆栈

c++ - 从通过 CreateRemoteThread 创建的线程调用函数

c - 使用 GLFW 和 XCode : won't compile 时出现问题

c++ - 如何在 Arduino 的函数中定义全局数组的长度?

c - 使用UART arduino接收数据数组

c - 为什么堆栈粉碎仅在我的矩阵程序中与列索引一起发生?

c - 如何编写宏以返回逗号和整数或什么都不返回

c - 为什么命令\n 跳线时不按顺序排列?

arduino - 使用 Arduino Wifi 客户端发送可靠的 HTTP 请求