5x7ドットマトリクスLEDで文字を出力してみる - GEEKY Fab 残像効果利用
LEDで文字を表現!マトリクスLEDの使い方 | Device Plus - デバプラ これは8x8
----------------------------------------------------
https://www.ingenious.jp/articles/howto/raspberry-pi-howto/install-java/#toc1
これはkit-scopeのために必要
-------------------------- 4桁7セグ ---------------------------------------
https://omoroya.com/arduino-lesson25/ カソードコモンで各LEDに抵抗をおく
ーーーーーーー 1桁7セグ 10秒タイマ ーーーーーーーーーーーーーーーーーーーーーー
#define SRCLK (7)
#define RCLK (6)
#define SER (5)
// 点灯パターン(1=点灯, 0=消灯)
//const uint8_t one = 0b00101000;
//const uint8_t two = 0b11001101;
//const uint8_t three = 0b01101101;
//const uint8_t four = 0b00101011;
//const uint8_t five = 0b01100111;
//const uint8_t six = 0b11100111;
//const uint8_t seven = 0b00101100;
//const uint8_t eight = 0b11101111;
//const uint8_t nine = 0b00101111;
//const uint8_t zero = 0b11101110;
//const uint8_t dp = 0b00010000;
uint8_t numbers[11] = {0b11101110,0b00101000,0b11001101,0b01101101,0b00101011,0b01100111,0b11100111,0b00101100,0b11101111,0b00101111,0b00010000};
void setup() {
Serial.begin(9600);
pinMode(SRCLK, OUTPUT);
pinMode(RCLK, OUTPUT);
pinMode(SER, OUTPUT);
digitalWrite(SRCLK, LOW);
}
void dispdp(){
// シフトレジスタに1バイトのデータを送信する
Serial.println("dp");
shiftOut(SER, SRCLK, LSBFIRST, numbers[11]);
// RCLK信号を送り、QA~QHのストレージレジスタに反映させ、出力する
digitalWrite(RCLK, LOW);
digitalWrite(RCLK, HIGH);
delay(1000);
}
void dispn(int i){
// シフトレジスタに1バイトのデータを送信する
Serial.println(i);
shiftOut(SER, SRCLK, LSBFIRST, numbers[i]);
// RCLK信号を送り、QA~QHのストレージレジスタに反映させ、出力する
digitalWrite(RCLK, LOW);
digitalWrite(RCLK, HIGH);
delay(1000);
}
void loop() {
// シフトレジスタに1バイトのデータを送信す
//shiftOut(SER, SRCLK, LSBFIRST, uint8_t(numbers[0]));
// RCLK信号を送り、QA~QHのストレージレジスタに反映させ、出力する
//digitalWrite(RCLK, LOW);
//digitalWrite(RCLK, HIGH);
//delay(1000);
for (int i = 0; i<11; i++){
dispn(i);
}
dispdp();
}
ーーーーーcathode common 7seg led 1pcsーーーーーーーーーーーーー
https://rage1blog.com/arduino_how-to-use_7-segment-ledc-551srd_shift-register_74hc595/
【Arduino】7セグメントLED(C-551SRD)の使い方【シフトレジスタ(74HC595)との組み合わせまで】
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Arduino電子工作-7セグメントLED制御方法│takuのアトリエ (taku-info.com) が基本
void setup(){ //ただし9ピンは小数点なので、本スケッチでは不使用 //2ピンから9ピンを出力へ for(int i=0;i<7;i++){ pinMode(i+2,OUTPUT); } } //LEDレイアウトを配列で定義 boolean Num_Array[10][7]={ {1,1,1,1,1,1,0}, //0 {0,1,1,0,0,0,0}, //1 {1,1,0,1,1,0,1}, //2 {1,1,1,1,0,0,1}, //3 {0,1,1,0,0,1,1}, //4 {1,0,1,1,0,1,1}, //5 {1,0,1,1,1,1,1}, //6 {1,1,1,0,0,1,0}, //7 {1,1,1,1,1,1,1}, //8 {1,1,1,1,0,1,1} //9 }; //LEDを表示する関数を定義 void NumPrint(int Number){ for (int j=0; j<7; j++){ digitalWrite(j+2,Num_Array[Number][j]); } } //全てのLEDを消灯させる void off7SegLED(){ for(int k=0;k<7;k++){ digitalWrite(k+2,LOW); } } void loop(){ for(int n=0;n<=9;n++){ NumPrint(n);//iを点灯 delay(2000); off7SegLED();//消灯 delay(50); } }
ーーーーーーーーーーmaqueen 自律ライントレーサ ーーーーーーーーーーーーーーー
拡張機能でmaqueenを入れないとだめよ 最終版は以下の通り
input.onButtonPressed(Button.A, function () {
走行モード = 1
})
let 右センサ = 0
let 左センサ = 0
let 障害物までの距離 = 0
let 走行モード = 0
maqueen.motorStop(maqueen.Motors.All)
let 黒 = 0
let 白 = 1
走行モード = 0
let 全速力で = 30
let 直進中だった = 1
let 左折中だった = 2
let 右折中だった = 3
let 過去の状態が = 直進中だった
while (走行モード == 0) {
basic.showIcon(IconNames.Heart)
basic.showIcon(IconNames.SmallHeart)
}
basic.showIcon(IconNames.Happy)
maqueen.motorRun(maqueen.Motors.All, maqueen.Dir.CW, 20)
basic.forever(function () {
if (走行モード == 1) {
障害物までの距離 = maqueen.Ultrasonic(PingUnit.Centimeters)
if (障害物までの距離 < 10) {
maqueen.motorStop(maqueen.Motors.All)
while (障害物までの距離 < 12) {
basic.pause(200)
障害物までの距離 = maqueen.Ultrasonic(PingUnit.Centimeters)
}
maqueen.motorRun(maqueen.Motors.All, maqueen.Dir.CW, 30)
}
}
左センサ = maqueen.readPatrol(maqueen.Patrol.PatrolLeft)
右センサ = maqueen.readPatrol(maqueen.Patrol.PatrolRight)
if (左センサ == 黒 && 右センサ == 黒 && 過去の状態が == 直進中だった) {
maqueen.motorRun(maqueen.Motors.All, maqueen.Dir.CW, 全速力で)
} else if (左センサ == 白 && 右センサ == 黒 && 過去の状態が == 右折中だった) {
maqueen.motorRun(maqueen.Motors.M2, maqueen.Dir.CW, 0)
maqueen.motorRun(maqueen.Motors.M1, maqueen.Dir.CW, 全速力で)
過去の状態が = 右折中だった
} else if (左センサ == 黒 && 右センサ == 白 && 過去の状態が == 左折中だった) {
maqueen.motorRun(maqueen.Motors.M2, maqueen.Dir.CW, 全速力で)
maqueen.motorRun(maqueen.Motors.M1, maqueen.Dir.CW, 0)
過去の状態が = 左折中だった
} else if (左センサ == 白 && 右センサ == 白) {
if (過去の状態が == 直進中だった) {
maqueen.motorRun(maqueen.Motors.M2, maqueen.Dir.CCW, 全速力で)
maqueen.motorRun(maqueen.Motors.M1, maqueen.Dir.CCW, 全速力で)
} else if (過去の状態が == 右折中だった) {
maqueen.motorRun(maqueen.Motors.M2, maqueen.Dir.CCW, 全速力で)
maqueen.motorRun(maqueen.Motors.M1, maqueen.Dir.CW, 全速力で)
} else if (過去の状態が == 左折中だった) {
maqueen.motorRun(maqueen.Motors.M2, maqueen.Dir.CW, 全速力で)
maqueen.motorRun(maqueen.Motors.M2, maqueen.Dir.CCW, 全速力で)
}
}
})
basic.forever(function () {
if (maqueen.readPatrol(maqueen.Patrol.PatrolLeft) == 1 && maqueen.readPatrol(maqueen.Patrol.PatrolRight) == 0) {
maqueen.motorRun(maqueen.Motors.M2, maqueen.Dir.CW, 0)
maqueen.motorRun(maqueen.Motors.M1, maqueen.Dir.CW, 30)
}
})
0 件のコメント:
コメントを投稿