2020/02/24

Arduino 74HC595A_shiftOut_Pin 接続

Arduino 74HC595A_shiftOut_Pin 接続

 
/*
   shiftOut のテストと赤色7セグメントLED表示器のテスト
   https://github.com/kankanla/arduino/blob/master/sketch_feb23a.ino
*/

uint8_t resetPin  = A0;  //P10 SRCLR/RESET (常にH可)
uint8_t clockPin  = A1;  //P11 SRCLK/SHIFT CLOCK(クロックを出力するピン)
uint8_t latchPin  = A2;  //P12 RCLK/LATCH CLOCK(LOW->HIGH で更新)
uint8_t oePin     = A3;  //P13 OE/OUTPUT ENABLE (出力有効/無効,常にH可)
uint8_t dataPin   = A4;  //P14 SER/A (ビットを出力するピン)

void setup() {
  Serial.begin(9600);
  pinMode(resetPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(oePin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  Number();
}

void Number() {
  /*
    赤色7セグメントLED表示器LTS-547BJR-01J
     0から9までの数字のバタン
     ピンの配置
        A
       F B
        G
       E C
        D  dp
  */
  byte n2[] = {
    0b00111111,   //0
    0b00000110,   //1
    0b01011011,   //2
    0b01001111,   //3
    0b01100110,   //4
    0b01101101,   //5
    0b01111101,   //6
    0b00100111,   //7
    0b01111111,   //8
    0b01101111    //9
  };

  byte n[] = {
    0b00000001,   //A
    0b00000010,   //B
    0b00000100,   //C
    0b00001000,   //D
    0b00010000,   //E
    0b00100000,   //F
    0b01000000,   //G
    0b10000000,   //dp
  };

  digitalWrite(resetPin, 1);
  for (uint8_t i = 0; i < sizeof(n); i++) {
    Serial.println(n[i], DEC);
    Serial.println(i);
    shiftOut(dataPin, clockPin, MSBFIRST, n[i]);
    digitalWrite(latchPin, 0);
    digitalWrite(latchPin, 1);
    delay(200);
  }
}



end

2020/02/09

Arduino で2相ユニポーラPICステッピングモータで動かす

Arduino で2相ユニポーラPICステッピングモータで動かす
黒電話の回転ダイヤル式電話機を再現する.



void setup() {
  Serial.begin(9600);
  DDRB = B001111;    //PB0~PB5
}

int dly = 2;
int del = 400;

void loop() {
  if (Serial.available() > 0) {
    num(Serial.read());
    delay(del / 2);
  }
}

void num(int x) {
  switch (x) {
    case 1:
    case 49:
      step1(20 + 2, 3);
      delay(del);
      step2(20 + 2, 4);
      break;
    case 2:
    case 50:
      step1(20 + 8, 3);
      delay(del);
      step2(20 + 8, 4);
      break;
    case 3:
    case 51:
      step1(20 + 14, 3);
      delay(del);
      step2(20 + 14, 4);
      break;
    case 4:
    case 52:
      step1(20 + 20, 3);
      delay(del);
      step2(20 + 20, 4);
      break;
    case 5:
    case 53:
      step1(20 + 26, 3);
      delay(del);
      step2(20 + 26, 4);
      break;
    case 6:
    case 54:
      step1(20 + 32, 3);
      delay(del);
      step2(20 + 32, 4);
      break;
    case 7:
    case 55:
      step1(20 + 38, 3);
      delay(del);
      step2(20 + 38, 4);
      break;
    case 8:
    case 56:
      step1(20 + 44, 3);
      delay(del);
      step2(20 + 44, 4);
      break;
    case 9:
    case 57:
      step1(20 + 50, 3);
      delay(del);
      step2(20 + 50, 4);
      break;
    case 0:
    case 48:
      step1(20 + 56, 3);
      delay(del);
      step2(20 + 56, 4);
      break;
  }
}

void step2(int x, int spd) {
  for (int i = 0; i <= x; ++i) {
    PORTB = B0001;
    delay(spd);
    PORTB = B0010;
    delay(spd);
    PORTB = B0100;
    delay(spd);
    PORTB = B1000;
    delay(spd);
  }
}

void step1(int x, int spd) {
  for (int i = 0; i <= x; ++i) {
    PORTB = B1000;
    delay(spd);
    PORTB = B0100;
    delay(spd);
    PORTB = B0010;
    delay(spd);
    PORTB = B1001;
    delay(spd);
  }
}