Components and supplies
I2C 16 x 2 LCD
Arduino Uno Rev3
Piezo Buzzer
10kOhm potentiometer
Oscillator IC, Voltage Controlled
Breadboard - 830 contacts
7 Segment LED Display, InfoVue
Jumper wires (generic)
Resistor 220 ohm
Apps and platforms
Arduino IDE 2.0 (beta)
Autodesk tinkercad.com
Project description
Code
Illustrating the Relationship Between Voltage and Frequency
cpp
Relationship between voltage and frequency
1/* 2 Sketch Title: Illustrating the Relationship Between Voltage and Frequency 3 4 Description: This sketch demonstrates how changing voltage affects 5 the frequency of an oscillator, using a potentiometer, 6 a 7-segment display, an LCD screen, and a piezo speaker in Tinkercad. 7 8 This example code is in the public domain. 9 10 Modified 29 Nov 2024 11 by Google Gemini Advanced and VideotronicMaker (Tishin) 12*/ 13 14#include <LiquidCrystal_I2C.h> 15 16// Set the LCD address for a 16 chars and 2 line display 17LiquidCrystal_I2C lcd(0x27, 16, 2); // 0x27 is the most common I2C address 18 19// Define 7-segment display pins 20const int segA = 2; 21const int segB = 3; 22const int segC = 4; 23const int segD = 5; 24const int segE = 6; 25const int segF = 7; 26const int segG = 8; 27const int segDP = 9; 28 29// Define potentiometer pin 30const int potPin = A0; 31 32// Define oscillator pin 33const int oscillatorPin = 12; 34 35// Define piezo speaker pin 36const int speakerPin = 11; // Using digital pin 13 for the speaker 37 38 39void setup() { 40 // Initialize the LCD 41 lcd.init(); 42 lcd.backlight(); // Turn on the backlight 43 44 // Set 7-segment display pins as outputs 45 for (int i = 2; i <= 9; i++) { 46 pinMode(i, OUTPUT); 47 } 48 49 // Set oscillator and speaker pins as outputs 50 pinMode(oscillatorPin, OUTPUT); 51 pinMode(speakerPin, OUTPUT); 52} 53 54void loop() { 55 // Read potentiometer value 56 int potValue = analogRead(potPin); 57 58 // Map potentiometer value to frequency range (adjust as needed) 59 int frequency = map(potValue, 0, 1023, 100, 1000); 60 61 // Generate frequency on oscillator and speaker pins 62 tone(oscillatorPin, frequency); 63 tone(speakerPin, frequency); 64 65 // Display frequency on 7-segment display 66 displayFrequencyOnSevenSegment(frequency); 67 68 // Display frequency and pot value on LCD 69 lcd.clear(); 70 lcd.setCursor(0, 0); 71 lcd.print("Freq: "); 72 lcd.print(frequency); 73 lcd.print(" Hz"); 74 75 lcd.setCursor(0, 1); 76 lcd.print("Pot: "); 77 lcd.print(potValue); 78 79 delay(100); // Reduced delay for smoother sound 80} 81 82// Function to display frequency on 7-segment display 83void displayFrequencyOnSevenSegment(int frequency) { 84 int hundredsDigit = frequency / 100; 85 int tensDigit = (frequency / 10) % 10; 86 87 // Display hundreds digit on the first 7-segment display 88 digitalWrite(10, HIGH); // Enable the first digit (common anode) 89 digitalWrite(11, LOW); // Disable the second digit 90 displayDigit(hundredsDigit); 91 delay(5); // Delay to prevent flickering 92 93 // Display tens digit on the second 7-segment display 94 digitalWrite(10, LOW); // Disable the first digit 95 digitalWrite(11, HIGH); // Enable the second digit (common anode) 96 displayDigit(tensDigit); 97 delay(5); // Delay to prevent flickering 98} 99 100void displayDigit(int digit) { 101 // This function sets the appropriate segment pins LOW or HIGH 102 // to display the given digit on a common anode display. 103 switch (digit) { 104 case 0: 105 digitalWrite(segA, LOW); 106 digitalWrite(segB, LOW); 107 digitalWrite(segC, LOW); 108 digitalWrite(segD, LOW); 109 digitalWrite(segE, LOW); 110 digitalWrite(segF, LOW); 111 digitalWrite(segG, HIGH); 112 digitalWrite(segDP, HIGH); // Decimal point off 113 break; 114 case 1: 115 digitalWrite(segA, HIGH); 116 digitalWrite(segB, LOW); 117 digitalWrite(segC, LOW); 118 digitalWrite(segD, HIGH); 119 digitalWrite(segE, HIGH); 120 digitalWrite(segF, HIGH); 121 digitalWrite(segG, HIGH); 122 digitalWrite(segDP, HIGH); // Decimal point off 123 break; 124 case 2: 125 digitalWrite(segA, LOW); 126 digitalWrite(segB, LOW); 127 digitalWrite(segC, HIGH); 128 digitalWrite(segD, LOW); 129 digitalWrite(segE, LOW); 130 digitalWrite(segF, HIGH); 131 digitalWrite(segG, LOW); 132 digitalWrite(segDP, HIGH); // Decimal point off 133 break; 134 case 3: 135 digitalWrite(segA, LOW); 136 digitalWrite(segB, LOW); 137 digitalWrite(segC, LOW); 138 digitalWrite(segD, LOW); 139 digitalWrite(segE, HIGH); 140 digitalWrite(segF, HIGH); 141 digitalWrite(segG, LOW); 142 digitalWrite(segDP, HIGH); // Decimal point off 143 break; 144 case 4: 145 digitalWrite(segA, HIGH); 146 digitalWrite(segB, LOW); 147 digitalWrite(segC, LOW); 148 digitalWrite(segD, HIGH); 149 digitalWrite(segE, HIGH); 150 digitalWrite(segF, LOW); 151 digitalWrite(segG, LOW); 152 digitalWrite(segDP, HIGH); // Decimal point off 153 break; 154 case 5: 155 digitalWrite(segA, LOW); 156 digitalWrite(segB, HIGH); 157 digitalWrite(segC, LOW); 158 digitalWrite(segD, LOW); 159 digitalWrite(segE, HIGH); 160 digitalWrite(segF, LOW); 161 digitalWrite(segG, LOW); 162 digitalWrite(segDP, HIGH); // Decimal point off 163 break; 164 case 6: 165 digitalWrite(segA, LOW); 166 digitalWrite(segB, HIGH); 167 digitalWrite(segC, LOW); 168 digitalWrite(segD, LOW); 169 digitalWrite(segE, LOW); 170 digitalWrite(segF, LOW); 171 digitalWrite(segG, LOW); 172 digitalWrite(segDP, HIGH); // Decimal point off 173 break; 174 case 7: 175 digitalWrite(segA, LOW); 176 digitalWrite(segB, LOW); 177 digitalWrite(segC, LOW); 178 digitalWrite(segD, HIGH); 179 digitalWrite(segE, HIGH); 180 digitalWrite(segF, HIGH); 181 digitalWrite(segG, HIGH); 182 digitalWrite(segDP, HIGH); // Decimal point off 183 break; 184 case 8: 185 digitalWrite(segA, LOW); 186 digitalWrite(segB, LOW); 187 digitalWrite(segC, LOW); 188 digitalWrite(segD, LOW); 189 digitalWrite(segE, LOW); 190 digitalWrite(segF, LOW); 191 digitalWrite(segG, LOW); 192 digitalWrite(segDP, HIGH); // Decimal point off 193 break; 194 case 9: 195 digitalWrite(segA, LOW); 196 digitalWrite(segB, LOW); 197 digitalWrite(segC, LOW); 198 digitalWrite(segD, LOW); 199 digitalWrite(segE, HIGH); 200 digitalWrite(segF, LOW); 201 digitalWrite(segG, LOW); 202 digitalWrite(segDP, HIGH); // Decimal point off 203 break; 204 default: 205 // Turn off all segments for unknown digits 206 for (int i = 2; i <= 9; i++) { 207 digitalWrite(i, HIGH); 208 } 209 break; 210 } 211}
Documentation
Layout
How to connect this circuit
Understanding Voltage and Frequency.png
Comments
Only logged in users can leave comments