PIAST OLED プログラムのソースを表示
←
PIAST OLED プログラム
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます: メール確認された利用者、
管理者
。
このページのソースの閲覧やコピーができます。
[[カテゴリ:PIAST]] OLED(SO1602AWxx-UC-W)表示処理用プログラム ==OLED初期化== oledinit.c #include <stdio.h> #include <stdlib.h> #include <strings.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <string.h> #include <sys/ioctl.h> #include <linux/i2c-dev.h> main(int argc, char *argv[]) { int i2c_fd; //I2Cバス用のファイル・ディスクリプタ char *i2cbus = "/dev/i2c-1"; //バス1側のデバイス名 int oled_addr = 0x3c; //OLEDのアドレス unsigned char oled_reg = 0x40; //書き込み対象のレジスタ int i; //汎用カウンタ unsigned char buf[4]; //書き込み用バッファ char dmesg[256]; if(argc < 1) exit(1); //I2Cバスをオープンする if((i2c_fd = open(i2cbus, O_RDWR))<0){ perror("oledinit open"); exit(1); } //スレーブのアドレスをioctlで設定 if(ioctl(i2c_fd, I2C_SLAVE, oled_addr) < 0){ perror("oledinit can't set slave"); close(i2c_fd); exit(1); } usleep(100); //OLED初期化 //ディスプレイ消去 buf[0] = 0x00; buf[1] = 0x01; write(i2c_fd,buf,2); usleep(20); //カーソルをホームへ buf[0] = 0x00; buf[1] = 0x02; write(i2c_fd,buf,2); usleep(20); //表示ON,カーソル表示なし buf[0] = 0x00; buf[1] = 0x0c; write(i2c_fd,buf,2); usleep(20); //表示ON buf[0] = 0x00; buf[1] = 0x01; write(i2c_fd,buf,2); usleep(20); close(i2c_fd); } ==OLED1行目表示用== oledsp1.c #include <stdio.h> #include <stdlib.h> #include <strings.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <string.h> #include <sys/ioctl.h> #include <linux/i2c-dev.h> main(int argc, char *argv[]) { int i2c_fd; //I2Cバス用のファイル・ディスクリプタ char *i2cbus = "/dev/i2c-1"; //バス1側のデバイス名 int oled_addr = 0x3c; //OLEDのアドレス unsigned char oled_reg = 0x40; //書き込み対象のレジスタ int i; //汎用カウンタ unsigned char buf[4]; //書き込み用バッファ char dmesg[256]; if(argc < 2) exit(1); //I2Cバスをオープンする if((i2c_fd = open(i2cbus, O_RDWR))<0){ perror("oledinit open"); exit(1); } //スレーブのアドレスをioctlで設定 if(ioctl(i2c_fd, I2C_SLAVE, oled_addr) < 0){ perror("oledinit can't set slave"); close(i2c_fd); exit(1); } //カーソルをホームへ buf[0] = 0x00; buf[1] = 0x02; write(i2c_fd,buf,2); usleep(20); //1行目処理 strncpy(dmesg, argv[1], 16); //メッセージ書き込み for(i=0;i<16;i++) { buf[0] = 0x40; if(dmesg[i] == 0) break; buf[1] = dmesg[i]; write(i2c_fd,buf,2); usleep(20); } close(i2c_fd); } ==OLED2行目表示用== oledsp2.c #include <stdio.h> #include <stdlib.h> #include <strings.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <string.h> #include <sys/ioctl.h> #include <linux/i2c-dev.h> main(int argc, char *argv[]) { int i2c_fd; //I2Cバス用のファイル・ディスクリプタ char *i2cbus = "/dev/i2c-1"; //バス1側のデバイス名 int oled_addr = 0x3c; //OLEDのアドレス unsigned char oled_reg = 0x40; //書き込み対象のレジスタ int i; //汎用カウンタ unsigned char buf[4]; //書き込み用バッファ char dmesg[256]; if(argc < 2) exit(1); //I2Cバスをオープンする if((i2c_fd = open(i2cbus, O_RDWR))<0){ perror("oledinit open"); exit(1); } //スレーブのアドレスをioctlで設定 if(ioctl(i2c_fd, I2C_SLAVE, oled_addr) < 0){ perror("oledinit can't set slave"); close(i2c_fd); exit(1); } //DDRAMを2行目へ buf[0] = 0x00; buf[1] = 0xa0; write(i2c_fd,buf,2); usleep(20); //2行目処理 strncpy(dmesg, argv[1], 16); //メッセージ書き込み for(i=0;i<16;i++) { buf[0] = 0x40; if(dmesg[i] == 0) break; buf[1] = dmesg[i]; write(i2c_fd,buf,2); usleep(20); } close(i2c_fd); } ==おまけ:1行クロック== 1lineclock.sh #!/bin/sh /home/piast/oledinit while : do L1=`date +%m/%d` L2=`date +%H:%M:%S` /home/piast/oledsp2 " $L1 $L2" sleep 1 done 1行目に表示するとチラつくので2行目に表示させる。/etc/rc.localに以下のように登録しておけば2行目は常時時計状態になる。 /home/piast/1lineclock.sh > /dev/null 2>&1 & このスクリプトを動かしていてもoledsp1で1行目に任意の文字を表示させても問題なし。 ==おまけ:着信番号表示== exten => ${MYNUMBER1},n,Set(DMSG="IN:${CALLERID(num)}") exten => ${MYNUMBER1},n,System(/home/piast/oledsp1 " ") exten => ${MYNUMBER1},n,System(/home/piast/oledsp1 ${DMSG}) こんな感じでextenに仕込むと着信した番号を1行目に表示することができます。最初のoledsp1は前に出てたのを消すため。
PIAST OLED プログラム
に戻る。
ナビゲーション メニュー
個人用ツール
アカウント作成
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
ソースを閲覧
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
ヘルプ
広告
サイトコンテンツ
コミュニティ
Asterisk
Asterisk 18
Asterisk 20
Asterisk 22
IP電話機
購入情報
導入事例
回線接続
ベンダー
ひかり電話
セキュリティ
イベント情報
スペシャル
Asterisk pjsip
ABS
黒電話 ハック
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報