собственно в названии все описал. необходимо объявить массив пустой без заданного размера, почему оговариваю это, потому как если пишу
arr_Value[10]={};
все в порядке, вывожу в печать получаю нули, если вывожу
arr_Value[]={};
получаю преимущественно нули и несколько случайных чисел
0
0
52
0
91
0
0
0
0
255
0
95
0
140
0
в общем можно залить нулями или еще какие костыли, но в чем дело то? ведь объявляя с равенством “={}” по-моему объявляем с нулевыми значениями? или я ошибаюсь
ну если я в массив данные не записываю то значений там “0”, я понимаю что я обращаюсь к пустым значениям, не понятно мне где берутся цифры. они, кстати, одни и теже
а я знаю ответ! в первом случае он зарезервировал память под значения, а во втором нет! следовательно ими пользуется кто хочет, и гадит там! dmitriy_8 подскажите пж вам нужен код что бы знать кто там эти дела сделал ?
давайте так: задача - что то типа осциллографа. Беру данные с аналогового входа и анализирую шум. Надо создать пустой массив для сбора переменных, количество которых может изменятся/задаваться при вызове функции, поэтому считаем что неизвестно.
#define Value A1//читаемый пин
uint32_t data_length = 5;
float arr_Value[10]={};
void setup() {
Serial.begin(115200);
pinMode(Value, INPUT);
Serial.println("Start");
bool flag=0;
for (uint8_t i=0; i<data_length; i++){
if (flag==0){
if (i<data_length){
arr_Value[i] = analogRead(Value)*5.13/1024;
Serial.println(arr_Value[i]);
}
else{flag=1;}
}
}
}
пока так и в setup, так удобнее, через перезагрузку на плате обновляю данные. почему задался вопросом, привык перепроверять все, потому как часто ошибки на входе ломают все, а ты ломаешь голову, поэтому проверил список перед работой с ним.
нисколько, там пусто. но думал, что нули создаются когда мы начинаем работать с записями массива, т.е. мы их записываем или обращаемся к ним и они объявляются как 0
вы лучше это спросите у кого то еще…
иногда памяти мало, и лучше создавать массив а потом удалять, я просто это у вас узнать хотел, а то я не понимаю что вы делаете)))
#define Value A1
float* arr_Value = nullptr;
uint32_t data_length = 0;
void setup() {
Serial.begin(115200);
pinMode(Value, INPUT);
Serial.println("Start");
}
void collectData(uint32_t seconds) {
// ПЕРВЫЙ ПРОХОД: считаем, сколько сэмплов получится
uint32_t sample_count = 0;
uint32_t start_time = millis();
while (millis() - start_time < seconds * 1000) {
sample_count++;
delay(10); // Имитация времени между сэмплами
}
// ВТОРОЙ ПРОХОД: создаем массив и собираем данные
arr_Value = new float[sample_count];
start_time = millis();
uint32_t index = 0;
while (millis() - start_time < seconds * 1000 && index < sample_count) {
arr_Value[index] = analogRead(Value) * 5.13 / 1024;
index++;
delay(10);
}
data_length = sample_count;
// Используем данные
for (uint32_t i = 0; i < data_length; i++) {
Serial.println(arr_Value[i]);
}
// Освобождаем память
delete[] arr_Value;
arr_Value = nullptr;
}
void loop() {
collectData(2); // Собираем данные в течение 2 секунд
delay(2000); // Пауза перед следующим сбором
}