Tải bản đầy đủ - 0 (trang)
Quy tắc quét led ma trận.

Quy tắc quét led ma trận.

Tải bản đầy đủ - 0trang

 4 con 74hc595 tếp theo (5 đến 8) phụ trách bật tắt 4 hàng led là 5,6,7,8. cụ thể

con 5 bật tắt 8 led đầu tiên,con 6 bật tắt 8 led tiếp theo ,con 7 bật tắt 8 led tiếp

theo,con 8 bật tắt 8 led cuối cùng

 4 con 74hc595 tếp theo (9 đến 12) phụ trách bật tắt 4 hàng led là 9,10,11,12. cụ

thể con 9 bật tắt 8 led đầu tiên,con 10 bật tắt 8 led tiếp theo ,con 11 bật tắt 8 led

tiếp theo,con 12 bật tắt 8 led cuối cùng.

 4 con 74hc595 cuối cùng (13 đến 16) phụ trách bật tắt 4 hàng led là

13,14,15,16. cụ thể con 13 bật tắt 8 led đầu tiên,con 14 bật tắt 8 led tiếp theo

,con 15 bật tắt 8 led tiếp theo,con 16 bật tắt 8 led cuối cùng

 Dữ liệu được truyền như sau:

 Tức là truyền theo kiểu từ trên xuống, từ phải sang trái, bắt đầu từ con

74hc595 thứ 4 -> thứ 8 -> thứ 12 -> thứ 16 -> thứ 3 -> thứ 7 .....

Cách quét led rất đơn giản, chỉ cần quét 4 lần là quét được toàn bộ module,

đơn giản cụ thể như sau:

 Lần thứ nhất: tắt hết các hàng, truyền dữ liệu cho 74hc595 bật hàng số

1,5,9,13

( lần này quyét 4 hàng 1 lúc)

 Lần thứ hai: tắt hết các hàng, Truyền dữ liệu cho 74hc595 bật hàng số

2,6,10,14 (lần này quyét 4 hàng 1 lúc)

 Lần thứ ba: tắt hết các hàng, Truyền dữ liệu cho 74hc595 bật hàng số

3,7,11,15

( lần này quyét 4 hàng 1 lúc)

 Lần thứ tư: tắt hết các hàng, Truyền dữ liệu cho 74hc595 bật hàng số

4,8,12,16 ( lần này quyét 4 hàng 1 lúc)

 Mã nguồn chương trinh điều khiển.

#include

#include

#include "SystemFont5x7.h"

#include "Arial_Black_16_ISO_8859_1.h"

#define DISPLAYS_ACROSS 2

#define DISPLAYS_DOWN 1

DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);

#include

48



#include

SoftwareSerial MySim900A(5, 4); //RX, TX

int PWR = A3;

byte len;

int remember = 0;

short sms_mode = false;

short flag = false;

short mode = false;

int answer;

bool kt = false;

String data_old = "";

String text_sms = "";

String var = "";

const int buffer_size = 300;

int xbuff = 0;

char buffer[buffer_size];

char sms_buf[180];

char c = 0;

char c1 = 0;

char *num1 = 0;

char *num2 = 0;

49



char *ptr1 = 0;

char *ptr2 = 0;

char *ptr3 = 0;

char KT[] = "KT";

char NT[] = "NT";

char aux_string[30];

char number[20];

char pass[6] = "12345";

//-------------------------------------------------------------------------------------void ScanDMD()

{

dmd.scanDisplayBySPI();

}

//-------------------------------------------------------------------------------------void setup() {

MySim900A.begin(9600);

Serial.begin(19200);

dmd.clearScreen( true );

pinMode(PWR, OUTPUT);

power_on(); // Power on Module SIM900A

init_SIM900A();

50



Xoa_buffer();// Configuration for Module SIM900A

}

void loop()

{

Receive_uart();

Tranffer();

Receive_sms();

}

void Receive_uart()

{

if (Serial.available () > 0)

{

delay(10);

var = "";

while (Serial.available() > 0 )

{

char data = Serial.read() ;

var += data;

Serial.println(var);

}

Serial.write("Send completed");

51



while (1) {

if (Serial.available()> 0 || MySim900A.available() > 0) break;

Serial.println("asa");

DisPlay(var);

}

}

}

//*********************************************************

Void receive_sms() {

if (MySim900A.available() > 0) {

while (MySim900A.available() > 0) {

c = MySim900A.read();

if (c == '\n' || c == '#')

{

c1 = c;

buffer[xbuff] = '\0';

}

if (c == '.' && c1 == '#') {

sms_mode = true;

}

if (xbuff >= buffer_size) {

52



xbuff = 0;

}

if (c != '\r') {

buffer[xbuff] = c;

xbuff++;

}

xuli();

}

}

}

//*********************************************************

void receive_data()

{

String data = "";

int len = 0;

while (MySim900A.available() != 0)

{

char buf = MySim900A.read();

data = data + String(buf);

len = data.length();

if (data_old != data) {

53



data_old = data;

data_old = data_old.substring(30, (len - 4));

}

else {

data_old;

}

}

}

//*********************************************************

Void ShowSerialData()

{

while (MySim900A.available() != 0) {

Serial.write(char (MySim900A.read()));

}

}

//*********************************************************

void Tranffer(void) {

while(MySim900A.available()>0 ){

MySim900A.println("AT+CSQ");

delay(100);

ShowSerialData();

54



MySim900A.println("AT+CGATT?");

delay(100);

ShowSerialData();

MySim900A.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"");

delay(1000);

ShowSerialData();

MySim900A.println("AT+SAPBR=3,1,\"APN\",\"www\"");

delay(1000);

ShowSerialData();

MySim900A.println("AT+SAPBR=1,1");

delay(1000);

ShowSerialData();

MySim900A.println("AT+HTTPINIT");

delay(2000);

ShowSerialData();



MySim900A.println("AT+HTTPPARA=\"URL\",\"dongtroi.tk/demo/dat

a.php\"");

delay(2000);

ShowSerialData();

MySim900A.println("AT+HTTPACTION=0");

delay(5000);

ShowSerialData();

MySim900A.println("AT+HTTPREAD");

delay(300);

receive_data();

Serial.println(data_old);

//MySim900A.println("AT+HTTPTERM");

while (!MySim900A.available()) {

if (MySim900A.available() > 0 || Serial.available() > 0 ) break;

DisPlay(data_old);

}

receive_sms();

}

}

55



void xuli() {

while (sms_mode) {

num1 = strchr((char *)(buffer), '"');

num2 = num1 + 2;

num1 = strchr((char *)(num2), '"');

if (num1 != NULL)

{

*num1 = 0;

strcpy(number, num2);

Serial.print("so dien thoai :");

Serial.println(number);

}

ptr1 = strchr(num1 + 1, 0x0a);

if (ptr1 != NULL) {

ptr1++;

char* p_char1 = strchr((char *)(ptr1), 0x0d);

if (p_char1 != NULL) {

*p_char1 = 0;

}

}

ptr1 = strstr(ptr1, pass);

if (ptr1[0] == pass[0] && ptr1[1] == pass[1] && ptr1[2] == pass[2]

&& ptr1[3] == pass[3] && ptr1[4] == pass[4] && ptr1[5] == '>')

{

ptr2 = strchr((char *)(ptr1), '>');

ptr3 = ptr2 + 1;

ptr2 = strchr((char *)(ptr3), '.');

if (ptr2 != NULL)

{

*ptr2 = 0 ;

text_sms = "";

strcpy(sms_buf, ptr3);

text_sms += sms_buf ;

Serial.print("chuoi xl :");

Serial.println(text_sms);

mode = true ; flag = true;

}

}

else

{

if ((ptr1[5] != '>' || ptr1[4] != pass[4]) && ptr1 != NULL )

{

mode = false ; flag = true;

}

56



else {

kt = true;

}

}

send_SMS();

flag = false;

// khi send sms thi sim # 2

Xoa_buffer();

// while (MySim900A.available() == 0) {

// DisPlay(text_sms);

// }

}

}

void DisPlay(String chuoi)

{ dmd.clearScreen( true );

dmd.selectFont(Arial_Black_16_ISO_8859_1);

String chuoi_moi = "";

char chuyen[200];

if (chuoi_moi != chuoi) {

chuoi_moi = chuoi;

chuoi_moi.toCharArray(chuyen, chuoi_moi.length() + 1);

}

dmd.drawMarquee(chuyen, strlen(chuyen), (32 *

DISPLAYS_ACROSS) - 1, 0);

long start = millis();

long timer = start;

bool t = false;

while (!t) {

ScanDMD();

if ((timer + 50) < millis()) {

t = dmd.stepMarquee(-1, 0);

timer = millis();

}

}

}

void send_SMS() {

sprintf(aux_string, "AT+CMGS=\"%s\"", number);

answer = sendAT(aux_string, ">", 2000);

if (answer == 1)

{ if (flag == true)

{ switch (mode)

{ case 1: {

MySim900A.println("Gui Thanh cong"); Serial.println("Gui

thanh cong");

break;

}

57



case 0: {

MySim900A.println("Error, KIEM TRA LAI CU PHAP NT");

Serial.println("ERROR, KIEM TRA LAI CU PHAP NT");

break;}

default :

break;}

}

MySim900A.write(26);

}



58



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Quy tắc quét led ma trận.

Tải bản đầy đủ ngay(0 tr)

×