Aleksandar Lukic / Mbed 2 deprecated bounce

Dependencies:   mbed Adafruit_GFX0

Committer:
lule
Date:
Mon Dec 13 16:07:39 2021 +0000
Revision:
0:806ae74bb791
..

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lule 0:806ae74bb791 1 /* Moving the rectangle previewed on the OLED display
lule 0:806ae74bb791 2 * by using potentiometers POT1 and POT2
lule 0:806ae74bb791 3 *
lule 0:806ae74bb791 4 * November, 2021.
lule 0:806ae74bb791 5 */
lule 0:806ae74bb791 6 #include "mbed.h"
lule 0:806ae74bb791 7 #include "Adafruit_GFX.h"
lule 0:806ae74bb791 8 #include "Adafruit_GFX_Config.h"
lule 0:806ae74bb791 9 #include "Adafruit_SSD1306.h"
lule 0:806ae74bb791 10
lule 0:806ae74bb791 11 // I2C bus pins:
lule 0:806ae74bb791 12 #define D_SDA PB_14
lule 0:806ae74bb791 13 #define D_SCL PB_13
lule 0:806ae74bb791 14 // I2C address, 60d or 0x3c:
lule 0:806ae74bb791 15 #define I2C_REAL_ADD 0x3c
lule 0:806ae74bb791 16 #define I2C_ADDRESS I2C_REAL_ADD << 1
lule 0:806ae74bb791 17 // Set OLED width and heigth [pixel]:
lule 0:806ae74bb791 18 #define OLED_WIDTH_PX 128
lule 0:806ae74bb791 19 #define OLED_HEIGHT_PX 64
lule 0:806ae74bb791 20 // I2C frequency:
lule 0:806ae74bb791 21 #define I2C_FREQUENCY 400000
lule 0:806ae74bb791 22 // Multipliers of POT1 and POT2 for OLED rectangle position:
lule 0:806ae74bb791 23 #define WIDTH_SCALER 128
lule 0:806ae74bb791 24 #define HEIGHT_SCALER 64
lule 0:806ae74bb791 25 // Initial rectangle position:
lule 0:806ae74bb791 26 #define INITIAL_X_POSITION OLED_WIDTH_PX / 2
lule 0:806ae74bb791 27 #define INITIAL_Y_POSITION OLED_HEIGHT_PX / 2
lule 0:806ae74bb791 28 // Refresh rate:
lule 0:806ae74bb791 29 #define REFRESH_RATE_MS 5
lule 0:806ae74bb791 30 // Half of the potentiometer return value:
lule 0:806ae74bb791 31 #define HALF_INTERVAL 0.5f
lule 0:806ae74bb791 32 // x and y max values
lule 0:806ae74bb791 33 #define XMAX 127
lule 0:806ae74bb791 34 #define YMAX 63
lule 0:806ae74bb791 35 #define XMIN 0
lule 0:806ae74bb791 36 #define YMIN 0
lule 0:806ae74bb791 37
lule 0:806ae74bb791 38 // Initialize potentiometers' pins:
lule 0:806ae74bb791 39 AnalogIn POT1(PA_0);
lule 0:806ae74bb791 40 AnalogIn POT2(PA_1);
lule 0:806ae74bb791 41
lule 0:806ae74bb791 42 // Initialize I2C:
lule 0:806ae74bb791 43 I2C i2c(D_SDA,D_SCL);
lule 0:806ae74bb791 44
lule 0:806ae74bb791 45 // Initialize OLED display:
lule 0:806ae74bb791 46 Adafruit_SSD1306_I2c myOled(i2c,PB_5,I2C_ADDRESS,OLED_HEIGHT_PX,OLED_WIDTH_PX);
lule 0:806ae74bb791 47
lule 0:806ae74bb791 48 void screenSaver(){
lule 0:806ae74bb791 49 int x = 7, y = 12, r = 5, xk = 1, yk = 1, dx = 4, dy = 3;
lule 0:806ae74bb791 50
lule 0:806ae74bb791 51 while(true){
lule 0:806ae74bb791 52 myOled.drawRect(0, 0, OLED_WIDTH_PX - 1, OLED_HEIGHT_PX - 1, WHITE);
lule 0:806ae74bb791 53
lule 0:806ae74bb791 54 if((x - r) <= XMIN) xk = 1;
lule 0:806ae74bb791 55 if((x + r) >= XMAX) xk = -1;
lule 0:806ae74bb791 56
lule 0:806ae74bb791 57 if((y - r) <= YMIN) yk = 1;
lule 0:806ae74bb791 58 if((y + r) >= YMAX) yk = -1;
lule 0:806ae74bb791 59
lule 0:806ae74bb791 60 y += dy * yk;
lule 0:806ae74bb791 61 x += dx * xk;
lule 0:806ae74bb791 62
lule 0:806ae74bb791 63 myOled.fillCircle(x, y, r, WHITE);
lule 0:806ae74bb791 64
lule 0:806ae74bb791 65 myOled.display();
lule 0:806ae74bb791 66
lule 0:806ae74bb791 67 wait_ms(REFRESH_RATE_MS);
lule 0:806ae74bb791 68 myOled.clearDisplay();
lule 0:806ae74bb791 69 }
lule 0:806ae74bb791 70 }
lule 0:806ae74bb791 71
lule 0:806ae74bb791 72 void bounce(){
lule 0:806ae74bb791 73 int x = 7, y = 12, r = 5, xk = 1, yk = 1, dx = 4, dy = 3, g = 3;
lule 0:806ae74bb791 74
lule 0:806ae74bb791 75 while(true){
lule 0:806ae74bb791 76 myOled.drawRect(0, 0, OLED_WIDTH_PX - 1, OLED_HEIGHT_PX - 1, WHITE);
lule 0:806ae74bb791 77
lule 0:806ae74bb791 78 if((x - r) <= XMIN) xk = 1;
lule 0:806ae74bb791 79 if((x + r) >= XMAX) xk = -1;
lule 0:806ae74bb791 80
lule 0:806ae74bb791 81 if((y + r) <= YMAX){
lule 0:806ae74bb791 82 dy += g;
lule 0:806ae74bb791 83 y += dy;
lule 0:806ae74bb791 84 } else {
lule 0:806ae74bb791 85 dy = -dy;
lule 0:806ae74bb791 86 y = 2 * YMAX - y;
lule 0:806ae74bb791 87 }
lule 0:806ae74bb791 88
lule 0:806ae74bb791 89 y += dy * yk;
lule 0:806ae74bb791 90 x += dx * xk;
lule 0:806ae74bb791 91
lule 0:806ae74bb791 92 myOled.fillCircle(x, y, r, WHITE);
lule 0:806ae74bb791 93
lule 0:806ae74bb791 94 myOled.display();
lule 0:806ae74bb791 95
lule 0:806ae74bb791 96 wait_ms(REFRESH_RATE_MS);
lule 0:806ae74bb791 97 myOled.clearDisplay();
lule 0:806ae74bb791 98 }
lule 0:806ae74bb791 99 }
lule 0:806ae74bb791 100
lule 0:806ae74bb791 101 int main() {
lule 0:806ae74bb791 102
lule 0:806ae74bb791 103 // Initialize OLED:
lule 0:806ae74bb791 104 myOled.begin();
lule 0:806ae74bb791 105 myOled.setTextCursor(0, 0);
lule 0:806ae74bb791 106 i2c.frequency(I2C_FREQUENCY);
lule 0:806ae74bb791 107
lule 0:806ae74bb791 108 //screenSaver();
lule 0:806ae74bb791 109 bounce();
lule 0:806ae74bb791 110 }