270o Final Project

From CSclasswiki
Revision as of 15:11, 8 May 2020 by 270o (talk | contribs) (Images & Videos)
Jump to: navigation, search

Lizette's Project Page


Welcome to the Wiki Page of my Final Project for CSC270: Digital Circuits Systems. The purpose of this project is to create three configurations using various Elegoo Gadgets including a Mega2560 Arduino, Raspberry Pi and a 64-LED matrix. These configurations will each be able to execute a task as detailed in the outline.



The objectives explained in the Introduction will be achieved in 3 parts:

  1. Connect a 64-LED matrix display to a Mega2560 Arduino and program it to display my name, "L I Z E T T E".
  1. Demonstrate a master - worker model by establishing an i2c link between a Raspberry Pi and a Mega2560 Arduino. The Raspberry Pi will send a word to the Arduino. The Arduino will implement a Atbash Cipher on the word, then send it back to the Raspberry Pi.
  1. Retrieve Seattle, Washington's current weather from weather.com using a Raspberry Pi. The Raspberry Pi will send it to the Arduino, which will display the data on the 64-LED matrix display.

I will be programming the Raspberry Pi and Arduino in C.


  1. Mega2560 Arduino
  2. Raspberry Pi 3
  3. 64-LED Matrix
  4. Breadboard
  5. Wires
  6. Resistors


Google Chrome LED Byte Generator: This is used to generate the byte array matrix for each letter that is displayed on the 64-LED matrix in Part 1.

Part 1: Connect and Program 64-LED matrix to Arduino


I followed the Arduino 8×8 LED Matrix Tutorial [1] to connect the 64-LED matrix to my Arduino. The five pins of the 64-LED matrix were wired to the Arduino where DIN, CS, and clock where wired to pins 12, 11, and 10, respectively and the VCC and GND pins were wired to GND and 5V of the Arduino.

Once everything was wired, I wrote a sketch that displays the letters of my name, LIZETTE, one at a time. The sketch declares the pins wired between the LED matrix and the Arduino and the hexadecimal bytes. The hexadecimal bytes were generated using a Google Chrome extension called LED Byte Generator [2]. A function, printByte(), prints a byte by lighting up the rows of the matrix according to its hexadecimal. All the bytes gets called by printByte() in the setup() as demonstrated in the video below. This sketch used a library called LedControl [3].

Images & Videos


 * Lizette Carpenter 
 * Part 64-LED Matrix and Arduino Configuration 
 * The 64-LED Matrix will display my name: "L I Z E T T E"
 * References: 
 * LED Control library: 
 * Google Chrome app: LED Byte Generator 

//Include the following library 
#include <LedControl.h>

//Declare the pins of the Arduino following how it is connected to the pins of the LED Matrix
int DIN = 12;
int CS = 11; 
int CLK = 10; 

//Declare the byte arrays which represent the letters that will display on the LED Matrix 
byte l[8] = {0x0,0x40,0x40,0x40,0x40,0x40,0x7e,0x0};
byte i[8] = {0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x0};
byte z[8] = {0x0,0x7e,0x4,0x8,0x10,0x20,0x7e,0x0};
byte e[8] = {0x0,0x7c,0x40,0x7c,0x40,0x40,0x7c,0x0};
byte t[8] = {0x0,0x7f,0x8,0x8,0x8,0x8,0x8,0x0};
byte T[8] = {0x0,0x0,0xfe,0x10,0x10,0x10,0x10,0x10};

//Initialize the LED control library 
LedControl lc=LedControl(DIN, CLK, CS, 0);

void setup() {
  lc.shutdown(0, false); 

void loop() {







//Loops through each byte array and displays its corresponding letter to the LED Matrix. 
void printByte(byte character []) {
  int i = 0; 
  for (i = 0; i<8; i++) {
    lc.setRow(0, i, character[i]); 

Part 2: i2c link between Raspberry Pi to the Arduino


Images & Videos

Hardware for i2c communication between RPi and Arduino

Hardware for i2c communication between RPi and Arduino


Raspberry Pi Code, Python

Lizette Carpenter                                                                                                                                                                                                                            
Final Project Part 2                                                                                                                                                                                                                         
This program helps demonstrate an i2c communication between a Raspberry Pi and Arduino                                                                                                                                                       
by conducting a ceaser shift encryption and decryption on a user input.                                                                                                                                                                      
Once this program has encrypted the message, it writes the encryption to the Arduino.                                                                                                                                                        
It then waits for the Arduino to send back the message, decrypted. Once it receives                                                                                                                                                          
the decrypted message, this program converts the ASCII values into characters and                                                                                                                                                            
prints the results.                                                                                                                                                                                                                          

from smbus2 import SMBus
import smbus
import time

def printResults(results):
        print("Arduino wanted to join the fun. They decrypted your encryption:")
        for i in range(len(results)):

def StringToBytes(val):
        results = []
        addr = 0x8
        for c in val:
                data = ord(c)
                with SMBus(1) as bus:
                        bus.write_byte(addr, data)
                        decryption = chr(bus.read_byte(addr))
        return printResults(results)

def decrypt(cipher):
    byteValue = StringToBytes(cipher)

def encrypt(message, key):
    cipher = ""
    for i in range(len( message)):
        char = message[i]
        cipher += chr((ord(char) + int(key) - 97) % 26 + 97)
    print("Your encryption is: " + cipher)
    return decrypt(cipher)

def main():
    key = 17
    message = raw_input("Enter a message in lowercase: ")
    print("Your shift number is 17")
    encrypt(message, key)


Arduino Code, C

#include <Wire.h>

int result = 0; 
byte cipher = 0;
void setup() {
void loop() { 

void receiveData(int byteCount) {
  while (Wire.available()) {
    cipher = Wire.read();
    result = (cipher + 9 - 97) % 26 + 97;
void sendData() {

Part 3: Combining Part 1 and Part 2


Images & Videos