산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

광 시퀀스 생성기

구성품 및 소모품

Arduino UNO
× 1
브레드보드(일반)
× 2
점퍼 와이어(일반)
× 55
74HC595 시프트 레지스터
× 1
버튼
× 4
회전 전위차계(일반)
× 1
LED(일반)
× 8
저항 221옴
× 9
저항 10k 옴
× 4

필요한 도구 및 기계

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

저는 조명과 어레이로 재미있게 놀았고, 시프트 레지스터와 LCD 화면을 사용하여 코드에 들어가 손으로 애니메이션을 만들 필요 없이 조명 애니메이션을 수정하고 표시할 수 있는 프로그램을 만들 것이라고 생각했습니다. 매번.

왼쪽에서 오른쪽으로 1 - 4로 번호가 매겨진 4개의 버튼이 있습니다. 이 버튼을 사용하여 메뉴를 탐색하고 변수를 변경할 수 있습니다. 버튼 1은 값을 증가시키고 조명 상태를 HIGH로 전환하는 데 사용됩니다. 버튼 2는 값을 감소시키고 조명 상태를 LOW로 바꾸는 데 사용됩니다. 버튼 3은 프레임을 만드는 동안 커서를 뒤로 이동할 수 있으며 버튼 4는 '뒤로' 버튼으로 사용됩니다.

프로그램은 애니메이션의 속도와 반복되는 횟수를 수정할 수 있습니다. 여러 애니메이션을 허용하는 다른 버전을 출시할 수도 있습니다.

코드 상단의 ARR_SIZE를 변경하여 프레임을 변경할 수 있습니다.

즐기세요

<섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

코드

<울>
  • 라이트 시퀀서
  • 라이트 시퀀서C/C++
    이 코드를 꽂고 실행하십시오. 배선이 정확하면 문제가 없을 것입니다!
    Enjoy
    #include #define ARR_SIZE 16 // 이를 임의의 프레임 수로 변경#define LIGHTS 8// 게임 버튼 입력 제어 const int btn1 =7, btn2 =8, btn3 =9, btn4 =10;// 푸시 버튼 상태를 읽기 위한 변수int bs1 =0, bs2 =0, bs3 =0, bs4 =0;// 74HC595const int latchPin =11의 ST_CP에 연결된 핀;// 74HC595const int clockPin =의 SH_CP에 연결된 핀 =13;// 74HC595const int dataPin =12의 DS에 연결된 핀;// 데이터를 전달하려는 정보용 홀더;// 1 또는 0bool을 읽는 데 사용됨 ArrOne[ARR_SIZE][LIGHTS] ={false}; // animation// 레지스터에 대해 바이트 바이트로 변환 lightArrOne[ARR_SIZE] ={0xFF};// animationint animSpeed ​​=50; // 각 프레임 사이의 ms int loopCount =5; // 실행할 횟수// LCD 값 제어const int rs =15, en =14, d4 =3, d5 =4, d6 =5, d7 =6;LiquidCrystal lcd(rs, en, d4, d5, d6 , d7);void setup(){ // 각 버튼을 위로 설정 pinMode(btn1, INPUT_PULLUP); 핀모드(btn2, INPUT_PULLUP); 핀모드(btn3, INPUT_PULLUP); 핀모드(btn4, INPUT_PULLUP); // LCD의 열과 행 수 설정:lcd.begin(16, 2); // 레지스터 래치 설정 pinMode(latchPin, OUTPUT); PrintMenu();} 무효 루프(){ bs1 =digitalRead(btn1); bs2 =디지털 읽기(btn2); bs3 =디지털 읽기(btn3); bs4 =디지털 읽기(btn4); // 애니메이션 재생 if(bs1 ==HIGH) { bs1 =LOW;// 불량/이중 입력 지연을 방지하기 위해 사용됨(150); 놀다(); // 애님 수정 } else if(bs2 ==HIGH) { bs2 =LOW; 지연(150); 생성(ArrOne); // 애니메이션의 속도 변경 } else if(bs3 ==HIGH) { bs3 =LOW; 지연(150); 속도 설정(); // 애니메이션 재생 횟수 변경 } else if(bs4 ==HIGH) { bs4 =LOW; 지연(150); 세트루프(); } PrintMenu(); delay(150);}// 메인 메뉴의 정보를 출력하는 함수void PrintMenu(){ ClearScreen(); lcd.print("1-재생 3-속도"); lcd.setCursor(0, 1); lcd.print("2-Create 4-Loops");}// frame을 생성하기 위한 정보를 출력하는 함수void PrintCreate(bool Arr[][LIGHTS], int frame, int _bit){ ClearScreen(); lcd.print("프레임:"); lcd.print(프레임+1); if(프레임 <9) lcd.print(" "); for(int j =0; j <_bit; j++) lcd.print(" "); lcd.print("v"); lcd.setCursor(0, 1); lcd.print(" "); for(int j =0; j <8; j++) lcd.print(Arr[frame][j]);}// speedvoid 설정을 위한 정보를 출력하는 함수 PrintSetSpeed(){ ClearScreen(); lcd.print("속도 설정(ms)"); lcd.setCursor(0, 1); lcd.print(animSpeed);}// 애니메이션 루프 수 변경 정보를 출력하는 함수void PrintSetLoop(){ ClearScreen(); lcd.print("루프 횟수 설정"); lcd.setCursor(0, 1); lcd.print(loopCount);}// 주어진 매개변수로 애니메이션을 재생하는 함수void Play(){ // 애니메이션 for(int count =0; count  0) { b =LIGHTS-1; 액자--; } bs1 =디지털 읽기(btn1); bs2 =디지털 읽기(btn2); bs3 =디지털 읽기(btn3); bs4 =디지털 읽기(btn4); if(bs1 ==HIGH) { 지연(150); Arr[프레임][b] =참; ㄴ++; } else if(bs2 ==HIGH) { 지연(150); Arr[프레임][b] =거짓; ㄴ++; } else if(bs3 ==HIGH) { 지연(150); 비--; } else if(bs4 ==HIGH) { 지연(150); 떠나다 =사실; } 지연(10); } PrintCreate(Arr, 프레임, b); IntToHexToByte(Arr); 지연(500); }}// readvoid IntToHexToByte(bool Arr[][LIGHTS]){ for(int row =0; row  1) animSpeed--; } // 속도를 높입니다. if(bs4 ==HIGH) { delay(150); 떠나다 =사실; } 지연(30); }}// 애님 루프의 횟수를 변경하는 함수void SetLoop(){ bool leave =false; 동안(! 떠나기) { PrintSetLoop(); bs1 =디지털 읽기(btn1); bs2 =디지털 읽기(btn2); bs3 =디지털 읽기(btn3); bs4 =디지털 읽기(btn4); if(bs1 ==HIGH) { 지연(10); 루프카운트++; } if(bs2 ==HIGH) { 지연(10); if(animSpeed ​​> 1) loopCount--; } if(bs4 ==HIGH) { 지연(150); 떠나다 =사실; } 지연(30); }}// 실제로 레지스터의 비트를 이동하는 함수 void shiftOut(int myDataPin, int myClockPin, byte myDataOut){ // 이것은 MSB에서 먼저 8비트를 이동합니다. // 클럭의 상승 에지에서 // 클럭은 유휴 상태입니다. low // 내부 함수 설정 int i =0; 정수 핀 상태; 핀모드(myClockPin, 출력); 핀모드(마이데이터핀, 출력); //비트 이동을 위해 //시프트 레지스터를 준비하기 위해 모든 것을 지웁니다. digitalWrite(myDataPin, 0); 디지털 쓰기(myClockPin, 0); // myDataOut 바이트의 각 비트 for (i =7; i>=0; i--) { digitalWrite(myClockPin, 0); if ( myDataOut &(1 <  

    회로도

    라인을 주의 깊게 따르십시오. 프로그램의 저항 길이 제한으로 인해 가독성을 위해 실제 빌드에서와 같은 방식으로 압축할 수 없었습니다. 건물을 만든 후에는 청소 방법을 찾도록 요청합니다.

    제조공정

    1. TinyML-Language Detector 기반 Edge Impulse 및 Arduino
    2. MPU-6050을 사용한 Arduino 자이로스코프 게임
    3. Arduino 디지털 주사위
    4. DIY 37 LED 룰렛 게임
    5. ATtiny85 미니 아케이드:뱀
    6. 휴대용 거리 감지기
    7. Arduino Audio Reactive Desk Light
    8. 스마트 얼굴 추적 로봇 자동차
    9. 구리로 전기도금
    10. NeoMatrix Arduino Pong