Не удается обновить данные через цикл - PullRequest
0 голосов
/ 04 августа 2020

В настоящее время я работаю над системой ЭЭГ с использованием Arduino. Система предназначена для того, чтобы вибрировать вибратор в течение 0,1 секунды, подождать 0,5 секунды, а затем снова вибрировать в течение 0,1 секунды. Однако с самого начала я хочу, чтобы он считывал ЭЭГ (Serial.println (brain.readCSV ()); Serial.println (brain.readErrors ());) каждые 0,1 секунды с начала.

проблема в том, что он берет только один образец и просто повторяет его на протяжении всего процесса до тех пор, пока он не зациклится, вместо того, чтобы постоянно обновлять через l oop.

Как я могу заставить его непрерывно читать новые данные, пока все система работает.

#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;
        }
    }
}

1 Ответ

0 голосов
/ 04 августа 2020

Как Delta_G говорит в комментариях, вам нужно вызывать brain.update () каждый раз, когда вам нужны новые данные. Глядя на исходный код для Brain. cpp, обратите внимание, что readErrors просто возвращает переменную, которая изменяется только после запуска update () (а readCSV запускает sprintf для группы переменных, которые также обновляются. в update ()). Это означает, что readErrors и readCSV на самом деле не извлекают новые данные.

...