2017年7月25日火曜日

ルネサスナイトデザインコンテストで入賞

ルネサスエレクトロニクス社主催の「ルネサスナイト・電子工作作品コンテスト」で、ロボットサークルの2つのチームが入賞しました。

女子学生3人の「ガールズパワーチーム」は、 ゼミや日本語スピーチコンテストで使用する「発表タイマー」を製作し、発表に特化した機能と使いやすい操作性が認められ、みごと三位入賞を果たしました。

2年生のサークル副部長は、ギターを弾くのが趣味なのでデジタルメトロノームを製作し発表しました。コンテストでは、作品のデモとして、作品のデモ行いながらギターの弾き語りを行い大好評となり、みごと六位に入賞しました



2017年3月24日金曜日

C言語で、カード2枚ピックアップする


C言語で、裏返したカードをピックアップする関数を作る

実行結果
プログラムソース



32: 変数XY1に、キー入力(数値)を入れる。
34: XY1から、XYの数値を求める。
35: カードをピックアップするために、index1を求める式

36: ピックアップしたカードをマイナスにして、ピックアップしたことにする

C言語で、ペアになった1から8までのカードを4x4のマトリックスで表示したカードを裏返しにする


実行結果


プログラムソース
21: カードがゼロより大きい場合はカードを裏返す(*にする)
22: ただし、マイナスになったカードを正しく表示するために、abs( ) 関数を使う

注: ピックアップしたカードは、card[i] = - card[i] として、マイナスにする。

C言語で、ペアになった1から8までのカードを4x4のマトリックスで表示す

実行結果


プログラムソース
15: system(“cls”)    全画面のクリア

23: i%4 == 3   ・・・ 4文字終わったところで、|1 を表示する。


C言語で、1から16までの1列に並んだ数を4*4のマトリックスで表示する。



     1から16までの1列に並んだ数
実行結果とプログラムソース

1から16を4*4のマトリックスで表示した数
実行結果とプログラムソース


C言語で、Fisher Yatesアルゴリズムで10枚のカードのシャッフルをします

実行結果
プログラムソース
tmpはcard[i]の仮の置き場です。
iはindexなので、カードの枚数マイナス1です。
jは乱数で作ります。ただし、0から i までの範囲です。

srand(seed)は、新しい乱数をseedで作る関数です。
seedはtime(NULL)関数で新しく作ります。


C言語で、1から6までの乱数を作る

rand()%6 で、0から5までの乱数を作る。
srand(seed) で、seed を使って乱数の種を作る。
seed は、time(NULL) 時間を使って新たしseed を作る。

実行結果
プログラムソース

2017年2月27日月曜日

arduino リズムボックス

Arduino UNOMultifunction shield を使ったリズムボックスを紹介します。


Arduinoリズムボックスの使い方

ARDUINOリズムボックスの使い方を説明します。

  • LED リズム:1/4, 2/4, ….. 9/8 まで拍子ができる
    • 3-- プッ・プッ・ピッ と3/4で変化する。
  • LED  ビート:1分間のビート数
    • 120 -- 1分に120回の音がでる。
  • スイッチ S1: リズムを変える
    • 1-->2--> …… -->9 -->1
  • スイッチ S2:ビートを早くする
  • スイッチ S3:ビートを遅くする
回路図
これは回路図ですが、8セグLEDとスイッチはMultifunction shield のを使います、そしてピエゾスピーカーをA5ピンとGNDピンに接続しました。他の部品は使っていません。


  • スピーカー 赤線:Pin A5, 黒線: GND
  • スイッチ  S1: Pin A1、S2: Pin A2, S3: Pin A3
  • 8セグLED  SDI: Pin 8, CLK: Pin 7, LAT: Pin 4



プログラム構造
MsTimer2割り込みを2msインターバルで使います。ここでは8セグLEDの表示とスイッチ(S1,S2,S3)をチェックしています。
LOOP内ではTone時間と無音時間の設定を変数beatpatternで行います。






デモビデオ



ソースコード

#include <mstimer2 .h>
#define S1 A1   // Switch S1
#define S2 A2   // Switch S2
#define S3 A3   // Switch S3
#define SDI 8   // Serial data in pin
#define CLK 7   // Clock Pin 
#define LAT 4   // Latch Pin
#define SPEAKER A5 // Speaker Pin

int s1Latch;      //Switch S1 Latch
int s2Latch;      //Switch S2 Latch
int s3Latch;      //Switch S3 Latch
int beat = 120;   //BEAT parameter
int pattern = 1;  //RYTHM parameter
int count;


void Display (byte digit4, byte digit3, byte digit2, byte digit1);

unsigned char NUM_pattern[] = {
  0b00000011, // 0
  0b10011111, // 1
  0b00100101, // 2
  0b00001101, // 3
  0b10011001, // 4
  0b01001001, // 5
  0b01000001, // 6
  0b00011011, // 7
  0b00000001, // 8
  0b00011001  // 9

};

unsigned char Digit_pattern[] = {

  0b00010000,
  0b00100000,
  0b01000000,
  0b10000000

};

void tick(void) {
  int d3, d2, d1;
  d3 = beat / 100;
  d2 = (beat - d3 * 100) / 10;
  d1 = beat % 10;
  Display(pattern, d3, d2, d1);

  if (digitalRead(S1) == LOW) {
    if (s1Latch == LOW) {
      s1Latch = 1;
      pattern++;
      if (pattern > 9) pattern = 1;
    }
  } else s1Latch = 0;

  if (digitalRead(S2) == LOW) {
    if (s2Latch == 0) {
      s2Latch = 1;
      beat++;
      if (beat > 240) beat = 240;
    }
  } else s2Latch = 0;

  if (digitalRead(S3) == LOW) {
    if (s3Latch == 0) {
      s3Latch = 1;
      beat--;
      if (beat < 30) beat = 30;
    }
  } else s3Latch = 0;


}


void setup() {
  pinMode(SDI, OUTPUT);
  pinMode(CLK, OUTPUT);
  pinMode(LAT, OUTPUT);
  pinMode(S1, INPUT);
  pinMode(S2, INPUT);
  MsTimer2::set(2, tick); // tick のコール
  MsTimer2::start();
}

void loop() {

  if (count % pattern == 0) tone(A5, 3830    , 20);
  else tone(A5,  2864   , 20);

  count++;
  delay(60000 / beat - 20);


}
void Display(byte digit4, byte digit3, byte digit2, byte digit1) {
  static int Seg_count = 0;
  Seg_count++;
  switch (Seg_count) {
    case 1:
      digitalWrite(LAT, LOW);
      shiftOut(SDI, CLK, LSBFIRST, NUM_pattern[digit1]);
      shiftOut(SDI, CLK, LSBFIRST, Digit_pattern[0]);
      digitalWrite(LAT, HIGH);
      break;
    case 2:
      digitalWrite(LAT, LOW);
      shiftOut(SDI, CLK, LSBFIRST, NUM_pattern[digit2]);
      shiftOut(SDI, CLK, LSBFIRST, Digit_pattern[1]);
      digitalWrite(LAT, HIGH);
      break;
    case 3:
      digitalWrite(LAT, LOW);
      shiftOut(SDI, CLK, LSBFIRST, NUM_pattern[digit3]);
      shiftOut(SDI, CLK, LSBFIRST, Digit_pattern[2]);
      digitalWrite(LAT, HIGH);
      break;
    case 4:
      digitalWrite(LAT, LOW);
      shiftOut(SDI, CLK, LSBFIRST, NUM_pattern[digit4] - 1);
      shiftOut(SDI, CLK, LSBFIRST, Digit_pattern[3]);
      digitalWrite(LAT, HIGH);
      Seg_count = 0;
      break;
    default:
      break;
  }
}