Здравствуйте пытаюсь прошить Arduino UNO для S4A но вовремя компиляции пишет ошибку: C:\Users\Администратор\Desktop\РђСЂРґСѓРёРЅРѕ\S4AFirmware15\S4AFirmware15.ino:10:1: warning: 'typedef' was ignored in this declaration C:\Users\Администратор\Desktop\РђСЂРґСѓРёРЅРѕ\S4AFirmware15\S4AFirmware15.ino: In function 'void setup()': S4AFirmware15:20: error: 'configurePins' was not declared in this scope S4AFirmware15:21: error: 'resetPins' was not declared in this scope C:\Users\Администратор\Desktop\РђСЂРґСѓРёРЅРѕ\S4AFirmware15\S4AFirmware15.ino: In function 'void loop()': S4AFirmware15:30: error: 'sendUpdateServomotors' was not declared in this scope S4AFirmware15:31: error: 'sendSensorValues' was not declared in this scope S4AFirmware15:35: error: 'readSerialPort' was not declared in this scope C:\Users\Администратор\Desktop\РђСЂРґСѓРёРЅРѕ\S4AFirmware15\S4AFirmware15.ino: In function 'void resetPins()': S4AFirmware15:65: error: 'servo' was not declared in this scope C:\Users\Администратор\Desktop\РђСЂРґСѓРёРЅРѕ\S4AFirmware15\S4AFirmware15.ino: In function 'void sendSensorValues()': S4AFirmware15:85: error: 'insertionSort' was not declared in this scope S4AFirmware15:91: error: 'ScratchBoardSensorReport' was not declared in this scope S4AFirmware15:94: error: 'ScratchBoardSensorReport' was not declared in this scope C:\Users\Администратор\Desktop\РђСЂРґСѓРёРЅРѕ\S4AFirmware15\S4AFirmware15.ino: In function 'void insertionSort(unsigned int*, unsigned int)': S4AFirmware15:102: error: 'swap' was not declared in this scope C:\Users\Администратор\Desktop\РђСЂРґСѓРёРЅРѕ\S4AFirmware15\S4AFirmware15.ino: In function 'void readSerialPort()': S4AFirmware15:150: error: 'updateActuator' was not declared in this scope S4AFirmware15:155: error: 'checkScratchDisconnection' was not declared in this scope C:\Users\Администратор\Desktop\РђСЂРґСѓРёРЅРѕ\S4AFirmware15\S4AFirmware15.ino: In function 'void sendUpdateServomotors()': S4AFirmware15:174: error: 'servo' was not declared in this scope C:\Users\Администратор\Desktop\РђСЂРґСѓРёРЅРѕ\S4AFirmware15\S4AFirmware15.ino: In function 'void servo(byte, byte)': S4AFirmware15:180: error: 'pulse' was not declared in this scope exit status 1 'configurePins' was not declared in this scope
вы пытаетесь использовать незнакомые компилятору слова. проверьте подключение библиотек и объявление переменных
typedef enum { input, servomotor, pwm, digital } pinType; typedef struct pin { pinType type; //Type of pin int state; //State of an output //byte value; //Value of an input. Not used by now. TODO }; pin arduinoPins[14]; //Array of struct holding 0-13 pins information unsigned long lastDataReceivedTime = millis(); void setup() { Serial.begin(38400); Serial.flush(); configurePins();// На него ругается. resetPins(); } void loop() { static unsigned long timerCheckUpdate = millis(); if (millis()-timerCheckUpdate>=20) { sendUpdateServomotors(); sendSensorValues(); timerCheckUpdate=millis(); } readSerialPort(); } void configurePins() { arduinoPins[0].type=input; arduinoPins[1].type=input; arduinoPins[2].type=input; arduinoPins[3].type=input; arduinoPins[4].type=servomotor; arduinoPins[5].type=pwm; arduinoPins[6].type=pwm; arduinoPins[7].type=servomotor; arduinoPins[8].type=servomotor; arduinoPins[9].type=pwm; arduinoPins[10].type=digital; arduinoPins[11].type=digital; arduinoPins[12].type=digital; arduinoPins[13].type=digital; } void resetPins() { for (byte index=0; index <=13; index++) { if (arduinoPins[index].type!=input) { pinMode(index, OUTPUT); if (arduinoPins[index].type==servomotor) { arduinoPins[index].state = 255; servo (index, 255); } else { arduinoPins[index].state=0; digitalWrite(index,LOW); } } } } void sendSensorValues() { unsigned int sensorValues[6], readings[5]; byte sensorIndex; for (sensorIndex = 0; sensorIndex < 6; sensorIndex++) //for analog sensors, calculate the median of 5 sensor readings in order to avoid variability and power surges { for (byte p = 0; p < 5; p++) readings[p] = analogRead(sensorIndex); insertionSort(readings, 5); //sort readings sensorValues[sensorIndex] = readings[2]; //select median reading } //send analog sensor values for (sensorIndex = 0; sensorIndex < 6; sensorIndex++) ScratchBoardSensorReport(sensorIndex, sensorValues[sensorIndex]); //send digital sensor values ScratchBoardSensorReport(6, digitalRead(2)?1023:0); ScratchBoardSensorReport(7, digitalRead(3)?1023:0); } void insertionSort(unsigned int* array, unsigned int n) { for (int i = 1; i < n; i++) for (int j = i; (j > 0) && ( array[j] < array[j-1] ); j--) swap( array, j, j-1 ); } void swap(unsigned int* array, unsigned int a, unsigned int b) { unsigned int temp = array[a]; array[a] = array; array = temp; } void ScratchBoardSensorReport(byte sensor, int value) //PicoBoard protocol, 2 bytes per sensor { Serial.write( B10000000 | ((sensor & B1111)<<3) | ((value>>7) & B111)); Serial.write( value & B1111111); } void readSerialPort() { byte pin; int newVal; static byte actuatorHighByte, actuatorLowByte; static byte readingSM = 0; if (Serial.available()) { if (readingSM == 0) { actuatorHighByte = Serial.read(); if (actuatorHighByte >= 128) readingSM = 1; } else if (readingSM == 1) { actuatorLowByte = Serial.read(); if (actuatorLowByte < 128) readingSM = 2; else readingSM = 0; } if (readingSM == 2) { lastDataReceivedTime = millis(); pin = ((actuatorHighByte >> 3) & 0x0F); newVal = ((actuatorHighByte & 0x07) << 7) | (actuatorLowByte & 0x7F); if(arduinoPins[pin].state != newVal) { arduinoPins[pin].state = newVal; updateActuator(pin); } readingSM = 0; } } else checkScratchDisconnection(); } void reset() //with xbee module, we need to simulate the setup execution that occurs when a usb connection is opened or closed without this module { resetPins(); // reset pins sendSensorValues(); // protocol handshaking lastDataReceivedTime = millis(); } void updateActuator(byte pinNumber) { if (arduinoPins[pinNumber].type==digital) digitalWrite(pinNumber, arduinoPins[pinNumber].state); else if (arduinoPins[pinNumber].type==pwm) analogWrite(pinNumber, arduinoPins[pinNumber].state); } void sendUpdateServomotors() { for (byte p = 0; p < 10; p++) if (arduinoPins[p].type == servomotor) servo(p, arduinoPins[p].state); } void servo (byte pinNumber, byte angle) { if (angle != 255) pulse(pinNumber, (angle * 10) + 600); } void pulse (byte pinNumber, unsigned int pulseWidth) { digitalWrite(pinNumber, HIGH); delayMicroseconds(pulseWidth); digitalWrite(pinNumber, LOW); } void checkScratchDisconnection() //the reset is necessary when using an wireless arduino board (because we need to ensure that arduino isn't waiting the actuators state from Scratch) or when scratch isn't sending information (because is how serial port close is detected) { if (millis() - lastDataReceivedTime > 1000) reset(); //reset state if actuators reception timeout = one second }
Но почему она не работает ? я ее с официального сайта скачал. Да и с других тоже не работает. До функций мне еще далеко.
вы должны объявить функцию до того, как её вызовите. т.е. написать что делать до того как скажете, что надо это делать. http://cppstudio.com/post/6471/
В Arduino IDE этого делать не обязательно. При подготовке исходников из скетча *.ino среда сама сделает нужные объявления, что бы компилятор не ругался. Чем сборку (компиляцию) производите? Arduino IDE v 1.6.11 прекрасно справляется со скетчем S4A с официального сайта.
а. э. нет. надо с нормального. перейти с этой штуки на что-то нормальное будет оооочень сложно. инфа 110%.
Я все это прекрасно понимаю. Главное это понять принцип. И я вообще то тут для решения проблемы. Все остальное успеется.
Это не стабильная версия, но всё равно S4A в ней собирается без ошибок. Есть одно предположение, связанное с непонятными символами в пути к скетчу: Это кириллица в названиях каталогов. Надо кириллицу убрать, т.е. файл скетча поместить в каталог, в пути к которому не будет русских буковок. Например, C:/arduino/s4a/S4AFirmware15.ino. И возьмите 16-ю версию S4A с официального сайта.
Большое СПАСИБО помогло, но arduino сам создает папку и перемещает его туда и только от туда можно загрузить. У меня получилось с 3 раз так как до этого выдавал нет доступа к порту или он заблокирован.
У меня такая же проблема: C:\Users\Alex\Documents\Arduino\S4AFirmware16\S4AFirmware16.ino:51:1: warning: 'typedef' was ignored in this declaration }; ^ Причем как видно не в кирилице дело, пробовал уже на двух компьютерах. При этом скет можно и залить, вот только S4a платку не видит...
Если проблема только в этом warning, то это не проблема. И отсутствие/присутствие кириллицы здесь не при чём. Может кроме этого предупреждения есть ошибки (errors)? Хотя если: то скорее всего ошибок нет и проблема у Вас в другом.