0

I just got an Idea of trying to code rain simulation with arduino and Adafruit OLED display. When I finished it was quite messy code so I thought That maybe doing it Object Oriented would help. This code is just a sketch that MAYBE works. The thing is that I need to create an array of objects(drops) and then display them. I have tried to display just one drop and it does not seem to do anything, even Serial wont print the pos_y. I have never wrote an Arduino code with objects so I just made a quick research and tried. here is the code:

#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();
} 

I will appreciate any suggestion or solution, spent almost entire day doing this "simple thing"..

5
  • 2
    I tried your code using a dummy implementation of Adafruit_SSD1306 that just prints to the serial port. It seems to work as expected. Commented Nov 11, 2018 at 12:24
  • can the display show negative y position? becose it start with -5 (you don't initialize random)
    – Juraj
    Commented Nov 11, 2018 at 15:41
  • Well, cutting out all the display code the program appears to work fine for me.
    – Majenko
    Commented Nov 11, 2018 at 15:56
  • It may well be then that the display driver hates a negative Y value. Not using that library ever I can't say... Personally I'd never use an Arduino for anything to do with a display...
    – Majenko
    Commented Nov 11, 2018 at 16:03
  • do you have 9600 baud set in Serial Monitor? add some prints to see where the code hangs
    – Juraj
    Commented Nov 12, 2018 at 6:24

1 Answer 1

0

The code works without the display commands. A problem could be that you start with negative pos_y and use it as parameter for drawFastVLine.

Function random returns first parameter if it is a larger value then the second parameter. random(-5, -20) always returns -5.

To have more random random values, you should call randomSeed in setup().

And you can use global array Drop drop[50];.

3
  • I dont think so, the messier version without objects worked fine with negative values :/ And thank you for the clarification with random!
    – kuskus
    Commented Nov 11, 2018 at 19:28
  • Okay i just used Global array and it seems that it fixed the problem ;). Thank you!
    – kuskus
    Commented Nov 12, 2018 at 17:02
  • strange. what version of IDE you have. is in Question the same sketch you use?
    – Juraj
    Commented Nov 12, 2018 at 17:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.