Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Light Sequence Creator

Componenten en benodigdheden

Arduino UNO
× 1
Broodplank (algemeen)
× 2
Jumperdraden (algemeen)
× 55
74HC595 Shift Register
× 1
knop
× 4
Draaipotentiometer (generiek)
× 1
LED (generiek)
× 8
Weerstand 221 ohm
× 9
Weerstand 10k ohm
× 4

Benodigde gereedschappen en machines

handen

Apps en online services

Arduino IDE

Over dit project

Ik heb plezier gehad met lichten en arrays en dacht dat ik het schuifregister en het LCD-scherm zou gebruiken om een ​​programma te maken waarin je je lichtanimaties kunt wijzigen en weergeven zonder in de code te hoeven gaan en een animatie met de hand te maken elke keer.

Er zijn 4 knoppen, van links naar rechts zijn ze genummerd van 1 - 4. Hiermee kunt u door het menu navigeren en de variabelen wijzigen. Knop 1 wordt gebruikt om waarden te verhogen en om de toestand van een lamp op HOOG te zetten. Knop 2 wordt gebruikt om waarden te verlagen en om de status van een lamp op LAAG te zetten. Knop 3 kan de cursor naar achteren bewegen tijdens het maken van een kader, en knop 4 wordt gebruikt als een 'terug'-knop.

Het programma kan de snelheid van de animatie wijzigen en het aantal keren dat deze wordt herhaald. Ik zou een andere versie kunnen uitbrengen die meerdere animaties mogelijk maakt.

U kunt frames wijzigen door de ARR_SIZE bovenaan in de code te wijzigen

Geniet ervan

Code

  • Lichtsequencer
LichtsequencerC/C++
Sluit deze code aan en voer het uit, als de bedrading correct is, zou er GEEN problemen moeten zijn!
Geniet van
#include #define ARR_SIZE 16 // WIJZIG dit in een willekeurig aantal frames#define LIGHTS 8// Regelt de invoer van de gameknopconst int btn1 =7, btn2 =8, btn3 =9, btn4 =10;// Variabele voor het lezen van de status van de drukknop bs1 =0, bs2 =0, bs3 =0, bs4 =0;// Pin aangesloten op ST_CP van 74HC595const int latchPin =11;// Pin aangesloten op SH_CP van 74HC595const int clockPin =13;// Pin verbonden met DS van 74HC595const int dataPin =12;// Houders voor informatie die u gaat doorgeven aan gegevens;// Wordt gebruikt om 1 of 0bool te lezen ArrOne[ARR_SIZE][LIGHTS] ={false}; // animatie// Vertaald voor het register als bytesbyte lightArrOne[ARR_SIZE] ={0xFF};// Variabelen die de animatie beïnvloeden. animSpeed ​​=50; // ms tussen elke frameint loopCount =5; // aantal keren dat het wordt uitgevoerd// Regelt LCD-waardenconst int rs =15, en =14, d4 =3, d5 =4, d6 =5, d7 =6; LiquidCrystal lcd (rs, en, d4, d5, d6 , d7); void setup () {// Stel elke knop in pinMode (btn1, INPUT_PULLUP); pinMode (btn2, INPUT_PULLUP); pinMode (btn3, INPUT_PULLUP); pinMode (btn4, INPUT_PULLUP); // Stel het aantal kolommen en rijen van het LCD-scherm in:lcd.begin (16, 2); // Set register latch pinMode (latchPin, OUTPUT); PrintMenu();}void loop(){ bs1 =digitalRead(btn1); bs2 =digitalRead(btn2); bs3 =digitalRead(btn3); bs4 =digitalRead(btn4); // Speel de anim if (bs1 ==HOOG) { bs1 =LAAG;// wordt alleen gebruikt om slechte/dubbele invoervertraging (150) te voorkomen; Toneelstuk(); // Pas de anim aan } else if (bs2 ==HOOG) { bs2 =LAAG; vertraging (150); Maken (ArrOne); // Verander de snelheid van de anim } else if (bs3 ==HOOG) { bs3 =LAAG; vertraging (150); Snelheid instellen(); // Verander het aantal keren dat de anim zal spelen } else if(bs4 ==HOOG) { bs4 =LAAG; vertraging (150); SetLoop(); } PrintMenu(); delay(150);}// Functie om info af te drukken voor het hoofdmenuvoid PrintMenu(){ ClearScreen(); lcd.print("1-Play 3-Speed"); lcd.setCursor(0, 1); lcd.print("2-Create 4-Loops");}// Functie om informatie af te drukken voor het maken van een framevoid PrintCreate(bool Arr[][LIGHTS], int frame, int _bit){ ClearScreen(); lcd.print("Frame:"); lcd.print(frame+1); if(frame <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]);}// Functie om info af te drukken voor het instellen van de speedvoid PrintSetSpeed(){ ClearScreen(); lcd.print ("Snelheid instellen (ms)"); lcd.setCursor(0, 1); lcd.print(animSpeed);}// Functie om info af te drukken voor het wijzigen van het aantal animatieloopsvoid PrintSetLoop(){ ClearScreen(); lcd.print("Set Loop Count"); lcd.setCursor(0, 1); lcd.print(loopCount);}// Functie om de animatie af te spelen met de gegeven parametersvoid Play(){ // De animatie voor (int count =0; count  0) {b =LIGHTS-1; kader--; } bs1 =digitalRead (btn1); bs2 =digitalRead(btn2); bs3 =digitalRead(btn3); bs4 =digitalRead(btn4); if (bs1 ==HOOG) {vertraging (150); Arr[frame][b] =waar; b++; } else if(bs2 ==HOOG) {vertraging (150); Arr[frame][b] =onwaar; b++; } else if(bs3 ==HOOG) {vertraging (150); B--; } else if(bs4 ==HOOG) {vertraging (150); verlaten =waar; } vertraging(10); } PrintCreate(Arr, frame, b); IntToHexToByte(Arr); vertraging (500); }}// Functie om de array om te zetten in een byte zodat het register IntToHexToByte(bool Arr[][LIGHTS]){ for(int row =0; row  1) animSpeed--; } // Verhoog de snelheid if(bs4 ==HIGH) { delay(150); verlaten =waar; } vertraging (30); }}// Functie om het aantal keren te wijzigen dat de anim loopsvoid SetLoop(){ bool leave =false; while(!verlaten) { PrintSetLoop(); bs1 =digitaal lezen (btn1); bs2 =digitalRead(btn2); bs3 =digitalRead(btn3); bs4 =digitalRead(btn4); if (bs1 ==HOOG) { vertraging (10); loopCount++; } if(bs2 ==HOOG) { vertraging(10); if(animSpeed ​​> 1) loopCount--; } if (bs4 ==HOOG) { vertraging (150); verlaten =waar; } vertraging (30); }}// Functie om de bits in de registervoid daadwerkelijk te verschuiven shiftOut(int myDataPin, int myClockPin, byte myDataOut){ // Dit verschuift eerst 8 bits uit MSB, // op de stijgende flank van de klok, // klok loopt inactief op lage // interne functie-instelling int i =0; int pinState; pinMode(myClockPin, OUTPUT); pinMode (mijnDataPin, UITGANG); // wis alles voor het geval dat // bereid schuifregister voor op bitverschuiving digitalWrite (myDataPin, 0); digitalWrite(myClockPin, 0); // Elke bit in de byte myDataOut voor (i =7; i>=0; i--) {digitalWrite (myClockPin, 0); if ( myDataOut &(1 <  

Schema's

Volg de regels zorgvuldig. Vanwege beperkingen aan de lengte van weerstanden in het programma, en voor leesbaarheidsdoeleinden, was ik niet in staat om het op dezelfde manier te comprimeren als in mijn eigenlijke build. Na het bouwen daag ik je uit om manieren te vinden om het op te ruimen.

Productieproces

  1. TinyML-taaldetector-gebaseerd op Edge Impulse &Arduino
  2. Arduino-gyroscoopspel met MPU-6050
  3. Arduino digitale dobbelstenen
  4. DIY 37 LED Roulette Game
  5. ATtiny85 Mini Arcade:Snake
  6. Draagbare afstandsdetector
  7. Arduino Audio Reactive Desk Light
  8. Smart Face Tracking Robot Car
  9. galvaniseren met koper
  10. NeoMatrix Arduino Pong
  11. Pick to Light Project 2 WiFi