首页 > 解决方案 > 无法通过循环更新数据

问题描述

我目前正在使用 Arduino 开发 EEG 系统。该系统的目的是使振动器振动 0.1 秒,等待 0.5 秒,然后再次振动 0.1 秒。但是从一开始我希望它从一开始每 0.1 秒读取一次 EEG (Serial.println(brain.readCSV()); Serial.println(brain.readErrors());)。

问题是它只需要一个样本并且在整个过程中重复它直到它循环,而不是通过循环不断更新。

我怎样才能让它在整个系统运行时连续读取新数据。

#include "Brain.h"
#include <SPI.h>
#include <Wire.h>

int n=0;
int m=0;

// Set up the brain parser, pass it the hardware serial object you want to listen on.
Brain brain(Serial);
int vib = 5;

void setup() {
    // Start the hardware serial.
    Serial.begin(9600);
    pinMode(vib, OUTPUT);
}

void loop() {
    // Expect packets about once per second.
    // The .readCSV() function returns a string (well, char*) listing the most recent brain data, in the following format:
    // "signal strength, attention, meditation, delta, theta, low alpha, high alpha, low beta, high beta, low gamma, high gamma" 
    if (brain.update()) {
        Serial.println(brain.readCSV());
        Serial.println(brain.readErrors());

        if(brain.readSignalQuality() == 0) {     
            // Vibrate
            digitalWrite(vib,HIGH);
            Serial.println(brain.readCSV());
            Serial.println(brain.readErrors());
            delay(100);
            while (n<500){
                n=n+100;
                digitalWrite(vib,LOW);
                Serial.println(brain.readCSV());
                Serial.println(brain.readErrors());
                Serial.println(n);
                delay(100);
            }
            digitalWrite(vib,HIGH);
            Serial.println(brain.readCSV());
            Serial.println(brain.readErrors());
            delay(100);
            while (m<10000){
                m=m+100;
                digitalWrite(vib,LOW);
                Serial.println(brain.readCSV());

                Serial.println(brain.readErrors());
                Serial.println(m);
                delay(100);
            }
            n=0;
            m=0;
        }
    }
}

标签: c++arduino

解决方案


正如 Delta_G 在评论中所说,每次需要新数据时都需要调用 Brain.update()。查看Brain.cpp的源代码,请注意“readErrors”仅返回一个仅在您运行 update() 后才会更改的变量(并且 readCSV 对一组也在 update() 中更新的变量运行 sprintf)。这意味着 readErrors 和 readCSV 实际上并没有提取新数据。


推荐阅读