Инициализация объектного массива 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();
} 

Я буду признателен за любое предложение или решение, потратив почти весь день на эту «простую вещь»..

, 👍0

Обсуждение

Я попробовал ваш код, используя фиктивную реализацию Adafruit_SSD1306, которая просто печатает на последовательный порт. Кажется, это работает так, как ожидалось., @Edgar Bonet

может ли дисплей показывать отрицательное положение Y? потому что он начинается с -5 (вы не инициализируете случайное значение), @Juraj

Что ж, если вырезать весь отображаемый код, у меня программа работает нормально., @Majenko

Вполне возможно, что драйвер дисплея ненавидит отрицательное значение Y. Я никогда не использовал эту библиотеку, я не могу сказать... Лично я бы никогда не использовал Arduino для чего-либо, связанного с дисплеем..., @Majenko

у вас в Serial Monitor установлена скорость 9600 бод? добавьте несколько отпечатков, чтобы увидеть, где висит код, @Juraj


1 ответ


Лучший ответ:

0

Код работает без команд отображения. Проблема может заключаться в том, что вы начинаете с отрицательного значения pos_y и используете его в качестве параметра для drawFastVLine.

Функция Random возвращает первый параметр, если его значение больше, чем значение второго параметра. random(-5, -20) всегда возвращает -5.

Чтобы иметь больше случайных случайных значений, вам следует вызвать randomSeed в setup().

И вы можете использовать глобальный массив Drop drop[50];.

,

Я так не думаю, более запутанная версия без объектов отлично работала с отрицательными значениями :/ И спасибо за разъяснения со случайным образом!, @kuskus

Хорошо, я только что использовал глобальный массив, и кажется, это решило проблему;). Спасибо!, @kuskus

странный. какая у вас версия IDE. Речь идет о том же эскизе, который вы используете?, @Juraj