#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
int pushLeft=12,pushUp=11,pushDown=10;
bool pushLeftRead,pushUpRead,pushDownRead;
int16_t x=10,y=20;
Adafruit_SSD1306 display(128,64,&Wire,-1);
String msg=" Enter the text you want to display :\n( Press 1st push button to scroll left. \n Press 2nd push button to scroll up. \n Press 3rd push button to scroll down. ) ";
String text;
void moveUp(){
for(int i=y;i>=-15&&i<64;i-=2){
display.setCursor(x,i);
display.println(text);
display.display();
delay(100);
display.clearDisplay();
if (i==-14||i==-15){
i=63;
}
y=i;
pushUpRead=digitalRead(pushUp);
if(pushUpRead==1){
break;
}
}
}
void moveDown(){
for(int i=y;i>=-15&&i<64;i+=2){
display.setCursor(x,i);
display.println(text);
display.display();
delay(100);
display.clearDisplay();
if (i==62||i==63){
i=-14;
}
y=i;
pushDownRead=digitalRead(pushDown);
if(pushDownRead==1){
break;
}
}
}
void moveLeft(){
for(int i=x;i>=0&&i<123;i-=3){
display.setCursor(i,y);
display.println(text);
display.display();
delay(100);
display.clearDisplay();
if (i==0||i==1||i==2){
i=122;
}
x=i;
pushLeftRead=digitalRead(pushLeft);
if(pushLeftRead==1){
break;
}
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(pushLeftRead,INPUT);
pinMode(pushUpRead,INPUT);
pinMode(pushDownRead,INPUT);
Serial.println(msg);
while (Serial.available()==0){
}
text=Serial.readString();
display.begin(SSD1306_SWITCHCAPVCC,0x3C);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(x,y);
display.println(text);
display.display();
}
void loop() {
// put your main code here, to run repeatedly:
pushLeftRead=digitalRead(pushLeft);
pushUpRead=digitalRead(pushUp);
pushDownRead=digitalRead(pushDown);
while(pushLeftRead==0){
moveLeft();
}
while(pushUpRead==0){
moveUp();
}
while(pushDownRead==0){
moveDown();
}
delay(500);
}