Инициализация объектного массива Arduino
У меня только что возникла идея попробовать закодировать симуляцию дождя с помощью Arduino и OLED-дисплея Adafruit. Когда я закончил, это был довольно беспорядочный код, поэтому я подумал, что, возможно, использование объектно-ориентированного кода поможет. Этот код — всего лишь набросок, который МОЖЕТ работать. Дело в том, что мне нужно создать массив объектов(дропов) и потом их отобразить. Я попытался отобразить только одну каплю, но, похоже, ничего не произошло, даже Serial не печатает pos_y. Я никогда не писал код Arduino с объектами, поэтому просто провел быстрое исследование и попробовал. вот код:
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
class Drop{
private:
int pos_x = random(0, 128);
int pos_y = random(-5, -20);
int len = random(3, 7);
int speed = random(6, 13);
public:
void fall()
{
display.drawFastVLine(pos_x, pos_y, len, 1);
pos_y = pos_y + speed;
delay(5);
Serial.println(pos_y);
display.display();
display.clearDisplay();
}
};
Drop* drop = new Drop[50];
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.display();
}
void loop() {
drop[1].fall();
}
Я буду признателен за любое предложение или решение, потратив почти весь день на эту «простую вещь»..
@kuskus, 👍0
Обсуждение1 ответ
Лучший ответ:
Код работает без команд отображения. Проблема может заключаться в том, что вы начинаете с отрицательного значения pos_y
и используете его в качестве параметра для drawFastVLine
.
Функция Random возвращает первый параметр, если его значение больше, чем значение второго параметра. random(-5, -20)
всегда возвращает -5.
Чтобы иметь больше случайных случайных значений, вам следует вызвать randomSeed в setup().
И вы можете использовать глобальный массив Drop drop[50];
.
Я так не думаю, более запутанная версия без объектов отлично работала с отрицательными значениями :/ И спасибо за разъяснения со случайным образом!, @kuskus
Хорошо, я только что использовал глобальный массив, и кажется, это решило проблему;). Спасибо!, @kuskus
странный. какая у вас версия IDE. Речь идет о том же эскизе, который вы используете?, @Juraj
- Как записать последовательность кнопок и сохранить ее в массиве
- Как вернуть значение массива символов в функции Arduino IDE?
- Почему я не могу изменить значения массива, даже если оператор успешно вызван? TFT-сенсорный экран
- Использование массивов, двоичных данных и битового чтения
- Хранение значений широты и долготы в виде символов с заданной точностью
- Как преобразовать строку в шестнадцатеричный массив
- Матричный дисплей с Arduino UNO (ПРОБЛЕМА)
- Почему я не могу получить размер массива указателей
Я попробовал ваш код, используя фиктивную реализацию Adafruit_SSD1306, которая просто печатает на последовательный порт. Кажется, это работает так, как ожидалось., @Edgar Bonet
может ли дисплей показывать отрицательное положение Y? потому что он начинается с -5 (вы не инициализируете случайное значение), @Juraj
Что ж, если вырезать весь отображаемый код, у меня программа работает нормально., @Majenko
Вполне возможно, что драйвер дисплея ненавидит отрицательное значение Y. Я никогда не использовал эту библиотеку, я не могу сказать... Лично я бы никогда не использовал Arduino для чего-либо, связанного с дисплеем..., @Majenko
у вас в Serial Monitor установлена скорость 9600 бод? добавьте несколько отпечатков, чтобы увидеть, где висит код, @Juraj