【问题标题】:Arduino StackArray not globalArduino StackArray 不是全球性的
【发布时间】:2016-06-20 13:41:54
【问题描述】:

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


【解决方案1】:

我已经解决了这个问题。为了将它作为引用变量传递,我需要在前面添加一个 & 号,以通知 C 它实际上是一个引用变量。

【讨论】:

  • 你能把例子贴出来吗?
猜你喜欢
  • 1970-01-01
  • 2011-03-26
  • 2011-09-21
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
  • 1970-01-01
相关资源
最近更新 更多