Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Lichtsequenz-Ersteller

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
Breadboard (generisch)
× 2
Jumper (generisch)
× 55
74HC595 Shift Register
× 1
Schaltfläche
× 4
Drehpotentiometer (allgemein)
× 1
LED (generisch)
× 8
Widerstand 221 Ohm
× 9
Widerstand 10k Ohm
× 4

Notwendige Werkzeuge und Maschinen

Hände

Apps und Onlinedienste

Arduino-IDE

Über dieses Projekt

Ich hatte viel Spaß mit Lichtern und Arrays und dachte, ich würde das Schieberegister und den LCD-Bildschirm verwenden, um ein Programm zu erstellen, in dem Sie Ihre Lichtanimationen ändern und anzeigen können, ohne in den Code einsteigen und eine Animation von Hand erstellen zu müssen jedes Mal.

Es gibt 4 Schaltflächen, von links nach rechts sind sie von 1 - 4 nummeriert. Sie ermöglichen Ihnen die Navigation durch das Menü und das Ändern der Variablen. Taste 1 wird zum Erhöhen von Werten und zum Umschalten des Zustands eines Lichts auf HIGH verwendet. Taste 2 wird zum Verringern von Werten und zum Umschalten des Zustands eines Lichts auf LOW verwendet. Taste 3 kann den Cursor beim Erstellen eines Rahmens rückwärts bewegen und Taste 4 wird als 'Zurück'-Taste verwendet.

Das Programm kann die Geschwindigkeit der Animation und die Anzahl der Schleifen ändern. Ich könnte eine andere Version veröffentlichen, die mehrere Animationen zulässt.

Sie können Frames ändern, indem Sie die ARR_SIZE oben im Code ändern

Viel Spaß

Code

  • Lichtsequenzer
LichtsequenzerC/C++
Stecken Sie diesen Code ein und führen Sie ihn aus. Wenn die Verkabelung korrekt ist, sollten KEINE Probleme auftreten!
Enjoy
#include #define ARR_SIZE 16 // ÄNDERN Sie dies auf eine beliebige Anzahl von Frames#define LIGHTS 8// Steuert die Spieltasteneingabenconst int btn1 =7, btn2 =8, btn3 =9, btn4 =10;// Variable zum Lesen des Tasterstatusint bs1 =0, bs2 =0, bs3 =0, bs4 =0;// Pin verbunden mit ST_CP von 74HC595const int LatchPin =11;// Pin verbunden mit SH_CP von 74HC595const int clockPin =13;// Pin verbunden mit DS von 74HC595const int dataPin =12;// Halter für Informationen, die Sie an Daten übergeben werden;// Wird verwendet, um entweder 1 oder 0bool zu lesen ArrOne[ARR_SIZE][LIGHTS] ={false}; // Animation// Übersetzt für das Register als bytesbyte lightArrOne[ARR_SIZE] ={0xFF};// Variablen zur Beeinflussung der Animationint animSpeed ​​=50; // ms zwischen jedem Frameint loopCount =5; // Wie oft es ausgeführt wird // Steuert LCD-Werteconst int rs =15, en =14, d4 =3, d5 =4, d6 =5, d7 =6;LiquidCrystal lcd(rs, en, d4, d5, d6 , d7);void setup () {// Setzen Sie jede Taste nach oben pinMode (btn1, INPUT_PULLUP); pinMode (btn2, INPUT_PULLUP); pinMode (btn3, INPUT_PULLUP); pinMode (btn4, INPUT_PULLUP); // Stellen Sie die Anzahl der Spalten und Zeilen des LCDs ein:lcd.begin (16, 2); // Registerlatch setzen pinMode (latchPin, OUTPUT); PrintMenu();}void loop(){ bs1 =digitalRead (btn1); bs2 =digitalRead (btn2); bs3 =digitalRead (btn3); bs4 =digitalRead (btn4); // Spielen Sie die Animation ab if (bs1 ==HIGH) { bs1 =LOW; // nur verwendet, um eine schlechte / doppelte Eingangsverzögerung zu verhindern (150); Spielen(); // Ändern Sie die Animation} else if (bs2 ==HIGH) { bs2 =LOW; Verzögerung (150); Erstellen (ArrOne); // Ändern Sie die Geschwindigkeit der Animation} else if (bs3 ==HIGH) { bs3 =LOW; Verzögerung (150); Geschwindigkeit einstellen(); // Ändern Sie die Anzahl der Spiele, mit denen der Anime gespielt wird} else if(bs4 ==HIGH) { bs4 =LOW; Verzögerung (150); SetLoop(); } PrintMenu(); delay(150);}// Funktion zum Drucken von Informationen für das Hauptmenüvoid PrintMenu(){ ClearScreen(); lcd.print("1-Play 3-Speed"); lcd.setCursor(0, 1); lcd.print("2-Create 4-Loops");}// Funktion zum Drucken von Informationen zum Erstellen eines Framevoid PrintCreate(bool Arr[][LIGHTS], int frame, int _bit){ ClearScreen(); lcd.print("Rahmen:"); lcd.print (Rahmen + 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]);}// Funktion zum Drucken von Informationen zum Setzen der Speedvoid PrintSetSpeed(){ ClearScreen(); lcd.print ("Geschwindigkeit einstellen (ms)"); lcd.setCursor(0, 1); lcd.print(animSpeed);}// Funktion zum Drucken von Informationen zum Ändern der Anzahl der Animationsschleifenvoid PrintSetLoop(){ ClearScreen(); lcd.print("Schleifenanzahl einstellen"); lcd.setCursor(0, 1); lcd.print(loopCount);}// Funktion zum Abspielen der Animation mit den angegebenen Parameternvoid Play(){ // Die Animation for(int count =0; count  0) { b =LIGHTS-1; Rahmen--; } bs1 =digitalRead (btn1); bs2 =digitalRead (btn2); bs3 =digitalRead (btn3); bs4 =digitalRead (btn4); if (bs1 ==HIGH) { Verzögerung (150); Arr[frame][b] =wahr; b++; aufrechtzuerhalten. Sonst if (bs2 ==HIGH) { Verzögerung (150); Arr[frame][b] =falsch; b++; aufrechtzuerhalten. Sonst if (bs3 ==HIGH) { Verzögerung (150); B--; aufrechtzuerhalten. Sonst if (bs4 ==HIGH) { Verzögerung (150); verlassen =wahr; } Verzögerung(10); } PrintCreate(Arr, Rahmen, b); IntToHexToByte(Arr); Verzögerung (500); }} // Funktion zum Konvertieren des Arrays in ein Byte für das Register zum Lesenvoid IntToHexToByte(bool Arr[][LIGHTS]){ for(int row =0; row  1) animSpeed--; } // Erhöhen Sie die Geschwindigkeit if (bs4 ==HIGH) { delay (150); verlassen =wahr; } Verzögerung (30); }} // Funktion zum Ändern der Anzahl der Schleifen der Animation SetLoop () { bool verlassen =false; while(!verlassen) { PrintSetLoop(); bs1 =digitalRead (btn1); bs2 =digitalRead (btn2); bs3 =digitalRead (btn3); bs4 =digitalRead (btn4); if (bs1 ==HIGH) { Verzögerung (10); loopCount++; aufrechtzuerhalten. Wenn (bs2 ==HIGH) { Verzögerung (10); if(animSpeed ​​> 1) loopCount--; aufrechtzuerhalten. Wenn (bs4 ==HIGH) { Verzögerung (150); verlassen =wahr; } Verzögerung (30); }} // Funktion zum tatsächlichen Verschieben der Bits im Registervoid shiftOut(int myDataPin, int myClockPin, byte myDataOut){// Dies verschiebt zuerst 8 Bits aus dem MSB, // an der steigenden Flanke der Uhr, // Uhr läuft im Leerlauf an niedrig // internes Funktionssetup int i =0; int pinState; pinMode (myClockPin, AUSGANG); pinMode (myDataPin, AUSGANG); // alles löschen, nur für den Fall, um // das Schieberegister für die Bitverschiebung vorzubereiten digitalWrite (myDataPin, 0); digitalWrite (meinClockPin, 0); // Jedes Bit im Byte myDataOut for (i =7; i>=0; i--) { DigitalWrite (myClockPin, 0); if (myDataOut &(1 < 

Schaltpläne

Folgen Sie den Zeilen sorgfältig. Aufgrund von Beschränkungen der Länge der Widerstände im Programm und aus Gründen der Lesbarkeit konnte ich es nicht auf die gleiche Weise komprimieren, wie ich es in meinem tatsächlichen Build getan habe. Nach dem Bau fordere ich Sie heraus, Wege zu finden, um es aufzuräumen.

Herstellungsprozess

  1. TinyML-Spracherkennung basierend auf Edge Impulse &Arduino
  2. Arduino-Gyroskop-Spiel mit MPU-6050
  3. Arduino Digital Dice
  4. DIY 37 LED-Roulette-Spiel
  5. ATtiny85 Mini Arcade:Schlange
  6. Tragbarer Reichweitendetektor
  7. Arduino Audio Reactive Desk Light
  8. Smart Face Tracking Roboterauto
  9. Galvanisieren mit Kupfer
  10. NeoMatrix Arduino Pong