2013-12-01 5 views
0

Я переводил программу, написанную в Ruby, на Arduino/C++. В моей первой попытке определить функцию/метод я продолжаю получать следующую ошибку: «BreadboardTestFunctions: 41: ошибка: определение функции не разрешено здесь до '{' токен BreadboardTestFunctions: 91: ошибка: ожидается`} 'в конце ввода "Ошибка определения функции/метода в Arduion/C++. Или синтаксическая ошибка?

Трудно понять, потому что за функциональным определением должна следовать пара скобок. Это может отражать синтаксическую ошибку, поскольку она сохраняется, поскольку я исправил множество ошибок в функции, поскольку я пытался решить эту проблему. Но теперь мне все в порядке.

Я генерирую вывод после умножения матрицы в начале раздела «// для умножения: поведение = мозг * стимул». Хотя проблемный метод «mody» (по строке 40) вызывается только один раз, как только я получу его для работы, все выходы вызовут его.

Код:

/* BREADBOARD 
    Implement program on Arduino + breadboard 
*/ 

// constants 
int foodPin = 2;  // to provide food 
int painPin = 3;  // to punish 
int ucsPin = 4;  // the UCS 
int csPin = 5;  // the CS 
int lightPin = 6; // turn the "light" stim on/off 
int thresh = 700; 

// variables 
int buttonState = 0; // variable for reading the pushbutton status 
boolean lighton = false; 
unsigned short int energy = 10000; 
int stimulus[11] = {0,0,0,0,0,0,0,0,0,0,0}; 

int brain[7][11] = { {0,0,0,0,99,0,0,0,0,1,0}, 
        {0,0,0,0,0,99,0,0,0,1,0}, 
        {0,0,0,0,0,0,99,0,0,1,0}, 
        {90,0,0,0,0,0,0,1,-1,1,-99}, 
        {0,90,0,0,0,0,0,1,-1,1,1}, 
        {0,0,90,0,0,0,0,1,-1,1,1}, 
        {0,0,0,90,0,0,0,1,-1,1,1} }; 

int behavior[7] = {0,0,0,0,0,0,0}; 

void setup() { 
    // initialize the pushbutton pins as an input: 
    pinMode(foodPin, INPUT); 
    pinMode(painPin, INPUT); 
    pinMode(ucsPin, INPUT); 
    pinMode(csPin, INPUT); 
    pinMode(lightPin, INPUT); 
    Serial.begin(9600); 
    int ix=0; 

    // define behavioral methods 
    void mody (int ix, int brain[], int stimulus[]) 
     { int psp=20; 
     int j; 
     for(j=7;j<11;j++) 
    {if (brain[ix][j] > 0) brain[ix][j]+= stimulus[j] * (99-brain[ix][j])/psp; 
    if (brain[ix][j] < 0) brain[ix][j]+= -1*(stimulus[j] * abs(99-brain[ix][j])/psp);} 
     return;} 

} // end void setup 

void loop(){ 
    // decay stimulus vector. do this and check inputs for ALL stimulii later 
    int k; 
    for(k=0;k<11;k++) 
    {if (stimulus[k] > 1) stimulus[k]-=2; else stimulus[k]=0;} 

    //check inputs 

    buttonState = digitalRead(foodPin); 
    if (buttonState == HIGH) stimulus[4] = 9; 
    buttonState = digitalRead(painPin); 
    if (buttonState == HIGH) stimulus[5] = 9; 
    buttonState = digitalRead(ucsPin); 
    if (buttonState == HIGH) stimulus[6] = 9; 
    buttonState = digitalRead(lightPin); 
    if (buttonState == HIGH) {stimulus[7] = 9; stimulus[8] = 9;lighton = true;} 
     else {stimulus[7] = 0; stimulus[8] = 0;lighton = false;} 
    buttonState = digitalRead(ucsPin); 
    if (buttonState == HIGH) stimulus[6] = 9; 

// routine to multiply: behavior=brain * stimulus' 
int i, j; 
    for(i=0;i<7;i++) 
    { behavior[i]=0; 
     for (j=0;j<11;j++) 
      {behavior[i]= behavior[i]+stimulus[j]*brain[i][j]; } 
    } // end for i 
    if (behavior[0] > thresh) {Serial.println("Positive Fixer");} 
    if (behavior[1] > thresh) {Serial.println("Negative Fixer");} 
    if (behavior[2] > thresh) {Serial.println("UCR"); mody (2, brain[], stimulus[]);} 
    if (behavior[3] > thresh) {Serial.println("Operant one");} 
    if (behavior[4] > thresh) {Serial.println("Operant two");} 
    if (behavior[5] > thresh) {Serial.println("Operant three");} 
    if (behavior[6] > thresh) {Serial.println("Operant four");} 

// generate random operant 
    if (random(energy) < 10) stimulus[random(4)]= 9 + random(3); 

energy --; 
Serial.println(energy); 

} // end void loop 

ответ

2

Вы не можете определить одну функцию внутри другой функции. Это то, что вы пытаетесь сделать в следующем фрагменте кода

void setup() { 
    // initialize the pushbutton pins as an input: 
    pinMode(foodPin, INPUT); 
    pinMode(painPin, INPUT); 
    pinMode(ucsPin, INPUT); 
    pinMode(csPin, INPUT); 
    pinMode(lightPin, INPUT); 
    Serial.begin(9600); 
    int ix=0; 

    // define behavioral methods 
    void mody (int ix, int brain[], int stimulus[]) 

Вы пытаетесь определить функцию функции внутри функции внутри функции.

+0

Ahh! Итак, я должен определить модификацию перед настройкой? – user918069

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