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)
}
})