DSL810 Assignment7: Mobile App Development with Input & Output Devices

Assignment7

Please build a Mobile App that interacts with sensors from your smart phone. Please build a User Interface (Mobile App/ Desktop App) that interacts with an input and/or output device using a microcontroller. Please document this work.

Bluetooth Module

Bluetooth Module Code for a LED Light



    #define ledPin 7
    int state = 0;
    void setup() {
      pinMode(ledPin, OUTPUT);
      digitalWrite(ledPin, LOW);
      Serial.begin(38400); // Default communication rate of the Bluetooth module
    }
    void loop() {
      if(Serial.available() > 0){ // Checks whether data is comming from the serial port
        state = Serial.read(); // Reads the data from the serial port
     }
     if (state == '0') {
      digitalWrite(ledPin, LOW); // Turn LED OFF
      Serial.println("LED: OFF"); // Send back, to the phone, the String "LED: ON"
      state = 0;
     }
     else if (state == '1') {
      digitalWrite(ledPin, HIGH);
      Serial.println("LED: ON");;
      state = 0;
     } 
    }          



MAX7219 LED Dot Matrix Module as a Output Device

Overview

Component Introduction


The MAX7219 IC is a serial input/output common-cathode display driver that interfaces microprocessors to a 7-segment numeric LED displays of up to 8 digits,bar-graph displays, or 64 individual LEDs.Here is an 8×8 LED matrix,integrated with a MAX7219 IC setup, available as a pre-wired module is used. Typical specification of this LED Matrix Module is shown below:

Operating Voltage: DC 4.7V – 5.3V
Typical Voltage: 5V
Operating Current: 320mA
Max Operating Current: 2A
VCC and Ground are connected to the Arduino. Pin 12 is connected to DIN, Pin 11 is connected to CS and Pin 10 is connected to CLK.

LED MAX7219 Code


                                //www.elegoo.com
        //2016.12.9

        //We always have to include the library
        #include "LedControl.h"

        /*
         Now we need a LedControl to work with.
         ***** These pin numbers will probably not work with your hardware *****
         pin 12 is connected to the DataIn 
         pin 11 is connected to LOAD(CS)
         pin 10 is connected to the CLK 
         We have only a single MAX72XX.
         */
        LedControl lc=LedControl(12,10,11,1);

        /* we always wait a bit between updates of the display */
        unsigned long delaytime1=500;
        unsigned long delaytime2=50;
        void setup() {
          /*
           The MAX72XX is in power-saving mode on startup,
           we have to do a wakeup call
           */
          lc.shutdown(0,false);
          /* Set the brightness to a medium values */
          lc.setIntensity(0,8);
          /* and clear the display */
          lc.clearDisplay(0);
        }

        /*
         This method will display the characters for the
         word "Arduino" one after the other on the matrix. 
         (you need at least 5x7 leds to see the whole chars)
         */
        void writeArduinoOnMatrix() {
          /* here is the data for the characters */
          byte a[5]={B01111110,B10001000,B10001000,B10001000,B01111110};
          byte r[5]={B00010000,B00100000,B00100000,B00010000,B00111110};
          byte d[5]={B11111110,B00010010,B00100010,B00100010,B00011100};
          byte u[5]={B00111110,B00000100,B00000010,B00000010,B00111100};
          byte i[5]={B00000000,B00000010,B10111110,B00100010,B00000000};
          byte n[5]={B00011110,B00100000,B00100000,B00010000,B00111110};
          byte o[5]={B00011100,B00100010,B00100010,B00100010,B00011100};

          /* now display them one by one with a small delay */
          lc.setRow(0,0,a[0]);
          lc.setRow(0,1,a[1]);
          lc.setRow(0,2,a[2]);
          lc.setRow(0,3,a[3]);
          lc.setRow(0,4,a[4]);
          delay(delaytime1);
          lc.setRow(0,0,r[0]);
          lc.setRow(0,1,r[1]);
          lc.setRow(0,2,r[2]);
          lc.setRow(0,3,r[3]);
          lc.setRow(0,4,r[4]);
          delay(delaytime1);
          lc.setRow(0,0,d[0]);
          lc.setRow(0,1,d[1]);
          lc.setRow(0,2,d[2]);
          lc.setRow(0,3,d[3]);
          lc.setRow(0,4,d[4]);
          delay(delaytime1);
          lc.setRow(0,0,u[0]);
          lc.setRow(0,1,u[1]);
          lc.setRow(0,2,u[2]);
          lc.setRow(0,3,u[3]);
          lc.setRow(0,4,u[4]);
          delay(delaytime1);
          lc.setRow(0,0,i[0]);
          lc.setRow(0,1,i[1]);
          lc.setRow(0,2,i[2]);
          lc.setRow(0,3,i[3]);
          lc.setRow(0,4,i[4]);
          delay(delaytime1);
          lc.setRow(0,0,n[0]);
          lc.setRow(0,1,n[1]);
          lc.setRow(0,2,n[2]);
          lc.setRow(0,3,n[3]);
          lc.setRow(0,4,n[4]);
          delay(delaytime1);
          lc.setRow(0,0,o[0]);
          lc.setRow(0,1,o[1]);
          lc.setRow(0,2,o[2]);
          lc.setRow(0,3,o[3]);
          lc.setRow(0,4,o[4]);
          delay(delaytime1);
          lc.setRow(0,0,0);
          lc.setRow(0,1,0);
          lc.setRow(0,2,0);
          lc.setRow(0,3,0);
          lc.setRow(0,4,0);
          delay(delaytime1);
        }

        /*
          This function lights up a some Leds in a row.
         The pattern will be repeated on every row.
         The pattern will blink along with the row-number.
         row number 4 (index==3) will blink 4 times etc.
         */
        void rows() {
          for(int row=0;row<8;row++) {
            delay(delaytime2);
            lc.setRow(0,row,B10100000);
            delay(delaytime2);
            lc.setRow(0,row,(byte)0);
            for(int i=0;i < row;i++) {
              delay(delaytime2);
              lc.setRow(0,row,B10100000);
              delay(delaytime2);
              lc.setRow(0,row,(byte)0);
            }
          }
        }

        /*
          This function lights up a some Leds in a column.
         The pattern will be repeated on every column.
         The pattern will blink along with the column-number.
         column number 4 (index==3) will blink 4 times etc.
         */
        void columns() {
          for(int col=0;col<8;col++) {
            delay(delaytime2);
            lc.setColumn(0,col,B10100000);
            delay(delaytime2);
            lc.setColumn(0,col,(byte)0);
            for(int i=0;i < col;i++) {
              delay(delaytime2);
              lc.setColumn(0,col,B10100000);
              delay(delaytime2);
              lc.setColumn(0,col,(byte)0);
            }
          }
      }
                

LED MAX 7219 Video



MIT App Inventor

MIT App Inventor

Working on MIT App Inventor



Fusion of Bluetooth, LED Max7219 and App Developed by MIT App Inventor

Circuit Connections

Code



#include 
#include 
#include 

PROGMEM const unsigned char CH[] = {
  3, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // space
  1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
  3, 8, B00000011, B00000000, B00000011, B00000000, B00000000, // "
  5, 8, B00010100, B00111110, B00010100, B00111110, B00010100, // #
  4, 8, B00100100, B01101010, B00101011, B00010010, B00000000, // $
  5, 8, B01100011, B00010011, B00001000, B01100100, B01100011, // %
  5, 8, B00110110, B01001001, B01010110, B00100000, B01010000, // &
  1, 8, B00000011, B00000000, B00000000, B00000000, B00000000, // '
  3, 8, B00011100, B00100010, B01000001, B00000000, B00000000, // (
  3, 8, B01000001, B00100010, B00011100, B00000000, B00000000, // )
  5, 8, B00101000, B00011000, B00001110, B00011000, B00101000, // *
  5, 8, B00001000, B00001000, B00111110, B00001000, B00001000, // +
  2, 8, B10110000, B01110000, B00000000, B00000000, B00000000, // ,
  4, 8, B00001000, B00001000, B00001000, B00001000, B00000000, // -
  2, 8, B01100000, B01100000, B00000000, B00000000, B00000000, // .
  4, 8, B01100000, B00011000, B00000110, B00000001, B00000000, // /
  4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // 0
  3, 8, B01000010, B01111111, B01000000, B00000000, B00000000, // 1
  4, 8, B01100010, B01010001, B01001001, B01000110, B00000000, // 2
  4, 8, B00100010, B01000001, B01001001, B00110110, B00000000, // 3
  4, 8, B00011000, B00010100, B00010010, B01111111, B00000000, // 4
  4, 8, B00100111, B01000101, B01000101, B00111001, B00000000, // 5
  4, 8, B00111110, B01001001, B01001001, B00110000, B00000000, // 6
  4, 8, B01100001, B00010001, B00001001, B00000111, B00000000, // 7
  4, 8, B00110110, B01001001, B01001001, B00110110, B00000000, // 8
  4, 8, B00000110, B01001001, B01001001, B00111110, B00000000, // 9
  2, 8, B01010000, B00000000, B00000000, B00000000, B00000000, // :
  2, 8, B10000000, B01010000, B00000000, B00000000, B00000000, // ;
  3, 8, B00010000, B00101000, B01000100, B00000000, B00000000, // <
  3, 8, B00010100, B00010100, B00010100, B00000000, B00000000, // =
  3, 8, B01000100, B00101000, B00010000, B00000000, B00000000, // >
  4, 8, B00000010, B01011001, B00001001, B00000110, B00000000, // ?
  5, 8, B00111110, B01001001, B01010101, B01011101, B00001110, // @
  4, 8, B01111110, B00010001, B00010001, B01111110, B00000000, // A
  4, 8, B01111111, B01001001, B01001001, B00110110, B00000000, // B
  4, 8, B00111110, B01000001, B01000001, B00100010, B00000000, // C
  4, 8, B01111111, B01000001, B01000001, B00111110, B00000000, // D
  4, 8, B01111111, B01001001, B01001001, B01000001, B00000000, // E
  4, 8, B01111111, B00001001, B00001001, B00000001, B00000000, // F
  4, 8, B00111110, B01000001, B01001001, B01111010, B00000000, // G
  4, 8, B01111111, B00001000, B00001000, B01111111, B00000000, // H
  3, 8, B01000001, B01111111, B01000001, B00000000, B00000000, // I
  4, 8, B00110000, B01000000, B01000001, B00111111, B00000000, // J
  4, 8, B01111111, B00001000, B00010100, B01100011, B00000000, // K
  4, 8, B01111111, B01000000, B01000000, B01000000, B00000000, // L
  5, 8, B01111111, B00000010, B00001100, B00000010, B01111111, // M
  5, 8, B01111111, B00000100, B00001000, B00010000, B01111111, // N
  4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // O
  4, 8, B01111111, B00001001, B00001001, B00000110, B00000000, // P
  4, 8, B00111110, B01000001, B01000001, B10111110, B00000000, // Q
  4, 8, B01111111, B00001001, B00001001, B01110110, B00000000, // R
  4, 8, B01000110, B01001001, B01001001, B00110010, B00000000, // S
  5, 8, B00000001, B00000001, B01111111, B00000001, B00000001, // T
  4, 8, B00111111, B01000000, B01000000, B00111111, B00000000, // U
  5, 8, B00001111, B00110000, B01000000, B00110000, B00001111, // V
  5, 8, B00111111, B01000000, B00111000, B01000000, B00111111, // W
  5, 8, B01100011, B00010100, B00001000, B00010100, B01100011, // X
  5, 8, B00000111, B00001000, B01110000, B00001000, B00000111, // Y
  4, 8, B01100001, B01010001, B01001001, B01000111, B00000000, // Z
  2, 8, B01111111, B01000001, B00000000, B00000000, B00000000, // [
  4, 8, B00000001, B00000110, B00011000, B01100000, B00000000, // \ backslash
  2, 8, B01000001, B01111111, B00000000, B00000000, B00000000, // ]
  3, 8, B00000010, B00000001, B00000010, B00000000, B00000000, // hat
  4, 8, B01000000, B01000000, B01000000, B01000000, B00000000, // _
  2, 8, B00000001, B00000010, B00000000, B00000000, B00000000, // `
  4, 8, B00100000, B01010100, B01010100, B01111000, B00000000, // a
  4, 8, B01111111, B01000100, B01000100, B00111000, B00000000, // b
  4, 8, B00111000, B01000100, B01000100, B00101000, B00000000, // c
  4, 8, B00111000, B01000100, B01000100, B01111111, B00000000, // d
  4, 8, B00111000, B01010100, B01010100, B00011000, B00000000, // e
  3, 8, B00000100, B01111110, B00000101, B00000000, B00000000, // f
  4, 8, B10011000, B10100100, B10100100, B01111000, B00000000, // g
  4, 8, B01111111, B00000100, B00000100, B01111000, B00000000, // h
  3, 8, B01000100, B01111101, B01000000, B00000000, B00000000, // i
  4, 8, B01000000, B10000000, B10000100, B01111101, B00000000, // j
  4, 8, B01111111, B00010000, B00101000, B01000100, B00000000, // k
  3, 8, B01000001, B01111111, B01000000, B00000000, B00000000, // l
  5, 8, B01111100, B00000100, B01111100, B00000100, B01111000, // m
  4, 8, B01111100, B00000100, B00000100, B01111000, B00000000, // n
  4, 8, B00111000, B01000100, B01000100, B00111000, B00000000, // o
  4, 8, B11111100, B00100100, B00100100, B00011000, B00000000, // p
  4, 8, B00011000, B00100100, B00100100, B11111100, B00000000, // q
  4, 8, B01111100, B00001000, B00000100, B00000100, B00000000, // r
  4, 8, B01001000, B01010100, B01010100, B00100100, B00000000, // s
  3, 8, B00000100, B00111111, B01000100, B00000000, B00000000, // t
  4, 8, B00111100, B01000000, B01000000, B01111100, B00000000, // u
  5, 8, B00011100, B00100000, B01000000, B00100000, B00011100, // v
  5, 8, B00111100, B01000000, B00111100, B01000000, B00111100, // w
  5, 8, B01000100, B00101000, B00010000, B00101000, B01000100, // x
  4, 8, B10011100, B10100000, B10100000, B01111100, B00000000, // y
  3, 8, B01100100, B01010100, B01001100, B00000000, B00000000, // z
  3, 8, B00001000, B00110110, B01000001, B00000000, B00000000, // {
  1, 8, B01111111, B00000000, B00000000, B00000000, B00000000, // |
  3, 8, B01000001, B00110110, B00001000, B00000000, B00000000, // }
  4, 8, B00001000, B00000100, B00001000, B00000100, B00000000, // ~
};

int dIn = 7;   // DIN pin of MAX7219 module
int clk = 6;   // CLK pin of MAX7219 module
int cs = 5;    // CS pin of MAX7219 module

int maxInUse = 2;    // Number of MAX7219's connected

MaxMatrix m(dIn, cs, clk, maxInUse);
SoftwareSerial Bluetooth(8, 7); // Bluetooth

byte buffer[10];
char incomebyte;
int scrollSpeed = 150;
char text[100]; //= "jack"; // Initial text message
int brightness = 15;
int count = 0;
char indicator;
char c;
String input;

void setup() {
  m.init(); // MAX7219 initialization
  m.setIntensity(brightness); // initial led matrix intensity, 0-15
  Bluetooth.begin(38400); // Default communication rate of the Bluetooth module
  Serial.begin(9600);
}

void loop() {
  //Serial.println(text);
  while(Serial.available())
  {
    input = Serial.readString();
    m.clear();
  }

  if(input.length() > 0)
  {
    Serial.print(input);
  }
//  text=input;
 //input="";
 input.toCharArray(text,input.length());
  
  // Printing the text
  printStringWithShift(text, scrollSpeed);

//  if(input.startsWith('1')
  
//  if (Bluetooth.available()) {   // Checks whether data is comming from the serial port
//    indicator = Bluetooth.read();   // Starts reading the serial port, the first byte from the incoming data
//    // If we have pressed the "Send" button from the Android App, clear the previous text
//    if (indicator == '1') {
//      for (int i = 0; i < 100; i++) {
//        text[i] = '0';
//        m.clear();
//      }
//      // Read the whole data/string comming from the phone and put it into text[] array.
//      while (Bluetooth.available()) {
//        incomebyte = Bluetooth.read();
//        text[count] = incomebyte;
//        count++;
//      }
//      count = 0;
//    }
//    
//    // Adjusting the Scrolling Speed
//    else if (indicator == '2') {
//      String sS = Bluetooth.readString();
//      scrollSpeed = 150 - sS.toInt(); // Milliseconds, subtraction because lower value means higher scrolling speed
//    }
//    // Adjusting the brightness
//    else if (indicator == '3') {
//      String sB = Bluetooth.readString();
//      brightness = sB.toInt();
//      m.setIntensity(brightness);
//    }
//  }

}

void printCharWithShift(char c, int shift_speed) {
  if (c < 32) return;
  c -= 32;
  memcpy_P(buffer, CH + 7 * c, 7);
  m.writeSprite(32, 0, buffer);
  m.setColumn(32 + buffer[0], 0);

  for (int i = 0; i < buffer[0] + 1; i++)
  {
    delay(shift_speed);
    m.shiftLeft(false, false);
  }
}

void printStringWithShift(char* s, int shift_speed) {
  while (*s != 0) {
    printCharWithShift(*s, shift_speed);
    s++;
  }
}

void printString(char* s)
{
  int col = 0;
  while (*s != 0)
  {
    if (*s < 32) continue;
    char c = *s - 32;
    memcpy_P(buffer, CH + 7 * c, 7);
    m.writeSprite(col, 0, buffer);
    m.setColumn(col + buffer[0], 0);
    col += buffer[0] + 1;
    s++;
  }
}          


Video



Thanks for watching :)