2013-07-22 3 views
0

Я построил эскиз arduino, который пытается сделать пару разных длин окна и некоторые простые вычисления (среднее/дисперсия) по аналоговым значениям от пары датчиков. Раньше у меня был один и тот же код для 1 датчика, работающего по назначению, но приведенный ниже код был расширен с небольшим количеством циклов, чтобы все теперь работало для обоих датчиков.arduino ничего не печатает на серийный

Я просто ничего не могу получить для печати на серийный номер - даже два последовательных отпечатка, которые я установил и начал цикл, просто для отладки, но код компилируется и загружается без каких-либо ошибок или предупреждений.

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

long int currentTime = 0; 
long int stopTime[2] = {0,0}; 
long int shortWindowTime = 0; 
int shortVal[2][40]; 
int reflexWindowStart = 0; 
int reflexWindowTime = 0; 
int reflexVal[2][500]; 
int mean[2] = {0,0}; 
unsigned int variance[2] = {0,0}; 
int lowVal[2] = {0,0}; 
int peakVal[2] = {0,0}; 
int lowIndex[2] = {0,0}; 
int peakIndex[2] = {0,0}; 
int stopIndex[2] = {0,0}; 
boolean stopped[2] = {false,false}; 

void setup(){ 
    Serial.begin(9600); 
    Serial.println("wtf?"); 
    for(int i=0;i<2;i++){ 
    for(int j=0;j<40;j++){ 
     shortVal[i][j] = 0; 
    } 
    for(int j=0;j<500;j++){ 
     reflexVal[i][j] = 1023; 
    } 
    } 

} 

void loop() { 

    Serial.println("wtf?"); 

    currentTime = micros(); 

    if(currentTime - shortWindowTime > 500){ 

    shortWindowTime = currentTime; 

    writeShortWindow(); 

    meanVariance(); 

    if(reflexWindowStart == 0){ 
     reflexWindow(); 
    } 
    reflexWindowStart++; 
    if(reflexWindowStart > 9){ 
     reflexWindowStart = 0; 
    } 
    } 
} 

void writeShortWindow(){ 
    for(int i=0;i<2;i++){ 
    for(int j=39; j>0; j--){ 
     shortVal[i][j] = shortVal[i][j-1]; 
    } 
    int ground = analogRead(A5); 
    shortVal[0][0] = analogRead(A1); 
    analogRead(A5); 
    shortVal[i][0] = analogRead(A2); 
    } 
} 

void meanVariance(){ 
    for(int i=0;i<2;i++){ 
    for(int j=0; j<39; j++){ 
     mean[i] = mean[i] + shortVal[i][j]; 
    }  
    mean[i] = mean[i]/40; 
    for(int j=0; j<39; j++){ 
     variance[i] = variance[i] + sq(mean[i] - shortVal[i][j]) ; 
    } 
    variance[i] = variance[i]/40; 
    } 
} 


void reflexWindow(){ 

    for(int i=0;i<2;i++){ 
     if(stopped[i] == true){ 
     if((millis() - stopTime[i] > 20) && (peakVal[i] - shortVal[i][0] > 20) && (variance[i] <= 1)){ 
      stopped[i] = false; 
      stopIndex[i] = 0; 
      Serial.println("................................NOTstopped"); 
     } 
     } 
    } 

    for(int i=0;i<2;i++){ 
    if(stopped[i] == false){ 

     lowVal[i] = 1023; 
     peakVal[i] = 0; 

     for(int j=stopIndex[i]; j>0; j--){ 
     reflexVal[i][j] = reflexVal[i][j-1]; 
      if(reflexVal[i][j] < lowVal[i]){ 
      lowVal[i] = reflexVal[i][j]; 
      lowIndex[i] = j; 
      } 
     } 

     reflexVal[i][0] = shortVal[i][0]; 



     for(int j=lowIndex[i]; j>=0; j--){ 
     if(reflexVal[i][j] > peakVal[i]){ 
      peakVal[i] = reflexVal[i][j]; 
     } 
     } 
    } 
    } 


    for(int i=0;i<2;i++){ 
    if(stopped[i] == false){ 
     if(peakVal[i] - lowVal[i] >= 50){ 
     Serial.print(i); 
     Serial.println("...................................stopped"); 
     stopTime[i] = millis(); 
     stopped[i] = true; 
     } 
    } 
    } 

    for(int i=0;i<2;i++){ 
    if(stopIndex[i] < 499){ 
     stopIndex[i]++; 
    } 
    } 

    Serial.print(shortVal[0][0]); 
    Serial.print(" ... "); 
    Serial.print(lowVal[0]); 
    Serial.print(" ... "); 
    Serial.print(peakVal[0]); 
    Serial.print(" ........ "); 
    Serial.print(shortVal[1][0]); 
    Serial.print(" ... "); 
    Serial.print(lowVal[1]); 
    Serial.print(" ... "); 
    Serial.println(peakVal[1]); 
} 
+0

Вы попробовали сбросить Arduino? Кажется, я помню, что у меня была аналогичная проблема ... Последовательная консоль иногда отключается, но она не предупреждает вас ... Попробуйте повторно загрузить свою программу на плате, оставив кабель подключенным. (Я полагаю, вы подключены с помощью USB?) Я думаю, что это то, что я сделал с моим. – user3728501

+0

Я пытался загрузить несколько раз через usb, и когда я запускаю любой другой эскиз, который, как я знаю, уже работает, он печатает и работает отлично. Привет, но – itsmrjack

+0

Просто догадайтесь, но вы можете попробовать переместить (некоторые из) ваш код из настройки? Я не эксперт, но у меня есть догадка, что настройка - это просто, он может только инициализировать данные в памяти. Если вы ставите последовательные чтения и записи в loop(), это имеет значение? Я думаю о строках r/w, чтобы серийный номер в настройке вызывал проблемы. Это может быть бессмысленным, что я говорю. (Я думаю, что у нас была проблема с fpga на uni, и это было решение) – user3728501

ответ

0

Если у вас есть плата Leonardo, вы, скорее всего, не увидите Serial.print в функции настройки.
Попробуйте изменить настройки этого (обратите внимание на дополнительное время цикла ждет последовательного)

void setup(){ 
    Serial.begin(9600); 
    while (!Serial); 
    Serial.println("wtf?"); 
    for(int i=0;i<2;i++){ 
    for(int j=0;j<40;j++){ 
     shortVal[i][j] = 0; 
    } 
    for(int j=0;j<500;j++){ 
     reflexVal[i][j] = 1023; 
    } 
    } 
} 

Причиной этого вы можете прочитать в Arduino документы для Леонардо http://arduino.cc/en/Guide/ArduinoLeonardo#toc3, но короче, что Леонардо оленья кожа сбрасывает серийный порт при открытии последовательного потока.

+0

спасибо за предложение, но я действительно на Uno, и все равно это все равно не объяснит, почему серийный отпечаток в начале цикл не запускается. – itsmrjack

+0

, тогда я предполагаю, что у вас заканчивается память, из-за чего очень сложно отлаживать ошибки, поскольку в компиляции не отображаются ошибки. Попытайтесь добавить количество байтов, которое используют все ваши переменные в верхней части, и посмотрите, действительно ли это так. Более подробную информацию о памяти можно найти здесь http://arduino.cc/en/Tutorial/Memory – sjunnesson

+0

Я быстро просмотрел и только эту строку «int reflexVal [2] [500];» добавляет 2000 байт к SRAM, из которых Arduino Uno имеет в общей сложности 2048. Поэтому я думаю, что некоторые из ваших проблем связаны с памятью. – sjunnesson

Смежные вопросы