This shows you the differences between two versions of the page.
pm:prj2022:cstan:led-slot-machine [2022/05/27 21:40] marius.podeanu [Software Design] |
pm:prj2022:cstan:led-slot-machine [2022/05/27 22:03] (current) marius.podeanu |
||
---|---|---|---|
Line 34: | Line 34: | ||
===== Software Design ===== | ===== Software Design ===== | ||
__//**Source Code:**//__ | __//**Source Code:**//__ | ||
+ | |||
+ | <html> | ||
+ | |||
+ | <div | ||
+ | |||
+ | style="height:400px;width:700px;border:1px solid #ccc;font:10px/18px Georgia, Garamond, Serif;overflow:auto;"> | ||
+ | |||
+ | #include <Wire.h><br> | ||
+ | #include <LiquidCrystal_I2C.h><br> | ||
+ | <br> | ||
+ | #define NOTE_B0 31<br> | ||
+ | #define NOTE_C1 33<br> | ||
+ | #define NOTE_CS1 35<br> | ||
+ | #define NOTE_D1 37<br> | ||
+ | #define NOTE_DS1 39<br> | ||
+ | #define NOTE_E1 41<br> | ||
+ | #define NOTE_F1 44<br> | ||
+ | #define NOTE_FS1 46<br> | ||
+ | #define NOTE_G1 49<br> | ||
+ | #define NOTE_GS1 52<br> | ||
+ | #define NOTE_A1 55<br> | ||
+ | #define NOTE_AS1 58<br> | ||
+ | #define NOTE_B1 62<br> | ||
+ | #define NOTE_C2 65<br> | ||
+ | #define NOTE_CS2 69<br> | ||
+ | #define NOTE_D2 73<br> | ||
+ | #define NOTE_DS2 78<br> | ||
+ | #define NOTE_E2 82<br> | ||
+ | #define NOTE_F2 87<br> | ||
+ | #define NOTE_FS2 93<br> | ||
+ | #define NOTE_G2 98<br> | ||
+ | #define NOTE_GS2 104<br> | ||
+ | #define NOTE_A2 110<br> | ||
+ | #define NOTE_AS2 117<br> | ||
+ | #define NOTE_B2 123<br> | ||
+ | #define NOTE_C3 131<br> | ||
+ | #define NOTE_CS3 139<br> | ||
+ | #define NOTE_D3 147<br> | ||
+ | #define NOTE_DS3 156<br> | ||
+ | #define NOTE_E3 165<br> | ||
+ | #define NOTE_F3 175<br> | ||
+ | #define NOTE_FS3 185<br> | ||
+ | #define NOTE_G3 196<br> | ||
+ | #define NOTE_GS3 208<br> | ||
+ | #define NOTE_A3 220<br> | ||
+ | #define NOTE_AS3 233<br> | ||
+ | #define NOTE_B3 247<br> | ||
+ | #define NOTE_C4 262<br> | ||
+ | #define NOTE_CS4 277<br> | ||
+ | #define NOTE_D4 294<br> | ||
+ | #define NOTE_DS4 311<br> | ||
+ | #define NOTE_E4 330<br> | ||
+ | #define NOTE_F4 349<br> | ||
+ | #define NOTE_FS4 370<br> | ||
+ | #define NOTE_G4 392<br> | ||
+ | #define NOTE_GS4 415<br> | ||
+ | #define NOTE_A4 440<br> | ||
+ | #define NOTE_AS4 466<br> | ||
+ | #define NOTE_B4 494<br> | ||
+ | #define NOTE_C5 523<br> | ||
+ | #define NOTE_CS5 554<br> | ||
+ | #define NOTE_D5 587<br> | ||
+ | #define NOTE_DS5 622<br> | ||
+ | #define NOTE_E5 659<br> | ||
+ | #define NOTE_F5 698<br> | ||
+ | #define NOTE_FS5 740<br> | ||
+ | #define NOTE_G5 784<br> | ||
+ | #define NOTE_GS5 831<br> | ||
+ | #define NOTE_A5 880<br> | ||
+ | #define NOTE_AS5 932<br> | ||
+ | #define NOTE_B5 988<br> | ||
+ | #define NOTE_C6 1047<br> | ||
+ | #define NOTE_CS6 1109<br> | ||
+ | #define NOTE_D6 1175<br> | ||
+ | #define NOTE_DS6 1245<br> | ||
+ | #define NOTE_E6 1319<br> | ||
+ | #define NOTE_F6 1397<br> | ||
+ | #define NOTE_FS6 1480<br> | ||
+ | #define NOTE_G6 1568<br> | ||
+ | #define NOTE_GS6 1661<br> | ||
+ | #define NOTE_A6 1760<br> | ||
+ | #define NOTE_AS6 1865<br> | ||
+ | #define NOTE_B6 1976<br> | ||
+ | #define NOTE_C7 2093<br> | ||
+ | #define NOTE_CS7 2217<br> | ||
+ | #define NOTE_D7 2349<br> | ||
+ | #define NOTE_DS7 2489<br> | ||
+ | #define NOTE_E7 2637<br> | ||
+ | #define NOTE_F7 2794<br> | ||
+ | #define NOTE_FS7 2960<br> | ||
+ | #define NOTE_G7 3136<br> | ||
+ | #define NOTE_GS7 3322<br> | ||
+ | #define NOTE_A7 3520<br> | ||
+ | #define NOTE_AS7 3729<br> | ||
+ | #define NOTE_B7 3951<br> | ||
+ | #define NOTE_C8 4186<br> | ||
+ | #define NOTE_CS8 4435<br> | ||
+ | #define NOTE_D8 4699<br> | ||
+ | #define NOTE_DS8 4978<br> | ||
+ | <br> | ||
+ | int melody[] = {<br> | ||
+ | NOTE_AS4, NOTE_AS4, NOTE_AS4, NOTE_AS4,<br> | ||
+ | NOTE_AS4, NOTE_AS4, NOTE_AS4, NOTE_AS4,<br> | ||
+ | NOTE_AS4, NOTE_AS4, NOTE_AS4, NOTE_AS4,<br> | ||
+ | NOTE_AS4, NOTE_AS4, NOTE_AS4, NOTE_AS4,<br> | ||
+ | NOTE_AS4, NOTE_AS4, NOTE_AS4, NOTE_AS4,<br> | ||
+ | NOTE_D5, NOTE_D5, NOTE_D5, NOTE_D5,<br> | ||
+ | NOTE_C5, NOTE_C5, NOTE_C5, NOTE_C5, <br> | ||
+ | NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5, <br> | ||
+ | NOTE_G5, NOTE_G5, NOTE_G5, NOTE_G5,<br> | ||
+ | NOTE_G5, NOTE_G5, NOTE_G5, NOTE_G5, <br> | ||
+ | NOTE_G5, NOTE_G5, NOTE_G5, NOTE_G5, <br> | ||
+ | NOTE_C5, NOTE_AS4, NOTE_A4, NOTE_F4,<br> | ||
+ | NOTE_G4, 0, NOTE_G4, NOTE_D5,<br> | ||
+ | NOTE_C5, 0, NOTE_AS4, 0,<br> | ||
+ | NOTE_A4, 0, NOTE_A4, NOTE_A4,<br> | ||
+ | NOTE_C5, 0, NOTE_AS4, NOTE_A4, <br> | ||
+ | NOTE_G4,0, NOTE_G4, NOTE_AS5,<br> | ||
+ | NOTE_A5, NOTE_AS5, NOTE_A5, NOTE_AS5,<br> | ||
+ | NOTE_G4,0, NOTE_G4, NOTE_AS5,<br> | ||
+ | NOTE_A5, NOTE_AS5, NOTE_A5, NOTE_AS5,<br> | ||
+ | NOTE_G4, 0, NOTE_G4, NOTE_D5,<br> | ||
+ | NOTE_C5, 0, NOTE_AS4, 0,<br> | ||
+ | NOTE_A4, 0, NOTE_A4, NOTE_A4,<br> | ||
+ | NOTE_C5, 0, NOTE_AS4, NOTE_A4, <br> | ||
+ | NOTE_G4,0, NOTE_G4, NOTE_AS5,<br> | ||
+ | NOTE_A5, NOTE_AS5, NOTE_A5, NOTE_AS5,<br> | ||
+ | NOTE_G4,0, NOTE_G4, NOTE_AS5,<br> | ||
+ | NOTE_A5, NOTE_AS5, NOTE_A5, NOTE_AS5<br> | ||
+ | };<br> | ||
+ | <br> | ||
+ | // note durations: 4 = quarter note, 8 = eighth note, etc.:<br> | ||
+ | int noteDurations[] = {<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | 4,4,4,4,<br> | ||
+ | };<br> | ||
+ | <br> | ||
+ | <br> | ||
+ | //Actual code<br> | ||
+ | <br> | ||
+ | LiquidCrystal_I2C lcd(0x27,20,4);<br> | ||
+ | <br> | ||
+ | int ledcolor;<br> | ||
+ | int a = 1; //sets the delay until next color<br> | ||
+ | <br> | ||
+ | <br> | ||
+ | int red1 = 8; //sets the RED led pin for FIRST RGB<br> | ||
+ | int green1 = 9; //sets the GREEN led pin for FIRST RGB<br> | ||
+ | int blue1 = 10; //sets the BLUE led pin for FIRST RGB<br> | ||
+ | <br> | ||
+ | int red2 = 5; //sets the RED led pin for SECOND RGB<br> | ||
+ | int green2 = 6; //sets the GREEN led pin for SECOND RGB<br> | ||
+ | int blue2 = 7; //sets the BLUE led pin for SECOND RGB<br> | ||
+ | <br> | ||
+ | int red3 = 11; //sets the RED led pin for THIRD RGB<br> | ||
+ | int green3 = 12; //sets the GREEN led pin for THIRD RGB<br> | ||
+ | int blue3 = 13; //sets the BLUE led pin for THIRD RGB<br> | ||
+ | <br> | ||
+ | int button = 3;<br> | ||
+ | int pressed = 0; //checks if the button is pressed<br> | ||
+ | <br> | ||
+ | <br> | ||
+ | void setup() { //this sets the output pins<br> | ||
+ | <br> | ||
+ | pinMode(red1, OUTPUT);<br> | ||
+ | pinMode(green1, OUTPUT);<br> | ||
+ | pinMode(blue1, OUTPUT);<br> | ||
+ | <br> | ||
+ | pinMode(red2, OUTPUT);<br> | ||
+ | pinMode(green2, OUTPUT);<br> | ||
+ | pinMode(blue2, OUTPUT);<br> | ||
+ | <br> | ||
+ | pinMode(red3, OUTPUT);<br> | ||
+ | pinMode(green3, OUTPUT);<br> | ||
+ | pinMode(blue3, OUTPUT);<br> | ||
+ | <br> | ||
+ | pinMode(button, INPUT);<br> | ||
+ | <br> | ||
+ | <br> | ||
+ | lcd.init();<br> | ||
+ | // Print a message to the LCD.<br> | ||
+ | lcd.backlight();<br> | ||
+ | lcd.setCursor(0,0);<br> | ||
+ | lcd.print("Press the button");<br> | ||
+ | lcd.setCursor(4,1);<br> | ||
+ | lcd.print("to play!");<br> | ||
+ | <br> | ||
+ | RGB_color1(0, 0, 0);<br> | ||
+ | RGB_color2(0, 0, 0);<br> | ||
+ | RGB_color3(0, 0, 0);<br> | ||
+ | <br> | ||
+ | }<br> | ||
+ | <br> | ||
+ | <br> | ||
+ | void RGB_color1(int red_value, int green_value, int blue_value){<br> | ||
+ | digitalWrite(red1, red_value);<br> | ||
+ | digitalWrite(green1, green_value);<br> | ||
+ | digitalWrite(blue1, blue_value);<br> | ||
+ | }<br> | ||
+ | <br> | ||
+ | void RGB_color2(int red_value, int green_value, int blue_value){<br> | ||
+ | digitalWrite(red2, red_value);<br> | ||
+ | digitalWrite(green2, green_value);<br> | ||
+ | digitalWrite(blue2, blue_value);<br> | ||
+ | }<br> | ||
+ | <br> | ||
+ | void RGB_color3(int red_value, int green_value, int blue_value){<br> | ||
+ | digitalWrite(red3, red_value);<br> | ||
+ | digitalWrite(green3, green_value);<br> | ||
+ | digitalWrite(blue3, blue_value);<br> | ||
+ | }<br> | ||
+ | <br> | ||
+ | <br> | ||
+ | void loop() {<br> | ||
+ | int a = random(6); //randomly selects a number between 0 and 6<br> | ||
+ | int b = random(6);<br> | ||
+ | int c = random(6);<br> | ||
+ | int ledcolor1 = a;<br> | ||
+ | int ledcolor2 = b;<br> | ||
+ | int ledcolor3 = c;<br> | ||
+ | pressed = digitalRead(button);<br> | ||
+ | <br> | ||
+ | <br> | ||
+ | if (pressed == LOW) {<br> | ||
+ | delay(300);<br> | ||
+ | <br> | ||
+ | switch (a) {<br> | ||
+ | case 0: //if ledcolor equals 0 then the led will turn red<br> | ||
+ | RGB_color1(255, 0, 0);<br> | ||
+ | delay(a);<br> | ||
+ | break;<br> | ||
+ | <br> | ||
+ | case 1: //if ledcolor equals 1 then the led will turn green<br> | ||
+ | RGB_color1(0, 255, 0);<br> | ||
+ | delay(a);<br> | ||
+ | break;<br> | ||
+ | <br> | ||
+ | case 2: //if ledcolor equals 2 then the led will turn blue<br> | ||
+ | RGB_color1(0, 0, 255); // Blue<br> | ||
+ | delay(a);<br> | ||
+ | break;<br> | ||
+ | <br> | ||
+ | case 3: //if ledcolor equals 3 then the led will turn yellow<br> | ||
+ | RGB_color1(255, 255, 0);<br> | ||
+ | delay(a);<br> | ||
+ | break;<br> | ||
+ | <br> | ||
+ | case 4: //if ledcolor equals 4 then the led will turn cyan<br> | ||
+ | RGB_color1(255, 255, 255);<br> | ||
+ | delay(a);<br> | ||
+ | break;<br> | ||
+ | <br> | ||
+ | case 5: //if ledcolor equals 5 then the led will turn magenta<br> | ||
+ | RGB_color1(255, 0, 255); // Magenta<br> | ||
+ | delay(a);<br> | ||
+ | break;<br> | ||
+ | }<br> | ||
+ | <br> | ||
+ | <br> | ||
+ | switch (b) {<br> | ||
+ | case 0: //if ledcolor equals 0 then the led will turn red<br> | ||
+ | RGB_color2(255, 0, 0);<br> | ||
+ | delay(a);<br> | ||
+ | break;<br> | ||
+ | <br> | ||
+ | case 1: //if ledcolor equals 1 then the led will turn green<br> | ||
+ | RGB_color2(0, 255, 0);<br> | ||
+ | delay(a);<br> | ||
+ | break;<br> | ||
+ | <br> | ||
+ | case 2: //if ledcolor equals 2 then the led will turn blue<br> | ||
+ | RGB_color2(0, 0, 255); // Blue<br> | ||
+ | delay(a);<br> | ||
+ | break;<br> | ||
+ | <br> | ||
+ | case 3: //if ledcolor equals 3 then the led will turn yellow<br> | ||
+ | RGB_color2(255, 255, 0);<br> | ||
+ | delay(a);<br> | ||
+ | break;<br> | ||
+ | <br> | ||
+ | case 4: //if ledcolor equals 4 then the led will turn cyan<br> | ||
+ | RGB_color2(255, 255, 255);<br> | ||
+ | delay(a);<br> | ||
+ | break;<br> | ||
+ | <br> | ||
+ | case 5: //if ledcolor equals 5 then the led will turn magenta<br> | ||
+ | RGB_color2(255, 0, 255); // Magenta<br> | ||
+ | delay(a);<br> | ||
+ | break;<br> | ||
+ | }<br> | ||
+ | <br> | ||
+ | switch (c) {<br> | ||
+ | case 0: //if ledcolor equals 0 then the led will turn red<br> | ||
+ | RGB_color3(255, 0, 0);<br> | ||
+ | delay(a);<br> | ||
+ | break;<br> | ||
+ | <br> | ||
+ | case 1: //if ledcolor equals 1 then the led will turn green<br> | ||
+ | RGB_color3(0, 255, 0);<br> | ||
+ | delay(a);<br> | ||
+ | break;<br> | ||
+ | <br> | ||
+ | case 2: //if ledcolor equals 2 then the led will turn blue<br> | ||
+ | RGB_color3(0, 0, 255); // Blue<br> | ||
+ | delay(a);<br> | ||
+ | break;<br> | ||
+ | <br> | ||
+ | case 3: //if ledcolor equals 3 then the led will turn yellow<br> | ||
+ | RGB_color3(255, 255, 0);<br> | ||
+ | delay(a);<br> | ||
+ | break;<br> | ||
+ | <br> | ||
+ | case 4: //if ledcolor equals 4 then the led will turn cyan<br> | ||
+ | RGB_color3(255, 255, 255);<br> | ||
+ | delay(a);<br> | ||
+ | break;<br> | ||
+ | <br> | ||
+ | case 5: //if ledcolor equals 5 then the led will turn magenta<br> | ||
+ | RGB_color3(255, 0, 255); // Magenta<br> | ||
+ | delay(a);<br> | ||
+ | break;<br> | ||
+ | }<br> | ||
+ | <br> | ||
+ | }<br> | ||
+ | <br> | ||
+ | <br> | ||
+ | if (ledcolor1 == ledcolor2) {<br> | ||
+ | if (ledcolor2 == ledcolor3) {<br> | ||
+ | if (pressed == LOW){<br> | ||
+ | <br> | ||
+ | lcd.init();<br> | ||
+ | // Print a message to the LCD.<br> | ||
+ | lcd.backlight();<br> | ||
+ | lcd.setCursor(0,0);<br> | ||
+ | lcd.print("Congratulations!");<br> | ||
+ | lcd.setCursor(1,1);<br> | ||
+ | lcd.print(" You won 10k!");<br> | ||
+ | <br> | ||
+ | for (int thisNote = 0; thisNote < 112; thisNote++) {<br> | ||
+ | <br> | ||
+ | int noteDuration = 750 / noteDurations[thisNote];<br> | ||
+ | tone(2, melody[thisNote], noteDuration);<br> | ||
+ | <br> | ||
+ | int pauseBetweenNotes = noteDuration * 1.3;<br> | ||
+ | delay(pauseBetweenNotes);<br> | ||
+ | <br> | ||
+ | noTone(2);<br> | ||
+ | }<br> | ||
+ | <br> | ||
+ | lcd.clear();<br> | ||
+ | setup();<br> | ||
+ | <br> | ||
+ | }<br> | ||
+ | }<br> | ||
+ | }<br> | ||
+ | }<br> | ||
+ | | ||
+ | |||
+ | </div> | ||
+ | |||
+ | </html> | ||
+ | \\ | ||
Line 53: | Line 441: | ||
\\ | \\ | ||
\\ | \\ | ||
+ | |||
{{:pm:prj2022:cstan:slotmachine1.jpg?378|}} | {{:pm:prj2022:cstan:slotmachine1.jpg?378|}} | ||
{{:pm:prj2022:cstan:slotmachine2.jpg?378|}} | {{:pm:prj2022:cstan:slotmachine2.jpg?378|}} | ||
{{:pm:prj2022:cstan:slotmachine3.jpg?378|}} | {{:pm:prj2022:cstan:slotmachine3.jpg?378|}} | ||
+ | |||
\\ | \\ |