Advertisement
medpixman

Arduino Multi-Function Shield V2

Feb 17th, 2019
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.67 KB | None | 0 0
  1. /*
  2.  
  3.   9FEB2019
  4.   Sketch uses 2312 bytes (7%) of program storage space. Maximum is 32256 bytes.
  5.   Global variables use 38 bytes (1%) of dynamic memory, leaving 2010 bytes for local variables. Maximum is 2048 bytes.
  6.  
  7. */
  8.  
  9. //Pressing nothing Displays value of analog revolving potentiometer 0-1024
  10. //pressing key1 Shows 0123 on LED Segment Displays
  11. //pressing key2 Buzzer ringing
  12. //pressing key3 The four on-board LEDs light in sequence
  13.  
  14. //Defining three pins of 74HC595 for the LED Numerical Display
  15. int latchPin = 4;//ST_CP
  16. int clockPin = 7;//SH_CP
  17. int dataPin = 8; //DS
  18.  
  19. //Defining three buttons for input
  20. int key1 = A1;
  21. int key2 = A2;
  22. int key3 = A3;
  23.  
  24. //Defining the buzzer pin
  25. int buzzer = 3;
  26.  
  27. //Defining the potentiometer input for A/D conversion
  28. int pot = A0;
  29.  
  30. //Pin definition for the LEDs
  31. int led1 = 13;
  32. int led2 = 12;
  33. int led3 = 11;
  34. int led4 = 10;
  35.  
  36. int dat_wei[4] = {0x01, 0x02, 0x04, 0x08}; //LED Segment Displays showing 1--4
  37. int dat_duan[10] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; //LED Segment Displays showing 0--9
  38. char i = 0;
  39.  
  40. // Run once at the beginning or after a [Reset]
  41. void setup ()
  42. {
  43.   pinMode(latchPin, OUTPUT);
  44.   pinMode(clockPin, OUTPUT);
  45.   pinMode(dataPin, OUTPUT);
  46.   pinMode(key1, INPUT);
  47.   pinMode(key2, INPUT);
  48.   pinMode(key3, INPUT);
  49.   pinMode(buzzer, OUTPUT);
  50.   digitalWrite(buzzer, HIGH); // Sound Off;
  51.  
  52.   pinMode(led1, OUTPUT);
  53.   pinMode(led2, OUTPUT);
  54.   pinMode(led3, OUTPUT);
  55.   pinMode(led4, OUTPUT);
  56.   //  pinMode(led5, OUTPUT);
  57.   //  pinMode(led6, OUTPUT);
  58.   for (char i = 8; i < 14; i++)
  59.     digitalWrite(i, HIGH);
  60. }
  61.  
  62. // Main Program Loop (Runs continuously)
  63. void loop()
  64. {
  65.   if (digitalRead(key1) == LOW )
  66.     SMG(); //testing LED Segment Displays
  67.   if (digitalRead(key2) == LOW )
  68.     buzzer_(); //testing buzzer
  69.   if (digitalRead(key3) == LOW)
  70.     led_display(); //testing LED
  71.   if (digitalRead(key1) == HIGH & digitalRead(key2) == HIGH & digitalRead(key3) == HIGH)
  72.     analog(); //testing analog input
  73. }
  74.  
  75. // Using the 7 Segment X 4 Digit LEDs Display
  76. void SMG(void)
  77. {
  78.   digitalWrite(latchPin, LOW); //clear LED Segment Displays
  79.   shiftOut(dataPin, clockPin, MSBFIRST , 0x00);
  80.   shiftOut(dataPin, clockPin, MSBFIRST , 0x00);
  81.   digitalWrite(latchPin, HIGH);
  82.   while (1)
  83.   {
  84.     digitalWrite(latchPin, LOW);
  85.     //MSBFIRST,transmitting binary bit from high to low,74HC595 starts from first piece, and displaces data from Q0 to Q7. If there is data, it will start from the second piece like this.
  86.     shiftOut(dataPin, clockPin, MSBFIRST , dat_duan[i]); //data about second piece
  87.     shiftOut(dataPin, clockPin, MSBFIRST , dat_wei[i]); //way of MSBFIRST,data about first piece
  88.     digitalWrite(latchPin, HIGH);
  89.     i++;
  90.     if (i == 4) {
  91.       i = 0;
  92.     }
  93.     if (digitalRead(key1) == HIGH)
  94.     {
  95.       digitalWrite(latchPin, LOW); //clear LED Segment Displays
  96.       shiftOut(dataPin, clockPin, MSBFIRST , 0x00);
  97.       shiftOut(dataPin, clockPin, MSBFIRST , 0x00);
  98.       digitalWrite(latchPin, HIGH);
  99.       break;
  100.     }
  101.   }
  102. }
  103.  
  104. // Using the Buzzer
  105. void buzzer_(void)
  106. {
  107.   char i;
  108.   digitalWrite(latchPin, LOW); //clear LED Segment Displays
  109.   shiftOut(dataPin, clockPin, MSBFIRST , 0x00);
  110.   shiftOut(dataPin, clockPin, MSBFIRST , 0x00);
  111.   digitalWrite(latchPin, HIGH);
  112.   while (1)
  113.   {
  114.     for (i = 0; i < 80; i++) // output a frequency sound
  115.     {
  116.       digitalWrite(buzzer, LOW); // sound
  117.       delay(1);//delay1ms
  118.       digitalWrite(buzzer, HIGH ); //not sound
  119.       delay(1);//ms delay
  120.     }
  121.     for (i = 0; i < 100; i++) // output a frequency sound
  122.     {
  123.       digitalWrite(buzzer, LOW); // sound
  124.       digitalWrite(buzzer, HIGH); //not sound
  125.       delay(2);//2ms delay
  126.     }
  127.     if (digitalRead(key2) == HIGH)
  128.     {
  129.       digitalWrite(latchPin, LOW); //clear LED Segment Displays
  130.       shiftOut(dataPin, clockPin, MSBFIRST , 0x00);
  131.       shiftOut(dataPin, clockPin, MSBFIRST , 0x00);
  132.       digitalWrite(latchPin, HIGH);
  133.       break;
  134.     }
  135.   }
  136. }
  137.  
  138. // Using the 4 LEDs in sequence
  139. void led_display()
  140. {
  141.   digitalWrite(latchPin, LOW); //clear LED Segment Displays
  142.   shiftOut(dataPin, clockPin, MSBFIRST , 0x00);
  143.   shiftOut(dataPin, clockPin, MSBFIRST , 0x00);
  144.   digitalWrite(latchPin, HIGH);
  145.  
  146.   while (1)
  147.   {
  148.     digitalWrite(led1, LOW);
  149.     delay(100);
  150.     digitalWrite(led1, HIGH);
  151.     digitalWrite(led2, LOW);
  152.     delay(100);
  153.     digitalWrite(led2, HIGH);
  154.     digitalWrite(led3, LOW);
  155.     delay(100);
  156.     digitalWrite(led3, HIGH);
  157.     digitalWrite(led4, LOW);
  158.     delay(100);
  159.     digitalWrite(led4, HIGH);
  160.     //   digitalWrite(led5, LOW);
  161.     delay(100);
  162.     //    digitalWrite(led5, HIGH);
  163.     //    digitalWrite(led6, LOW);
  164.     delay(100);
  165.     //    digitalWrite(led6, HIGH);
  166.     if (digitalRead(key3) == HIGH)
  167.     {
  168.       break;
  169.     }
  170.   }
  171. }
  172.  
  173. // Read the potentiometer voltage value
  174. void analog()
  175. {
  176.   int val, qian, bai, shi, ge;
  177.   val = analogRead(pot);
  178.   qian = val / 1000;
  179.   bai = val % 1000;
  180.   bai = bai / 100;
  181.   shi = val % 100;
  182.   shi = shi / 10;
  183.   ge = val % 10;
  184.   digitalWrite(latchPin, LOW);
  185.   shiftOut(dataPin, clockPin, MSBFIRST , dat_duan[qian]);
  186.   shiftOut(dataPin, clockPin, MSBFIRST , 0x01);
  187.   digitalWrite(latchPin, HIGH);
  188.   digitalWrite(latchPin, LOW);
  189.   shiftOut(dataPin, clockPin, MSBFIRST , dat_duan[bai]);
  190.   shiftOut(dataPin, clockPin, MSBFIRST , 0x02);
  191.   digitalWrite(latchPin, HIGH);
  192.   digitalWrite(latchPin, LOW);
  193.   shiftOut(dataPin, clockPin, MSBFIRST , dat_duan[shi]);
  194.   shiftOut(dataPin, clockPin, MSBFIRST , 0x04);
  195.   digitalWrite(latchPin, HIGH);
  196.   digitalWrite(latchPin, LOW);
  197.   shiftOut(dataPin, clockPin, MSBFIRST , dat_duan[ge]);
  198.   shiftOut(dataPin, clockPin, MSBFIRST , 0x08);
  199.   digitalWrite(latchPin, HIGH);
  200. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement