ユーザー名:

パスワード:


パスワード紛失

新規登録
ビートス オンラインショップへ
アブソリュート株式会社様へ

実際に材料のモジュールを購入し、送料込み586円で、USB(USBシリアル)接続の7セグ・ディスプレイを作ってみました。

このトピックの投稿一覧へ

実際に材料のモジュールを購入し、送料込み586円で、USB(USBシリアル)接続の7セグ・ディスプレイを作ってみました。

msg# 1.2.1
depth:
2
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2018-5-13 10:13 | 最終変更
disklessfu  <EXPERT>   投稿数: 211
動画をアップしました。
https://www.youtube.com/watch?v=jXxo90emvyI


作り方は、中華・激安7セグ・モジュールと、同じく中華・激安の互換Arduino nanoを、僅か4本のリード線で単純にVCC,GND,CLK,DIOを接続した上で基板同士をホットボンドで軽く接着するだけです。
あとはArduinoに(https://github.com/bremme/arduino-tm1637/blob/master/examples/SerialPrint/SerialPrint.ino)のスケッチを書き込めば完成です。
作例では、中華・激安7セグ・モジュール(TM1637搭載)は、Amazonで3個セット通常配送無料で、650円(1個あたり217円)、
中華・激安の互換Arduino nanoはAmazonで、USBシリアル変換チップがCH340のタイプで、送料込み369円でした。
CH340は中華製のわりと新しめのチップなのでドライバのインストールが必要かな?と思っていましたが、実際にはWindows10、Linux(x64)、Linux(Raspberry Pi)全て、インボックスドライバがあり、自動認識されました。
ネガティブ面の情報も記しておきます。
ArduinoとTM1637との間は、I2C派生プロトコルでの通信なので時間がかかりますし、Arduino側のパワーも食います。なので、書き換えと書き換えの間は最低でも約1秒、開ける必要があります。でもスクロール機能がありますから、1度に長い文字列を書き込めば、ある程度、そのネガ面は克復できるでしょう。
あと、多分Arduinoのライブラリの制限でしょうけど、「$echo > /dev/ttyUSB0」みたいな使い方はできません。きちんとopenしてその後、環境によりますが、1.5秒から2秒待った後に最初の書き込みをおこなう必要があります。ただし、その後は、上述のように、1秒毎の書き込みが可能です。



動画の前半撮影時にPC側で使用していた、サンプルプログラムも載せておきます。
#include <stdio.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <termios.h>
#include <time.h>
#include <string.h>

#define SERIAL_PORT "/dev/ttyUSB0"

int main(int argc, char *argv[])
{
struct termios tio; // シリアル通信設定
int baudRate = B9600;
int i, j = 0;
int fd;
time_t timer;
char device[128];
char myTime[9];
char str[5];
memset(str, 0, 5);
unsigned char buf[5];

if(argc > 1)
strcpy(device, argv[1]);
else
strcpy(device, SERIAL_PORT);

fd = open(device, O_WRONLY);
if (fd < 0) {
printf("open error\n");
return -1;
}

sleep(2);

tio.c_cflag += CLOCAL; // ローカルライン(モデム制御なし)
tio.c_cflag += CS8; // データビット:8bit
tio.c_cflag += 0; // ストップビット:1bit
tio.c_cflag += 0; // パリティ:None

cfsetispeed( &tio, baudRate );
cfsetospeed( &tio, baudRate );
cfmakeraw(&tio); // RAWモード
tcsetattr( fd, TCSADRAIN, &tio ); // デバイスに設定を行う
ioctl(fd, TCSETS, &tio); // ポートの設定を有効にする

while(1)
{
time(&timer);
timer+=1;
strftime(myTime, 9, " %H%M%S", localtime(&timer));
strncpy(str, myTime+j, 4);

sprintf(buf, "%s\n", str);
write(fd, buf, 5);

j+=4;
if(j==8)
j=0;
sleep(1);
}

close(fd);
return 0;
}
イイね!の数:0 返信する

この投稿に返信する

題名
ゲスト名   :
投稿本文

投稿ツリー

  条件検索へ