« 2019年8月 | トップページ | 2019年10月 »

2019年9月

2019年9月29日 (日)

Arduinoで作ろう(37) 8x8ドットマトリクスLEDでスクロールデジタル時計

8x8led_tokei_

 8x8ドットマトリクスLEDでスクロールクロックを作ってみました。
前回も使いましたが,ライブラリはこれを使うと簡単にキャラクタをスクロールさせることができます。
RTCは毎度おなじみのDS3231です。

スケッチはこれ→ 20190929_8x8matrix_scroll_clock.ino

/*
 * Scroll_Clock
 * (参考)https://code.google.com/archive/p/arudino-maxmatrix-library/wikis/Example_Display_Scrolling_Text.wiki
*/

#include <MaxMatrix.h>
#include <Wire.h>
#include <RtcDS3231.h>
RtcDS3231<TwoWire>
Rtc(Wire);
const char CH[] PROGMEM ={
3, 8, B0000000, B0000000, B0000000, B0000000, B0000000, // space
1, 8, B1011111, B0000000, B0000000, B0000000, B0000000, // !
3, 8, B0000011, B0000000, B0000011, B0000000, B0000000, // "
5, 8, B0010100, B0111110, B0010100, B0111110, B0010100, // #
4, 8, B0100100, B1101010, B0101011, B0010010, B0000000, // $
5, 8, B1100011, B0010011, B0001000, B1100100, B1100011, // %
5, 8, B0110110, B1001001, B1010110, B0100000, B1010000, // &
1, 8, B0000011, B0000000, B0000000, B0000000, B0000000, // '
3, 8, B0011100, B0100010, B1000001, B0000000, B0000000, // (
3, 8, B1000001, B0100010, B0011100, B0000000, B0000000, // )
5, 8, B0101000, B0011000, B0001110, B0011000, B0101000, // *
5, 8, B0001000, B0001000, B0111110, B0001000, B0001000, // +
2, 8, B10110000, B1110000, B0000000, B0000000, B0000000, // ,
4, 8, B0001000, B0001000, B0001000, B0001000, B0000000, // -
2, 8, B1100000, B1100000, B0000000, B0000000, B0000000, // .
4, 8, B1100000, B0011000, B0000110, B0000001, B0000000, // /
4, 8, B0111110, B1000001, B1000001, B0111110, B0000000, // 0
3, 8, B1000010, B1111111, B1000000, B0000000, B0000000, // 1
4, 8, B1100010, B1010001, B1001001, B1000110, B0000000, // 2
4, 8, B0100010, B1000001, B1001001, B0110110, B0000000, // 3
4, 8, B0011000, B0010100, B0010010, B1111111, B0000000, // 4
4, 8, B0100111, B1000101, B1000101, B0111001, B0000000, // 5
4, 8, B0111110, B1001001, B1001001, B0110000, B0000000, // 6
4, 8, B1100001, B0010001, B0001001, B0000111, B0000000, // 7
4, 8, B0110110, B1001001, B1001001, B0110110, B0000000, // 8
4, 8, B0000110, B1001001, B1001001, B0111110, B0000000, // 9
3, 8, B00000000, B00100100, B0000000, B0000000, B0000000, // :
2, 8, B10000000, B01010000, B0000000, B0000000, B0000000, // ;
3, 8, B0010000, B0101000, B1000100, B0000000, B0000000, // <
3, 8, B0010100, B0010100, B0010100, B0000000, B0000000, // =
3, 8, B1000100, B0101000, B0010000, B0000000, B0000000, // >
4, 8, B0000010, B1011001, B0001001, B0000110, B0000000, // ?
5, 8, B0111110, B1001001, B1010101, B1011101, B0001110, // @
4, 8, B1111110, B0010001, B0010001, B1111110, B0000000, // A
4, 8, B1111111, B1001001, B1001001, B0110110, B0000000, // B
4, 8, B0111110, B1000001, B1000001, B0100010, B0000000, // C
4, 8, B1111111, B1000001, B1000001, B0111110, B0000000, // D
4, 8, B1111111, B1001001, B1001001, B1000001, B0000000, // E
4, 8, B1111111, B0001001, B0001001, B0000001, B0000000, // F
4, 8, B0111110, B1000001, B1001001, B1111010, B0000000, // G
4, 8, B1111111, B0001000, B0001000, B1111111, B0000000, // H
3, 8, B1000001, B1111111, B1000001, B0000000, B0000000, // I
4, 8, B0110000, B1000000, B1000001, B0111111, B0000000, // J
4, 8, B1111111, B0001000, B0010100, B1100011, B0000000, // K
4, 8, B1111111, B1000000, B1000000, B1000000, B0000000, // L
5, 8, B1111111, B0000010, B0001100, B0000010, B1111111, // M
5, 8, B1111111, B0000100, B0001000, B0010000, B1111111, // N
4, 8, B0111110, B1000001, B1000001, B0111110, B0000000, // O
4, 8, B1111111, B0001001, B0001001, B0000110, B0000000, // P
4, 8, B0111110, B1000001, B1000001, B10111110, B0000000, // Q
4, 8, B1111111, B0001001, B0001001, B1110110, B0000000, // R
4, 8, B1000110, B1001001, B1001001, B0110010, B0000000, // S
5, 8, B0000001, B0000001, B1111111, B0000001, B0000001, // T
4, 8, B0111111, B1000000, B1000000, B0111111, B0000000, // U
5, 8, B0001111, B0110000, B1000000, B0110000, B0001111, // V
5, 8, B0111111, B1000000, B0111000, B1000000, B0111111, // W
5, 8, B1100011, B0010100, B0001000, B0010100, B1100011, // X
5, 8, B0000111, B0001000, B1110000, B0001000, B0000111, // Y
4, 8, B1100001, B1010001, B1001001, B1000111, B0000000, // Z
2, 8, B1111111, B1000001, B0000000, B0000000, B0000000, // [
4, 8, B0000001, B0000110, B0011000, B1100000, B0000000, // backslash
2, 8, B1000001, B1111111, B0000000, B0000000, B0000000, // ]
3, 8, B0000010, B0000001, B0000010, B0000000, B0000000, // hat
4, 8, B1000000, B1000000, B1000000, B1000000, B0000000, // _
2, 8, B0000001, B0000010, B0000000, B0000000, B0000000, // `
4, 8, B0100000, B1010100, B1010100, B1111000, B0000000, // a
4, 8, B1111111, B1000100, B1000100, B0111000, B0000000, // b
4, 8, B0111000, B1000100, B1000100, B0101000, B0000000, // c
4, 8, B0111000, B1000100, B1000100, B1111111, B0000000, // d
4, 8, B0111000, B1010100, B1010100, B0011000, B0000000, // e
3, 8, B0000100, B1111110, B0000101, B0000000, B0000000, // f
4, 8, B10011000, B10100100, B10100100, B01111000, B0000000, // g
4, 8, B1111111, B0000100, B0000100, B1111000, B0000000, // h
3, 8, B1000100, B1111101, B1000000, B0000000, B0000000, // i
4, 8, B1000000, B10000000, B10000100, B1111101, B0000000, // j
4, 8, B1111111, B0010000, B0101000, B1000100, B0000000, // k
3, 8, B1000001, B1111111, B1000000, B0000000, B0000000, // l
5, 8, B1111100, B0000100, B1111100, B0000100, B1111000, // m
4, 8, B1111100, B0000100, B0000100, B1111000, B0000000, // n
4, 8, B0111000, B1000100, B1000100, B0111000, B0000000, // o
4, 8, B11111100, B0100100, B0100100, B0011000, B0000000, // p
4, 8, B0011000, B0100100, B0100100, B11111100, B0000000, // q
4, 8, B1111100, B0001000, B0000100, B0000100, B0000000, // r
4, 8, B1001000, B1010100, B1010100, B0100100, B0000000, // s
3, 8, B0000100, B0111111, B1000100, B0000000, B0000000, // t
4, 8, B0111100, B1000000, B1000000, B1111100, B0000000, // u
5, 8, B0011100, B0100000, B1000000, B0100000, B0011100, // v
5, 8, B0111100, B1000000, B0111100, B1000000, B0111100, // w
5, 8, B1000100, B0101000, B0010000, B0101000, B1000100, // x
4, 8, B10011100, B10100000, B10100000, B1111100, B0000000, // y
3, 8, B1100100, B1010100, B1001100, B0000000, B0000000, // z
3, 8, B0001000, B0110110, B1000001, B0000000, B0000000, // {
1, 8, B1111111, B0000000, B0000000, B0000000, B0000000, // |
3, 8, B1000001, B0110110, B0001000, B0000000, B0000000, // }
4, 8, B0001000, B0000100, B0001000, B0000100, B0000000, // ~
};

int DIN = 8;
int CS =  9;
int CLK = 10;
int maxInUse = 1; //change this variable to set how many MAX7219's you'll use
MaxMatrix m(DIN, CS, CLK, maxInUse);
byte buffer[10];
char buff[12] ;

void setup() {
  m.init();
  m.setIntensity(1);
  Rtc.Begin() ;
 }

void loop() {
      RtcDateTime dt = Rtc.GetDateTime() ;
      sprintf(buff, " %02u:%02u:%02u", dt.Hour(), dt.Minute(), dt.Second()) ;
      printStringWithShift(buff, 100);
   }

void printCharWithShift(char c, int shift_speed) {
  if (c < 32){
    return;
  }
  c -= 32;
  memcpy_P(buffer, CH + 7*c, 7);
  m.writeSprite(8, 0, buffer);
  m.setColumn(8 + 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++;
  }
}

| | | コメント (0)

2019年9月27日 (金)

Arduinoで作ろう(36) 8x8ドットマトリクスLEDでテキストのスクロール

8x8led_scroll_text_

 ココで,パソコンのキーボードから入力したテキストを8x8ドットマトリクスLEDでスクロール表示させるスケッチを見つけました。
面白そうなので,Arduino IDEのエディタにコピペしてコンパイルしようとしたら,Arduino IDE 1.8.9だとエラーで止まってしまいます。
ちょっとググって解決法を見つけたので,少し書き換えたらコンパイルが通りました。

スケッチはコレ→ 20190927display_scrolling_text.ino

/*
 * Display_Scrolling_Text
*/

#include <MaxMatrix.h>
const char CH[] PROGMEM ={
3, 8, B0000000, B0000000, B0000000, B0000000, B0000000, // space
1, 8, B1011111, B0000000, B0000000, B0000000, B0000000, // !
3, 8, B0000011, B0000000, B0000011, B0000000, B0000000, // "
5, 8, B0010100, B0111110, B0010100, B0111110, B0010100, // #
4, 8, B0100100, B1101010, B0101011, B0010010, B0000000, // $
5, 8, B1100011, B0010011, B0001000, B1100100, B1100011, // %
5, 8, B0110110, B1001001, B1010110, B0100000, B1010000, // &
1, 8, B0000011, B0000000, B0000000, B0000000, B0000000, // '
3, 8, B0011100, B0100010, B1000001, B0000000, B0000000, // (
3, 8, B1000001, B0100010, B0011100, B0000000, B0000000, // )
5, 8, B0101000, B0011000, B0001110, B0011000, B0101000, // *
5, 8, B0001000, B0001000, B0111110, B0001000, B0001000, // +
2, 8, B10110000, B1110000, B0000000, B0000000, B0000000, // ,
4, 8, B0001000, B0001000, B0001000, B0001000, B0000000, // -
2, 8, B1100000, B1100000, B0000000, B0000000, B0000000, // .
4, 8, B1100000, B0011000, B0000110, B0000001, B0000000, // /
4, 8, B0111110, B1000001, B1000001, B0111110, B0000000, // 0
3, 8, B1000010, B1111111, B1000000, B0000000, B0000000, // 1
4, 8, B1100010, B1010001, B1001001, B1000110, B0000000, // 2
4, 8, B0100010, B1000001, B1001001, B0110110, B0000000, // 3
4, 8, B0011000, B0010100, B0010010, B1111111, B0000000, // 4
4, 8, B0100111, B1000101, B1000101, B0111001, B0000000, // 5
4, 8, B0111110, B1001001, B1001001, B0110000, B0000000, // 6
4, 8, B1100001, B0010001, B0001001, B0000111, B0000000, // 7
4, 8, B0110110, B1001001, B1001001, B0110110, B0000000, // 8
4, 8, B0000110, B1001001, B1001001, B0111110, B0000000, // 9
2, 8, B01010000, B0000000, B0000000, B0000000, B0000000, // :
2, 8, B10000000, B01010000, B0000000, B0000000, B0000000, // ;
3, 8, B0010000, B0101000, B1000100, B0000000, B0000000, // <
3, 8, B0010100, B0010100, B0010100, B0000000, B0000000, // =
3, 8, B1000100, B0101000, B0010000, B0000000, B0000000, // >
4, 8, B0000010, B1011001, B0001001, B0000110, B0000000, // ?
5, 8, B0111110, B1001001, B1010101, B1011101, B0001110, // @
4, 8, B1111110, B0010001, B0010001, B1111110, B0000000, // A
4, 8, B1111111, B1001001, B1001001, B0110110, B0000000, // B
4, 8, B0111110, B1000001, B1000001, B0100010, B0000000, // C
4, 8, B1111111, B1000001, B1000001, B0111110, B0000000, // D
4, 8, B1111111, B1001001, B1001001, B1000001, B0000000, // E
4, 8, B1111111, B0001001, B0001001, B0000001, B0000000, // F
4, 8, B0111110, B1000001, B1001001, B1111010, B0000000, // G
4, 8, B1111111, B0001000, B0001000, B1111111, B0000000, // H
3, 8, B1000001, B1111111, B1000001, B0000000, B0000000, // I
4, 8, B0110000, B1000000, B1000001, B0111111, B0000000, // J
4, 8, B1111111, B0001000, B0010100, B1100011, B0000000, // K
4, 8, B1111111, B1000000, B1000000, B1000000, B0000000, // L
5, 8, B1111111, B0000010, B0001100, B0000010, B1111111, // M
5, 8, B1111111, B0000100, B0001000, B0010000, B1111111, // N
4, 8, B0111110, B1000001, B1000001, B0111110, B0000000, // O
4, 8, B1111111, B0001001, B0001001, B0000110, B0000000, // P
4, 8, B0111110, B1000001, B1000001, B10111110, B0000000, // Q
4, 8, B1111111, B0001001, B0001001, B1110110, B0000000, // R
4, 8, B1000110, B1001001, B1001001, B0110010, B0000000, // S
5, 8, B0000001, B0000001, B1111111, B0000001, B0000001, // T
4, 8, B0111111, B1000000, B1000000, B0111111, B0000000, // U
5, 8, B0001111, B0110000, B1000000, B0110000, B0001111, // V
5, 8, B0111111, B1000000, B0111000, B1000000, B0111111, // W
5, 8, B1100011, B0010100, B0001000, B0010100, B1100011, // X
5, 8, B0000111, B0001000, B1110000, B0001000, B0000111, // Y
4, 8, B1100001, B1010001, B1001001, B1000111, B0000000, // Z
2, 8, B1111111, B1000001, B0000000, B0000000, B0000000, // [
4, 8, B0000001, B0000110, B0011000, B1100000, B0000000, // backslash
2, 8, B1000001, B1111111, B0000000, B0000000, B0000000, // ]
3, 8, B0000010, B0000001, B0000010, B0000000, B0000000, // hat
4, 8, B1000000, B1000000, B1000000, B1000000, B0000000, // _
2, 8, B0000001, B0000010, B0000000, B0000000, B0000000, // `
4, 8, B0100000, B1010100, B1010100, B1111000, B0000000, // a
4, 8, B1111111, B1000100, B1000100, B0111000, B0000000, // b
4, 8, B0111000, B1000100, B1000100, B0101000, B0000000, // c
4, 8, B0111000, B1000100, B1000100, B1111111, B0000000, // d
4, 8, B0111000, B1010100, B1010100, B0011000, B0000000, // e
3, 8, B0000100, B1111110, B0000101, B0000000, B0000000, // f
4, 8, B10011000, B10100100, B10100100, B01111000, B0000000, // g
4, 8, B1111111, B0000100, B0000100, B1111000, B0000000, // h
3, 8, B1000100, B1111101, B1000000, B0000000, B0000000, // i
4, 8, B1000000, B10000000, B10000100, B1111101, B0000000, // j
4, 8, B1111111, B0010000, B0101000, B1000100, B0000000, // k
3, 8, B1000001, B1111111, B1000000, B0000000, B0000000, // l
5, 8, B1111100, B0000100, B1111100, B0000100, B1111000, // m
4, 8, B1111100, B0000100, B0000100, B1111000, B0000000, // n
4, 8, B0111000, B1000100, B1000100, B0111000, B0000000, // o
4, 8, B11111100, B0100100, B0100100, B0011000, B0000000, // p
4, 8, B0011000, B0100100, B0100100, B11111100, B0000000, // q
4, 8, B1111100, B0001000, B0000100, B0000100, B0000000, // r
4, 8, B1001000, B1010100, B1010100, B0100100, B0000000, // s
3, 8, B0000100, B0111111, B1000100, B0000000, B0000000, // t
4, 8, B0111100, B1000000, B1000000, B1111100, B0000000, // u
5, 8, B0011100, B0100000, B1000000, B0100000, B0011100, // v
5, 8, B0111100, B1000000, B0111100, B1000000, B0111100, // w
5, 8, B1000100, B0101000, B0010000, B0101000, B1000100, // x
4, 8, B10011100, B10100000, B10100000, B1111100, B0000000, // y
3, 8, B1100100, B1010100, B1001100, B0000000, B0000000, // z
3, 8, B0001000, B0110110, B1000001, B0000000, B0000000, // {
1, 8, B1111111, B0000000, B0000000, B0000000, B0000000, // |
3, 8, B1000001, B0110110, B0001000, B0000000, B0000000, // }
4, 8, B0001000, B0000100, B0001000, B0000100, B0000000, // ~
};

int DIN = 8;
int CS =  9;
int CLK = 10;
int maxInUse = 1; //change this variable to set how many MAX7219's you'll use
MaxMatrix m(DIN, CS, CLK, maxInUse);
byte buffer[10];

void setup() {
  m.init();
  m.setIntensity(1);
  Serial.begin(9600);
}

void loop() {
  while (Serial.available() > 0) {
    byte c = Serial.read();
    Serial.println(c, DEC);
    printCharWithShift(c, 100);
    }
}

void printCharWithShift(char c, int shift_speed) {
  if (c < 32){
    return;
  }
  c -= 32;
  memcpy_P(buffer, CH + 7*c, 7);
  m.writeSprite(8, 0, buffer);
  m.setColumn(8 + 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++;
  }
}

 

 

| | | コメント (2)

2019年9月25日 (水)

Arduinoで作ろう(35) 8x8ドットマトリクスLEDで電子サイコロ

8x8led_dice_

 MAX7219というLEDディスプレイドライバが載った8x8ドットマトリクスLEDモジュールを手に入れたので,試しに電子サイコロを作ってみました。
このサイトで手に入れた LedControl.h というライブラリを使います。
タクトスイッチを押すと,くるくる回っているサイコロが止まります。というか,ランダムでサイコロの数字が決まります。

スケッチはコレ→ max7219_8x8_dice.ino

/*
 * MAX7219+8x8dotMatrixLED 電子サイコロ
 */
 
#include <LedControl.h>
int DIN = 8;
int CS =  9;
int CLK = 10;
byte dice[6][8]={
 {0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00}, //1
 {0x03,0x03,0x00,0x00,0x00,0x00,0xC0,0xC0}, //2
 {0x03,0x03,0x00,0x18,0x18,0x00,0xC0,0xC0}, //3
 {0xC3,0xC3,0x00,0x00,0x00,0x00,0xC3,0xC3}, //4
 {0xC3,0xC3,0x00,0x18,0x18,0x00,0xC3,0xC3}, //5
 {0xC3,0xC3,0x00,0xC3,0xC3,0x00,0xC3,0xC3}  //6 
};
LedControl lc=LedControl(DIN,CLK,CS,1);

void setup(){
 lc.shutdown(0,false);      
 lc.setIntensity(0,5);
 lc.clearDisplay(0);
}

void loop(){
 if (digitalRead(12) == HIGH){
    for (int i = 0; i < 6; i ++) {
    printByte(dice[i]);
    delay(50);
    }
 }
 else{
  randomSeed(analogRead(A0));
  int randnumber = random(0, 5);
  printByte(dice[randnumber]);
  delay(3000);
 }
}

void printByte(byte character []){
  int i = 0;
  for(i=0;i<8;i++){
    lc.setRow(0,i,character[i]);
  }
}

 

| | | コメント (0)

2019年9月11日 (水)

Arduinoで作ろう(34) 赤外線リモコンカー

  20190911-125823

 PanasonicのTVリモコンを使って「赤外線リモコンカー」を作ってみました。
赤外線レシーバは秋月で買ったOSRB38C9AA,DCモータドライバはL298Nを使っています。

L298nmotor__20190911134001  

スケッチはコレ→20190911_ir_dcmotorcar.ino

/*
 * Panasonicテレビリモコンで赤外線リモコンカー
 */

#include <IRremote.h>
int RECV_PIN = 4;
IRrecv irrecv(RECV_PIN);
decode_results results;
 
// 右モーター A
int enA = 10;
int in1 = 9;
int in2 = 8;
// 左モーター B
int enB = 5;
int in3 = 7;
int in4 = 6;
//speed
int speed1=100;
int speed2=80;
 
void setup(){
  irrecv.enableIRIn();
  pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
}
 
void loop() {
 if (irrecv.decode(&results)) {
 irrecv.resume();
 switch (results.value) {
 case 0x757FB4DF: //button 2(前進)
      //右モーター A
      digitalWrite(in1, HIGH);
      digitalWrite(in2, LOW);
      analogWrite(enA, speed1);
      //左モーター B
      digitalWrite(in3, HIGH);
      digitalWrite(in4, LOW);
      analogWrite(enB, speed1);  
      break;
 case 0x6BACFEEF: //button 8(後退)
      //右モーター A
      digitalWrite(in1, LOW);
      digitalWrite(in2, HIGH);
      analogWrite(enA, speed1);
      //左モーター B
      digitalWrite(in3, LOW);
      digitalWrite(in4, HIGH);
      analogWrite(enB, speed1);  
      break;
 case 0xE705551F: //button 5(停止)
      //右モーター A
      digitalWrite(in1, LOW);
      digitalWrite(in2, LOW);
      //左モーター B
      digitalWrite(in3, LOW);
      digitalWrite(in4, LOW);
      break;
 case 0x3C03E507: //button 4(右回転)
      //右モーター A
      digitalWrite(in1, LOW);
      digitalWrite(in2, LOW);
      //左モーター B
      digitalWrite(in3, HIGH);
      digitalWrite(in4, LOW);
      analogWrite(enB, speed2);  
      break;
case 0xA4A58EC7: //button 6(左回転)
      //右モーター A
      digitalWrite(in1, HIGH);
      digitalWrite(in2, LOW);
      analogWrite(enA, speed2);
      //左モーター B
      digitalWrite(in3, LOW);
      digitalWrite(in4, LOW);
      break;           
    default:break;
    }
 }
}

| | | コメント (0)

2019年9月 9日 (月)

Arduinoで作ろう(33) 7セグLEDでデジタル時計 〈その2〉

20190909multi_function_shield

 以前 紹介したMulti Function Shieldで,7セグLEDデジタル時計を作ってみました。

Multifunctionshield_tokei_
 前回のシールドはシフトレジスタ74HC595が1個,7セグLEDはカソードコモンでしたが,今回のは74HC595が2個,7セグLEDはアノードコモンです。
どう配線されているかと言うと,こんな感じ↓

20190909

 桁選択用74HC595のSDOから数字表示用74HC595のSDIに配線されてますから,Shiftoutでデータを送るときは,数字表示用のデータを先に送らないといけません。
で,スケッチはこれです→ 20190908_ks0184_tokei.ino

/*
  Multi_function_shield
  RTC DS3231 7セグLEDデジタル時計
*/
#include <Wire.h>
#include <RtcDS3231.h>
RtcDS3231<TwoWire>
Rtc(Wire);
const int latch = 4;   // Latchピン
const int clock = 7;   // Clockピン
const int data = 8;   // Serial Data In ピン
const byte digit[] = //7seg 点灯パターン(アノードコモン)
{
  B11000000, // 数字 0
  B11111001, // 1
  B10100100, // 2
  B10110000, // 3
  B10011001, // 4
  B10010010, // 5
  B10000010, // 6
  B11011000, // 7
  B10000000, // 8
  B10010000  // 9
};

const byte segment[] =
{
  B00001000, //1桁め
  B00000100, //2桁め
  B00000010, //3桁め
  B00000001  //4桁め
};

void setup() {
  pinMode(latch, OUTPUT);
  pinMode(clock, OUTPUT);
  pinMode(data, OUTPUT);
  Rtc.Begin() ;
 // DS3231の日時を「それなりの値」に設定する場合に、以下の2行をコメントアウト
 // RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__) ;
 // Rtc.SetDateTime(compiled) ;
}

void loop() {
 RtcDateTime dt = Rtc.GetDateTime() ;
  Disp(3,dt.Hour()/10%10);
  Disp(2,dt.Hour()%10);
  Disp(1,dt.Minute()/10%10);
  Disp(0,dt.Minute()%10);
 }

void Disp(byte keta,byte value){
  digitalWrite(latch, LOW);
  shiftOut(data, clock, MSBFIRST,digit[value]);
    if (keta == 2) {
    shiftOut(data, clock, MSBFIRST, digit[value]&B01111111); //hhとmmの間に小数点をつける
    }
  shiftOut(data, clock, MSBFIRST, segment[keta]);
  digitalWrite(latch, HIGH);
  delay(4);
 }

20190908

| | | コメント (0)

2019年9月 7日 (土)

Arduinoで作ろう(32) 7セグLEDでデジタル時計

Kcs1

 aitendoで買ったシールドで,このラーニングキットK-CS1ってのを忘れてました。
4桁7セグ表示器+74HC595ディスプレイ回路,温度センサインターフェース,クロックモジュールインターフェース,電圧メーター回路,タクトスイッチx2回路,超音波センサインターフェース,ブザー回路がついていて,学習用に便利なものです。
 今回はこれでデジタル時計を作ってみます。RTCはDS3231で,ライブラリはこれを使いました。

Fritzingで描いた回路図はこうなります。

7segled_tokei_2 シフトレジスタ74HC595があるので比較的ラクですが,スマートなコードはなかなかうまく書けませんなあ。もう少し勉強が必要ですね。

スケッチはこれ→20190907_7segled_clock.ino

// aitendoシールド K-CS1 + RTC DS3231 + 7セグLED デジタル時計

#include <Wire.h>
#include <RtcDS3231.h>
RtcDS3231<TwoWire>
Rtc(Wire);
const byte segment[] = {4,5,6,7}; //各桁カソードピン
const int clock = 10;   //74HC595 → Pin 10
const int latch = 9;    //74HC595 → Pin 9
const int data = 8;     //74HC595 → Pin 8
const byte digit[] =       //7セグLED 点灯パターン
{
  B00111111, //0
  B00000110, //1
  B01011011, //2
  B01001111, //3
  B01100110, //4
  B01101101, //5
  B01111101, //6
  B00000111, //7
  B01111111, //8
  B01101111  //9
};

void setup ()
 {
  for (int i = 0; i < 4; i++) {
  pinMode(segment[i], OUTPUT);
  }
  pinMode(latch, OUTPUT);
  pinMode(clock, OUTPUT);
  pinMode(data, OUTPUT);
  Rtc.Begin() ;
 // DS3231の日時を「それなりの値」に設定する場合に、以下の2行をコメントアウト
 // RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__) ;
 // Rtc.SetDateTime(compiled) ;
 }

void loop () {
  RtcDateTime dt = Rtc.GetDateTime() ;
  Disp(3,dt.Hour()/10%10);
  Disp(2,dt.Hour()%10);
  Disp(1,dt.Minute()/10%10);
  Disp(0,dt.Minute()%10);
 }

void Disp(byte keta,byte value){
  for (byte j = 0; j < 4; j++) {
   digitalWrite(segment[j], HIGH); // 全桁LEDをOFF
   }
  digitalWrite(segment[keta], LOW);
  digitalWrite(latch, LOW);
  shiftOut(data, clock, MSBFIRST,digit[value]);
   if (keta == 2) {
   shiftOut(data, clock, MSBFIRST, digit[value]|B10000000); //hhとmmの間に小数点をつける
   }
  digitalWrite(latch, HIGH);
  delay(4);
 }

Rimg0044

| | | コメント (0)

2019年9月 5日 (木)

Arduinoで作ろう(31) ATtiny13をArduino IDEで使ってみる

 タイトルの「Arduinoで作ろう」からは少しズレてるような気もしますが,8ピンDIPの小さなAVRマイコンATtiny13をArduino IDEで使えるようにしてみました。

201909055

 まず,Arduino IDEのボード選択にATtiny13が出てくるようにしましょう。
そのために,まずArduino IDEの「環境設定」にある「追加のボードマネージャのURL」に https://kimio-kosaka.github.io/bitDuino13/package_bitDuino13_index.json を追加します。

Image11

 そうすると,「ツール」の「ボードマネージャ」の一番下に「bitDuino13」というパッケージが現れますから,これをインストールします。

Image12

 これで準備OK。「ツール」の「ボード選択」で一番下に「ATtiny13」が現れますから,これを選択します。

Image13

 さて,ここでaitendoのATtiny ISPシールドきっと の登場です。これはArduino UNOに取り付けるシールドで,各種ATtinyに対応したスグレモノです。ブレッドボード上で面倒な配線をしなくていいから便利ですよ。これはオススメ。

20190905

 この状態で,Arduinoで作ろう(28) に書いた手順でATtiny13にブートローダを書き込み,続けてスケッチを書き込んでやればOKです。
内部クロックは9.6MHzにしておきましょうか。(半端なクロック数ですな)

201909054

void setup() {
  pinMode(3, OUTPUT);
}
 
void loop() {
  digitalWrite(3, HIGH);
  delay(1000);
  digitalWrite(3, LOW);
  delay(1000);
}

こんな感じのLチカのスケッチを書き込んでみました。

201909052

| | | コメント (0)

2019年9月 3日 (火)

Arduinoで作ろう(30) ATmega328Pを内部クロック8MHzで動かしてみた

  Arduino UNOや「あちゃんでいいの」などArduino互換機に載ってるATmega328Pは外付けXTAL(16MHz)で動いてますが,ATmega328Pは内部クロック(8MHz)を持ってるんだそうです。じゃ,その内部クロックで動かしてみようじゃないですか。

 そのために,まずこのページの真ん中あたりにある breadboard-1-6-x.zipをダウンロードし,解凍してできる「breadboard」というフォルダをArduino IDEがインストールされているフォルダの「hardware」フォルダ内に置きます。
Image00

 そうすると,Arduino IDEの「ツール」→「ボード」の中に「ATmega328 on a breadboard (8 MHz internal clock)」が現れるので,これを選びます。
Image01
 内部クロック8MHzで動かしたいATmega328(ターゲット)を「極貧ブートローダ書き込み機」に取りつけて,Arduino UNO(ArduinoISPを書き込んだAVRライタ)に載せ,ブートローダを書き込みます。

20190901

Image02

これで,内部クロック8MHzで動くATmega328Pのできあがりです。

 このまま続けてこのATmega328Pに「Blink」を書き込んでみます。書き込むときに「書込装置を使って書き込む」を選ぶのがポイントです。

Image03

「極貧ブートローダ書き込み機」から「Blinkを書き込んだ内部クロック8MHzで動くAtmega328P」を取り外し,ブレッドボードに載せて配線します。

20190831

おお,うまくいきました🎵

| | | コメント (0)

2019年9月 1日 (日)

Arduinoで作ろう(29) 「あちゃんでいいの」にスケッチを書き込んでみた

20190827

 前回ブートローダを書き込んだATmega328Pをあちゃんでいいのに取り付けて,スケッチを書き込んでみます。
ま,スケッチ例「Blink」でいいかな。
あちゃんでいいの と USB-シリアルコンバータモジュールを接続して,パソコンに繋ぎましょう。このモジュールはCH340を積んだこれなんだけど,老眼の僕にとってはハンダ付けが大変でした。ハズキルーペ必須ですw

  あちゃんでいいの 変換モジュール
 P (PROG_RESET)  DTR
 G (GND)  GND
 5 (5V)  5V
 R (RXD)  TXD
 T (TXD)  RXD

 上記の表のように接続しますが,ピンヘッダがこの順序通り並んでるので,両端にピンソケット(1×5)メスのついたケーブルがそのまんま使えます。こりゃいい。
Arduino IDE でスケッチを書き込むとき,「ボード」は「Arduino UNO」で大丈夫です。

201908271242

電池を電源にしてLチカしてみました。VCCは7ピン,GNDは8ピンです。

| | | コメント (0)

« 2019年8月 | トップページ | 2019年10月 »