کار با ماژول تمام عیار mc60 – قسمت ششم – نمایشگر oled

0
419
کار با ماژول تمام عیار mc60 – قسمت ششم – نمایشگر oled
نمایشگر oled با ماژول mc60

در قسمت‌ قبل سراغ ساخت یک mp3 player رفتیم با ماژول mc60، توی این قسمت میخوایم سراغ به بخش جدایی ناپذیر از پروژه هامون بریم و اون چیزی نیست جز نمایشگر، توی این قسمت سراغ راه اندازی نمایشگر oled با ماژول mc60 میریم، پس با ما همراه باشید…

 

برای کار با ماژول mc60 بیشترین چیزی که کمکمون میکنه داکیومنت و example های کاملی هست که شرکت quectel در اختیارمون گذاشته، اما برای بحث نمایشگر oled متأسفانه کد آماده‌ای موجود نیست، به همین دلیل من کتابخونه ای رو برای کار با نمایشگرهای oled آماده کردم که میتونید برای mc60 از اون استفاده کنید.

اول از همه لازم هست که فایل هدر و سورس رو به پروژتون اضافه کنید، برای این کار فایل oled.h و Adafruit5x7.h رو به پوشه include و فایل oled.c رو به پوشه custom اضافه می‌کنیم (فایل‌ها میتونید از گیت هاب من دریافت کنید).

 

کد ما برای دو سایز 128*32 و 128*64 آماده شده که باید نوع مورد نظرتون رو با define کردن توی خط 17 و 18 فایل oled.h مشخص کنید:

//#define Adafruit128x64 
#define Adafruit128x32

کد زیر هم برای تست کتابخانه آماده شده که میتونید استفاده کنید:

#define __CUSTOMER_CODE__
#ifdef __CUSTOMER_CODE__

#include "ql_type.h"
#include "ql_stdlib.h"
#include "ql_trace.h"
#include "ql_gpio.h"
#include "ql_uart.h"
#include "ql_iic.h"
#include "ql_error.h"
#include "oled.h"

///for DEBUG///////////////////////////////////////////////////////////////////////////////////////////////////////////
#define SERIAL_RX_BUFFER_LEN 2048
#define DEBUG_PORT UART_PORT1
#define DBG_BUF_LEN 512
static char DBG_BUFFER[DBG_BUF_LEN];
#define APP_DEBUG(FORMAT, ...) \
{ \
Ql_memset(DBG_BUFFER, 0, DBG_BUF_LEN); \
Ql_sprintf(DBG_BUFFER, FORMAT, ##__VA_ARGS__); \
Ql_UART_Write((Enum_SerialPort)(DEBUG_PORT), (u8 *)(DBG_BUFFER), Ql_strlen((const char *)(DBG_BUFFER))); \
}
char m_Read_Buffer[SERIAL_RX_BUFFER_LEN];
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

static void CallBack_UART_Hdlr(Enum_SerialPort port, Enum_UARTEventType msg, bool level, void *customizedPara);

const u8 ant_1[] = {
0b11111111,
0b01011010,
0b00111100,
0b00011000,
0b00011000,
0b00011000,
0b00011000,
0b00011000,
};

const u8 ant_2_full[] = {
0b00000001,
0b00000001,
0b00000101,
0b00000101,
0b00010101,
0b00010101,
0b01010101,
0b01010101,
};

const u8 ant_low[] = {
0b00000000,
0b00000000,
0b00000000,
0b00000000,
0b00010000,
0b00010000,
0b01010000,
0b01010000,
};

const u8 play[] = {
0b00000000,
0b11000000,
0b11110000,
0b11111100,
0b11111111,
0b11111100,
0b11110000,
0b11000000,
};
const u8 pause[] = {
0b11100111,
0b11100111,
0b11100111,
0b11100111,
0b11100111,
0b11100111,
0b11100111,
0b11100111,
};
const u8 stop[] = {
0b11111111,
0b11111111,
0b11111111,
0b11111111,
0b11111111,
0b11111111,
0b11111111,
0b11111111,
};

const u8 bat_1[] = {
0b11111111,
0b10000000,
0b10111111,
0b10111111,
0b10111111,
0b10111111,
0b10000000,
0b11111111,
};

const u8 bat_2[] = {
0b11111100,
0b00000110,
0b00000111,
0b00000111,
0b00000111,
0b00000111,
0b00000110,
0b11111100,
};

void proc_main_task(s32 taskId)
{
s32 ret;
ST_MSG msg;

// Register & open UART port
Ql_UART_Register(UART_PORT1, CallBack_UART_Hdlr, NULL);
Ql_UART_Open(UART_PORT1, 115200, FC_NONE);

APP_DEBUG("START PROGRAM (SISOOG.COM)\r\n");

ret = Ql_IIC_Init(0, PINNAME_RI, PINNAME_DCD, TRUE);

Ql_Sleep(100);
ret = Ql_IIC_Config(0, TRUE, I2C_ADDRESS, 1500);

oledInit();
oledClear();
oledFill();
Ql_Sleep(500);
oledClear();
Ql_Sleep(500);
setFont(Adafruit5x7);

set2X();
setCursor(28, 0);
oledPrint("Sisoog");
set1X();
setCursor(0, 3);
oledPrint("Mahdi.h");

oledDraw(0, 0, bat_1);
oledDraw(8, 0, bat_2);

oledDraw(110, 0, ant_1);
oledDraw(119, 0, ant_2_full);

oledDraw(50, 3, play);
oledDraw(70, 3, pause);
oledDraw(90, 3, stop);

while (1)
{
Ql_OS_GetMessage(&msg);
switch (msg.message)
{
case 0:
break;
default:
break;
}
}
}

static void CallBack_UART_Hdlr(Enum_SerialPort port, Enum_UARTEventType msg, bool level, void *customizedPara)
{
u32 rdLen = 0;
s32 ret;

switch (msg)
{
case EVENT_UART_READY_TO_READ:
{
Ql_memset(m_Read_Buffer, 0x0, sizeof(m_Read_Buffer));
rdLen = Ql_UART_Read(port, m_Read_Buffer, sizeof(m_Read_Buffer));

if (Ql_strstr(m_Read_Buffer, "ok"))
{
APP_DEBUG("ok\r\n");
}
break;
}
}
}
#endif // __CUSTOMER_CODE__


اینجا هم میتونید توابع و عملکرد هر کدوم از توابع کتابخونه رو مشاهده کنید

 //آماده سازی و مقدار دهی اولیه نمایشگر
oledInit();
// پاک کردن صفحه
oledClear();
// روشن کردن تمام پیکسل های صفحه
oledFill();
//تنظیم فونت نوشتاری
setFont(Font);
//تغییر سایز فونت به حالت 1 برابر
set1X();
//تغییر سایز فونت به حالت 2 برابر
set2X();
//نمایش متن روی نمایشگر
oledPrint(text);
//جابجایی مکان نما
setCursor(x, y);
//نمایش یک آیکون
oledDraw(x, y, 8_8_icon);

سخت افزار mc60 oled

برای اتصال سخت افزاری به دلیل این که سطح ولتاژ ماژول mc60 ما 2.8 ولت هست و نمایشگر oled 5 ولت ، باید از level shifter استفاده کنیم.

در تصویر پایین میتونید اتصال سخت افزار من رو به همراه خروجی کدی که در بالا قرار دادم مشاهده کنید:

سخت افزار mc60 oled

سخت افزار mc60 oled

 

 

 

منبع:سیسوگ

مطلب قبلیکار با ماژول تمام عیار mc60 – قسمت هفتم – کار با MQTT
مطلب بعدیمهندسی معکوس: لبهٔ تکنولوژی با گیدرا (Ghidra) – شماره 04

پاسخ دهید

لطفا نظر خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید