• If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • Get control of your email attachments. Connect all your Gmail accounts and in less than 2 minutes, Dokkio will automatically organize your file attachments. You can also connect Dokkio to Drive, Dropbox, and Slack. Sign up for free.


harrymj Lab 5

Page history last edited by Harry Johnson 7 years, 2 months ago

Parts A/B: N/A


Part C:


I chose to implement a etch-a-sketch with simple non-volatile quicksave functionality (only a single image stored).







EE47, Spring 2013, Lab 5

Harry Johnson

This example code is released into the public domain, but it'd be nice if you reference me if you use it. Thanks!



#include <Adafruit_GFX.h>

#include <Adafruit_PCD8544.h>

#include <math.h>

#include <SPI.h>

#include <SD.h>


Adafruit_PCD8544 display = Adafruit_PCD8544(7,6,5,-1,4); 

//I used a voltage divider for the reset line to improve reliability. Might be something to look at for the future because it doesn't need to be particularly fast.


File myFile;


const int savePin = 8;

const int loadPin = 9;


const int xPin = 1; //analog 1

const int yPin = 0; //analog 0


void setup() {

  analogReference(EXTERNAL); //I'm running the potentiometer on 3.3V, so I ran 3.3V to the external reference pin. Now I have full range reading on my pots!






  pinMode(8, INPUT_PULLUP);

  pinMode(9, INPUT_PULLUP);


  pinMode(17, OUTPUT);




uint8_t displayCounter = 0;


void loop() {

  display.drawPixel(map(analogRead(xPin), 0, 1023, 0, 83), map(analogRead(yPin), 0, 1023, 0, 47), 1); //draw pixel at current location specified by pots. 



  if(displayCounter == 10) { //update the display approximately every 10ms. 

    displayCounter = 0; 




  if(sqrt(pow(analogRead(2), 2) + pow(analogRead(3), 2) + pow(analogRead(3), 2)) > 1200) display.clearDisplay(); //Shake detection for display clearing.

  //Powers and square root roughly determine magnitude of accel seen. Values over 1200 indicate vigorous shakiing. 


  if(digitalRead(8) == LOW) { //Save the display buffer to SD.

    myFile = SD.open("IMG.txt", FILE_WRITE);

    myFile.seek(0); //save to the beginning of the file, if it already exists. 

    myFile.write(display.pcd8544_buffer, 504); //write 504 bytes (size of display). Saved as binary data. 

    myFile.close(); //Memory leaks, YOU SHALL NOT PASS!



  if(digitalRead(9) == LOW) { //put the saved data from SD back on the screen. 

    myFile = SD.open("IMG.txt", FILE_READ);

    myFile.readBytes((char *)display.pcd8544_buffer, 504);








Comments (0)

You don't have permission to comment on this page.