2022年8月28日日曜日

dotmatrix/jdk-linux/7seg-led(1or4)/maqueen line tracer

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.Afunction () {

    走行モード = 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.CW20)
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.CW30)
        }
    }
    左センサ = 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.CW0)
        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.CW0)
        過去の状態が = 左折中だった
    } 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.CW0)
        maqueen.motorRun(maqueen.Motors.M1, maqueen.Dir.CW30)
    }
})

0 件のコメント:

コメントを投稿