2017-01-05 2 views
0

Я довольно плохо разбираюсь в кодировании (я знаю основы), и я пытаюсь создать массив сервоприводов в Arduino для управления через Serial с обработкой. Я смутно помню что-то о микроконтроллерах Arduino, имеющих действительно ограниченную память, поэтому я не уверен, что сработает массив объектов Servo. Вот код, который я до сих пор:Есть ли у Arduino Uno/OSEPP Uno достаточное количество памяти для создания сервомеханизма?

#include <Servo.h> 

Servo[] servos = new Servo[6]; //holds the servo objects 

int[] servoPos = {90,112,149,45,75,8}; //holds the current position of each servo 

char serialVal; //store the serialValue received from serial 

void setup() 
{ 
    for(int i = 0; i < servos.length; i++) //attach servos to pins 
    { 
    servos[i].attach(i+8); 
    } 

    Serial.begin(115200); //initialize serial 
} 

Будет ли плата Arduino Uno быть в состоянии поддерживать этот массив и использовать его как в Java? До сих пор я создавал каждый объект отдельно, что было очень неэффективным и трудоемким для ввода и чтения.

Кроме того, если есть что-то, что остановит выполнение этого кода, скажите, пожалуйста. Я ценю вашу помощь.

+0

Массив 'Servo' должен быть:' Servo servos [6]; '. Это создаст массив из 6 элементов и вызовет конструкторы по умолчанию, поскольку основным языком является C++. – KIIV

ответ

0

Мой совет - запустить вашу Arduino IDE и попробовать. Прежде всего, вы обнаружите, что у вас есть некоторые проблемы в вашем коде:

Синтаксис вашего массива неверен. Например:

int[] servoPos = {90,112,149,45,75,8}; //holds the current position of each servo 

должно быть написано:

int servoPos[] = {90,112,149,45,75,8}; //holds the current position of each servo 

Я предполагаю, что это servos.length является Java вещь? Вместо этого вы должны определить, что значение по:

sizeof(servos)/sizeof(servos[0]) 

После вы получите его компиляции вы увидите сообщение в черном консольном окне в нижней части окна Arduino IDE:

Sketch использует 2408 байтов (7%) пространства для хранения программ. Максимум 32256 байт. Глобальные переменные используют 242 байта (11%) динамической памяти, оставляя 1806 байтов для локальных переменных. Максимум 2048 байт.

Это даст вам некоторое представление об использовании памяти. Чтобы проверить свободную память во время выполнения, я пользуюсь этой библиотекой: https://github.com/McNeight/MemoryFree

+0

Таким образом, длина либо sizeof (servos), либо sizeof (servos [0])? –

+0

Будет ли также изменен синтаксис для сервоуправления? –

+2

@JasonChen 'sizeof (servos)' - размер массива 'servos' в байтах и' sizeof (servos [0]) '- размер одного элемента в байтах. Таким образом, вам нужно разделить размер массива по размеру элемента, чтобы получить количество элементов. Однако есть возможность получить [количество элементов с помощью функции шаблона] (http://stackoverflow.com/questions/437150/can-someone-explain-this-template-code-that-gives-me-the-size- из-ан-массив). И синтаксис для серво-массива также должен быть изменен. – KIIV