Кодты іздеу

Сабақ 22/31: Жеті сегментті индикаторды Arduino және электронды сүйекпен қолдану | SunFounder Robojax

Бұл сабақтың бөлігі: Arduino Course based on SunFounder's 3-in-1 Learning Kit

Сабақ 22/31: Жеті сегментті индикаторды Arduino және электронды сүйекпен қолдану | SunFounder Robojax

const int STcp = 12;// ST_CP 74HC595 пиніне қосылған пин
const int SHcp = 8;// SH_CP 74HC595 пиніне қосылған пин 
const int DS = 11; // DS 74HC595 пиніне қосылған пин 

int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

loop() функциясы есептегішті жүргізеді. Ол 0-ден 9-ға дейін санау үшін for циклін пайдаланады. Цикл ішінде код ағымдағы санның деректерін ығысу регистріне жібереді. Соңындағы delay(1000) есептегіштің жылдамдығын миллисекундпен белгілейді. Жылдамырақ санау үшін бұл мәнді 100-ге, ал баяуырақ үшін 500-ге өзгертіңіз.

Электронды сүйек коды жаңа элементті енгізеді: түйме арқылы пайдаланушы енгізуі. Негізгі конфигурация өзгерістері:

const int buttonPin = 2;
//...
pinMode(buttonPin, INPUT);
attachInterrupt(digitalPinToInterrupt(buttonPin), rollDice, FALLING);

Мұнда buttonPin цифрлық 2-ші пинге орнатылған. Бұл пин ерекше, себебі оны үзіліс ретінде пайдалануға болады. Үзіліс Arduino-ға түйме басылған кезде дереу тоқтауға мүмкіндік береді, бұл жылдам және сенімді жауапты қамтамасыз етеді. FALLING режимі түйме басылғанда (сигнал HIGH-тан LOW-ға өткенде) үзілісті іске қосады.

rollDice функциясы үзіліс арқылы шақырылады. Ол state айнымалысын 0 мен 1 арасында ауыстырады. state 0 болғанда, сүйек "айналып тұрады", ал негізгі loop() кездейсоқ сандарды көрсетеді. Түйме қайта басылғанда, state 1-ге өзгереді, цикл тоқтап, соңғы нәтиже көрсетіледі. showNumber() функциясы есептегіш логикасымен бірдей, бірақ көрсету үшін санды аргумент ретінде қабылдайды.

Тірі Жоба және Демонстрация

Код жүктелгеннен кейін, есептегіш бір секундтық кідіріспен 0-ден 9-ға дейінгі сандарды көрсете бастайды (бейнеде 15:04). Бейне есептегішті әлдеқайда жылдам жүргізу үшін кідірісті өзгертуді көрсетеді.

Электронды сүйек демонстрациясы (бейнеде 20:15) түйменің әрекетін көрсетеді. Оны бір рет басқанда, дисплей сандарды жылдам ауыстыра бастайды. Қайта басу циклді тоқтатып, нақты сүйек сияқты 1 мен 6 арасындағы кездейсоқ санды қалдырады.

Тараулар

  • [00:00] Жеті сегментті дисплей жобасына кіріспе
  • [01:25] Жеті сегментті дисплейді түсіну
  • [03:51] 5161AS дисплейінің деректер парағы және сипаттамалары
  • [04:48] Дисплей мен ығысу регистрін қосу
  • [12:24] 0-9 есептегішіне арналған Arduino коды
  • [15:04] Есептегіш демонстрациясы және жылдамдықты реттеу
  • [16:27] Электронды сүйек жобасын құру
  • [20:15] Электронды сүйек демонстрациясы және дебаунсинг

Суреттер

Wiring on breadboard from video
Wiring on breadboard from video
Circuit 6.5 segment schematic
Circuit 6.5 segment schematic
Dice
Dice
Segment wiring for Sunfounder 3-in-1 kit
Segment wiring for Sunfounder 3-in-1 kit
Segments of segment display
Segments of segment display
Seven segment pins - common cathode
Seven segment pins - common cathode
Seven segment pins - DP decimal pin
Seven segment pins - DP decimal pin
Seven segment pins - common cathode
Seven segment pins - common cathode
902-Lesson 23/31: Arduino code Using Seven Segment Display
Тіл: C++
/*
Lesson 23/31: Using Seven Segment Display 
Get this code and watch video Download and resource page https://robojax.com/RJT605
YouTube video https://www.youtube.com/watch?v=3qoGAYh0lbc

*/
const int STcp = 12;//Pin connected to ST_CP of 74HC595
const int SHcp = 8;//Pin connected to SH_CP of 74HC595 
const int DS = 11; //Pin connected to DS of 74HC595 

int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void setup ()
{
  //set pins to output
  pinMode(STcp,OUTPUT);
  pinMode(SHcp,OUTPUT);
  pinMode(DS,OUTPUT);
}
void loop()
{
  for(int num = 0; num <10; num++)
  {
    digitalWrite(STcp,LOW); //ground ST_CP and hold low for as long as you are transmitting
    shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
    digitalWrite(STcp,HIGH); //pull the ST_CPST_CP to save the data
    delay(1000);
  }
}
903-Lesson 23/31: Electronic dice
Тіл: C++
/*
Lesson 23/31: Electronic Dice
Get this code and watch video Download and resource page https://robojax.com/RJT605
YouTube video https://www.youtube.com/watch?v=3qoGAYh0lbc

*/
const int STcp = 12;//Pin connected to ST_CP of 74HC595
const int SHcp = 8;//Pin connected to SH_CP of 74HC595
const int DS = 11; //Pin connected to DS of 74HC595
const int buttonPin = 2;
int datArray[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f,  0x6f};
int number = 0;
int state = 0;

void setup ()
{
  //set pins to output
  pinMode(STcp, OUTPUT);
  pinMode(SHcp, OUTPUT);
  pinMode(DS, OUTPUT);
  pinMode(buttonPin, INPUT);

  attachInterrupt(digitalPinToInterrupt(buttonPin), rollDice, FALLING);
}

void loop()
{
  if (state == 0) {
    showNumber((int)random(1, 7));
    delay(50);
  }
}

void showNumber(int num) {
  digitalWrite(STcp, LOW); //ground ST_CP and hold low for as long as you are transmitting
  shiftOut(DS, SHcp, MSBFIRST, datArray[num]);
  //return the latch pin high to signal chip that it
  //no longer needs to listen for information
  digitalWrite(STcp, HIGH); //pull the ST_CPST_CP to save the data
}


void rollDice() {
  state = !state;
}

Сізге қажет болуы мүмкін нәрселер

Ресурстар мен сілтемелер

Файлдар📁

Arduino кітапханалары (zip)