3D PrintingArduinoArduino HelpHardwareRamps
Reprap Discount Full Graphics 128×64 LCD Test Sketch
Using Arduino Mega & Ramps
Using the following Arduino ino codes you can test your 12864 type Reprap Discount Full Graphics 128x64 LCD
. Codes are written for Arduino Mega and Ramps combo pins. However it can be converted to any 3D printer mainboard (ie SKR).
Copy and paste the following codes into a text file and give a name like ReprapLCDTest.ino (or just click here to download) and then open with Arduino IDE and run it.
#include <SPI.h> #include <U8glib.h> #include <SD.h> //Lets you test the standard features of a reprap discount full graphics 128x64 LCD //Test STOP and Encoder button //Test buzzer (Hold both STOP and Encoder buttons to activate) //Test SD detect, disply SD card information //Test Encode left/right //Verify the LCD is working. //Standard pins when on a RAMPS 1.4 #define DOGLCD_CS 16 #define DOGLCD_MOSI 17 #define DOGLCD_SCK 23 #define BTN_EN1 31 #define BTN_EN2 33 #define BTN_ENC 35 #define SD_DETECT_PIN 49 #define SDSS 53 #define BEEPER_PIN 37 #define KILL_PIN 41 Sd2Card card; SdVolume volume; int x=0; //Offset postion of title int kill_pin_status = 1; //Last read status of the stop pin, start at 1 to ensure buzzer is off int encoderPos = 1; //Current encoder position int encoder0PinALast; //Used to decode rotory encoder, last value int encoder0PinNow; //Used to decode rotory encoder, current value char posStr[4]; //Char array to store encoderPos as a string char tmp_string[16]; int enc_pin_status; //Last read status of the encoder button int sd_detect_pin_status = true; //Last read status of the SD detect pin int scroll_direction=1; //Direction of title scroll, 1 right, -1 left unsigned long previousMillis = 0; //Previous Millis value unsigned long currentMillis; //Current Millis value const long interval = 1000/3; //How often to run the display loop, every 1/3 of a second aproximatly boolean gotsddata = false; int sdcardinit; int sdcardtype; int sdvolumeinit; int sdvolumefattype; unsigned long sdvolumebpc; unsigned long sdvolumecc; // SPI Com: SCK = en = 23, MOSI = rw = 17, CS = di = 16 U8GLIB_ST7920_128X64_1X u8g(DOGLCD_SCK, DOGLCD_MOSI, DOGLCD_CS); void setup() { pinMode(SD_DETECT_PIN, INPUT); // Set SD_DETECT_PIN as an unput digitalWrite(SD_DETECT_PIN, HIGH); // turn on pullup resistors pinMode(KILL_PIN, INPUT); // Set KILL_PIN as an unput digitalWrite(KILL_PIN, HIGH); // turn on pullup resistors pinMode(BTN_EN1, INPUT); // Set BTN_EN1 as an unput, half of the encoder digitalWrite(BTN_EN1, HIGH); // turn on pullup resistors pinMode(BTN_EN2, INPUT); // Set BTN_EN2 as an unput, second half of the encoder digitalWrite(BTN_EN2, HIGH); // turn on pullup resistors pinMode(BTN_ENC, INPUT); // Set BTN_ENC as an unput, encoder button digitalWrite(BTN_ENC, HIGH); // turn on pullup resistors u8g.setFont(u8g_font_helvR08); //Set the font for the display u8g.setColorIndex(1); // Instructs the display to draw with a pixel on. } //Main arduino loop void loop() { // Read the encoder and update encoderPos encoder0PinNow = digitalRead(BTN_EN1); if ((encoder0PinALast == LOW) && (encoder0PinNow == HIGH)) { if (digitalRead(BTN_EN2) == LOW) { encoderPos++; } else { encoderPos--; } } encoder0PinALast = encoder0PinNow; //read in SD data when SD is incerted if (!sd_detect_pin_status && !gotsddata) { sdcardinit = card.init(SPI_HALF_SPEED, SDSS); sdcardtype = card.type(); sdvolumeinit = volume.init(card); sdvolumefattype = volume.fatType(); sdvolumebpc = volume.blocksPerCluster(); sdvolumecc = volume.clusterCount(); gotsddata = true; } //check if it is time to update the display currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; //read the kill pin status kill_pin_status = digitalRead(KILL_PIN); //read the encoder button status enc_pin_status = digitalRead(BTN_ENC); //read the SD detect pin status sd_detect_pin_status = digitalRead(SD_DETECT_PIN); if (sd_detect_pin_status) { gotsddata = false; } //Check if both Kill switch and encoder are pressed, if so switch on buzzer if(kill_pin_status || enc_pin_status) digitalWrite(BEEPER_PIN, LOW); else digitalWrite(BEEPER_PIN, HIGH); //Draw new screen u8g.firstPage(); do { if(gotsddata) draw2(); else draw(); } while( u8g.nextPage() ); //Update Title position x=x+scroll_direction; if (x > 40) scroll_direction = -1; if (x < 1) scroll_direction = 1; } } //Assemble the display void draw(){ u8g.setColorIndex(0); u8g.drawBox(0,0,128,64); u8g.setColorIndex(1); u8g.drawStr( 2+x, 10, "RRD GLCD TEST"); u8g.drawStr( 2, 3*9, "Stop pin status:"); if (kill_pin_status) u8g.drawStr( 84, 3*9, "Open"); else u8g.drawStr( 84, 3*9, "Closed"); u8g.drawStr( 2, 4*9, "Enc pin status:"); if (enc_pin_status) u8g.drawStr( 84, 4*9, "Open"); else u8g.drawStr( 84, 4*9, "Closed"); u8g.drawStr( 2, 6*9, "Encoder value:"); sprintf (posStr, "%d", encoderPos); u8g.drawStr( 84, 6*9, posStr ); u8g.drawStr( 2, 5*9, "SD detect status:"); if (sd_detect_pin_status) u8g.drawStr( 84, 5*9, "Open"); else u8g.drawStr( 84, 5*9, "Closed"); u8g.drawStr( 2, 7*9, "Buzzer:"); if (kill_pin_status || enc_pin_status) u8g.drawStr( 84, 7*9, "Off"); else u8g.drawStr( 84, 7*9, "On"); u8g.drawFrame(0,0,128,64); } //Display SD card info void draw2(){ u8g.setColorIndex(0); u8g.drawBox(0,0,128,64); u8g.setColorIndex(1); u8g.drawStr( 0, 1*10, "Initializing SD card:"); if (sdcardinit) { u8g.drawStr( 90, 1*10, "OK"); u8g.drawStr( 0, 2*10, "Card type:"); switch (sdcardtype) { case SD_CARD_TYPE_SD1: u8g.drawStr( 90, 2*10, "SD1"); break; case SD_CARD_TYPE_SD2: u8g.drawStr( 90, 2*10, "SD2"); break; case SD_CARD_TYPE_SDHC: u8g.drawStr( 90, 2*10, "SDHC"); break; default: u8g.drawStr( 90, 2*10, "Unknown"); } if (!sdvolumeinit) { u8g.drawStr( 0, 3*10, "No FAT16/FAT32 partition."); } else { // print the type and size of the first FAT-type volume u8g.drawStr( 0, 3*10,"Volume type is: FAT"); itoa(sdvolumefattype, tmp_string, 10); u8g.drawStr( 110, 3*10,tmp_string); uint32_t volumesize; volumesize = sdvolumebpc; // clusters are collections of blocks volumesize *= sdvolumecc; // we'll have a lot of clusters volumesize /= 2; // SD card blocks are always 512 bytes (2 blocks are 1KB) volumesize /= 1024; u8g.drawStr( 0, 4*10,"Volume size (Mb):"); itoa(volumesize, tmp_string, 10); u8g.drawStr( 90, 4*10,tmp_string); } } else { u8g.drawStr( 90, 1*10, "FAILED"); } }