Mystery Box: Haunted Radio

Similar documents
Neon LED Signs. Created by John Park. Last updated on :11:09 PM UTC

MP3 Feather - Gordon Cole

Coffee Detonator: The TNT Plunger Grinder

Mad Science Test Tube Rack

Circuit Playground Express Head-Tilt Ears

Tent Lantern. Created by Timothy Reese. Last updated on :17:25 AM UTC

NeoPixie Dust Bag with Circuit Playground Express

Feather Weather Lamp. Created by Ruiz Brothers. Last updated on :54:26 PM UTC

Audio Prank Gift Box. Created by Becky Stern. Last updated on :46:15 PM UTC

Celebration Spectacles

Interior Purse Light. Created by Becky Stern. Last updated on :41:08 PM UTC

Chirping Plush Owl Toy

Adafruit Capacitive Touch Sensor Breakouts

Ping Pong Ball Launcher

Adafruit PowerBoost 500 Shield

Toy Car Speed Timer. Created by Kirby Griese. Last updated on :13:49 PM UTC

Clockwork Goggles. Created by John Park. Last updated on :03:10 PM UTC

NeoPixel Ring Bangle Bracelet

Bunny Ears with MakeCode

FLORA and GEMMA ICSP. Created by Becky Stern. Last updated on :42:16 PM UTC

Adafruit ATWINC1500 WiFi Breakout

Adafruit APDS9960 breakout

Adabot Operation Game

i2c/spi LCD Backpack Created by lady ada Last updated on :11:04 PM UTC

Joy Featherwing. Created by Dean Miller. Last updated on :03:07 PM UTC

Adafruit TPL5111 Reset Enable Timer Breakout

Portable Apple Watch Charger

Adafruit VL53L0X Time of Flight Micro-LIDAR Distance Sensor Breakout

Crickit Dancing Marionette Kit Created by Dano Wall. Last updated on :03:11 PM UTC

Data Logging with Feather and CircuitPython

FLORA TV-B-Gone. Created by Becky Stern. Last updated on :32:57 PM UTC

Pushrod Garage. Created by John Park. Last updated on :07:30 PM UTC

Adafruit TPL5110 Power Timer Breakout

Adafruit MCP9808 Precision I2C Temperature Sensor Guide

'Sup Brows. Created by Kate Hartman. Last updated on :52:04 PM UTC

Android GBoard Morse Code Control with Circuit Playground Express

FLORA and GEMMA ICSP. Created by Becky Stern. Last updated on :30:55 PM EST

1.8" TFT Display Breakout and Shield

MCP Bit DAC Tutorial

Bluetooth Controlled NeoPixel Headphones

Adafruit LED Sequins. Created by Becky Stern. Last updated on :02:00 AM UTC

Crawling Animatronic Hand

LED Eyes. Created by Ruiz Brothers. Last updated on :50:55 AM UTC

Prophet 600 GliGli mod

Adafruit HUZZAH32 - ESP32 Feather

3D Printed 20w Amplifier Box

Adafruit Mini TFT with Joystick Featherwing

Flora Brake Light Backpack

Circuit Playground Digital Input

Trinket NeoPixel LED Longboard

NeoPixel Bike Light. Created by Ruiz Brothers. Last updated on :43:46 PM UTC

Interactive Gift Box. Created by codingpro. Last updated on :47:40 AM UTC

NeoMatrix 8x8 Word Clock

Infinity Mirror Valentine's Candy Box

Trinket-Powered Conference Room Occupancy Display

Con Badge with Circuit Playground Express

Adafruit 8x16 LED Matrix FeatherWing

Adafruit IO Basics: ESP Arduino

Solar Boost Bag. Created by Becky Stern. Last updated on :44:55 PM UTC

Boomy The Boombox. Created by Ruiz Brothers. Last updated on :52:13 PM UTC

Slider Crank Mechanism -- from Cardboard and Craft Sticks

Paper Airplane Launcher

3D Printed Case for Adafruit Feather

Crickit Carnival Bumper Bot

Adafruit AM2320 Sensor

Cup o' Sound. Created by Becky Stern. Last updated on :30:06 PM EST

Guardian Shield+ Zelda Breath of the Wild

7 Portable Multitouch Raspberry Pi Tablet

Adafruit MMA8451 Accelerometer Breakout

Alohamora Bottle. Created by Erin St Blaine. Last updated on :58:53 PM UTC

Adafruit MPRLS Ported Pressure Sensor Breakout

DIY Circuit Playground Shields

Circuit Playground Express Laser Tag

3D Printed Camera LED Ring

MiniPOV4 - DIY Full-Color Persistence of Vision & Light-Painting Kit

Adafruit 2.4" TFT FeatherWing

Adafruit MMA8451 Accelerometer Breakout

PyPortal View Master Created by Ruiz Brothers. Last updated on :51:28 AM UTC

Adafruit Mini TFT " 160x80

Using IFTTT with Adafruit IO to Make an IoT Door Detector

Mystery Box: NeoMatrix Mk I

Adafruit Si7021 Temperature + Humidity Sensor

Adafruit DRV2605 Haptic Controller Breakout

Phone-Activated Talking Dog Collar

Arduino Lesson 6. Digital Inputs

GPS Logging Dog Harness

Stumble-Bot. Created by Dano Wall. Last updated on :04:06 AM UTC

Adafruit Color Sensors

Magical Mistletoe. Created by Leslie Birch. Last updated on :45:29 PM UTC

Mini Mac Pi. Created by Ruiz Brothers. Last updated on :43:27 PM UTC

PyPortal NeoPixel Color Picker Created by Kattni Rembor. Last updated on :42:41 PM UTC

Raspberry Pi Selfie Bot

NeoPixel Basketball Hoop

MCP Bit DAC Tutorial

Crickit Powered Holiday Diorama

Adafruit LED Sequins. Created by Becky Stern. Last updated on :00:06 PM EST

BLE Light Switch with Feather nrf52840 and Crickit

Adafruit WINC1500 WiFi Shield for Arduino

TSL2561 Luminosity Sensor

DIY Bluetooth Gamepad

Transcription:

Mystery Box: Haunted Radio Created by John Park Last updated on 2018-08-22 04:01:09 PM UTC

Guide Contents Guide Contents Overview Parts & Materials Tools Radio Reuse Disassembly Tuning Mechanism On/Off Reuse Battery Prep Feather Prep Dial Sensing Plug in Power Sensor Placement Speaker Wiring Tidy Up Code It Use the Haunted Radio Reassembly Use It 2 3 3 4 5 5 9 12 14 18 21 28 29 32 34 37 41 41 42 Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 2 of 44

Overview Vintage radios are irresistible. When you hear one spewing static, your natural response is to turn the dial and try to tune in a station. The anticipation! What will you hear? With this Haunted Radio project, you can decide for your guests or escape room attendees exactly what they'll hear, and you can even choose the frequency. There isn't any pirate radio station involved here, either. Instead, the secret is a Feather microcontroller reading the dial position with a magnet sensor, and an attached Music Maker FeatherWing with amplifier to play back your prerecorded message over the radio's speaker. Parts & Materials Here's what you'll need to make your Haunted Radio: Vintage radio -- search your grandparents' attic for one, or head to a flea market. You'll be looking for three things: an appealing design, a pulley-based mechanical tuning indicator, and a "regular" permanent magnet speaker. (Some old radios will have an electrodynamic speaker that uses an electromagnet. Powering that is an added step we want to avoid.) Feather Huzzah ESP8266 (https://adafru.it/n6a) microcontroller Music Maker FeatherWing w/ amp (https://adafru.it/w0f) to play back songs and sounds SD card for the Music Maker (https://adafru.it/ezr) T (https://adafru.it/wfv)erminal Block Breakout FeatherWing (https://adafru.it/wfv) to simplify wiring (this is optional if you choose to wire things differently) 6600mAh 3.7V Lithium Ion battery (https://adafru.it/dtj) to power everything (or, skip this and use a USB power plug if you don't need your Haunted Radio to be portable) Hall effect sensor (https://adafru.it/x8e)used to sense the magnet attached to the tuning indicator Rare earth magnet (https://adafru.it/vft) Feather Stacking Headers (https://adafru.it/oap) to connect Feather to Terminal Breakout FeatherWing and still allow Music Maker FeatherWing to connect above. Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 3 of 44

Jumper wires (https://adafru.it/x8f) USB cable for programming the Feather (https://adafru.it/iia) 2-Wire splice connectors (https://adafru.it/x9a) Stranded wire (https://adafru.it/x9b) Tools Soldering iron and solder Wire cutters Wire strippers Pliers Hot glue gun or tape Let's take a look at how to prepare your vintage radio to be Haunted! Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 4 of 44

Radio Reuse A lot can vary from radio to radio, so these won't be exact steps for yours, but a general method for reusing the case, dial, knob, and speaker when possible. AC mains power is dangers! Be sure to unplug the radio from the wall first!! Disassembly Most vintage radios are accessed by removing a back panel. Go ahead and unscrew and remove yours. Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 5 of 44

Next, carefully pull of all knobs. These are often press-fit into place and can be removed with moderate force. Some may have a small set screw that must be loosened first. Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 6 of 44

Check the bottom for fasteners -- in this case small hex bolts -- are remove them. Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 7 of 44

The speaker will be connected to the radio electronics by two wires. Cut those right where they enter the board, leaving the full length of the wires connected to the speaker. Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 8 of 44

You can now remove the electronics from the radio. Look at those beautiful vacuum tubes. Tuning Mechanism You'll find a large wheel connected to the tuning knob shaft via a tensioned tuning cord. Try out the mechanism -- if you find that it is slipping you can apply some rosin to the cord, as the whole system relies on friction to turn the cord, Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 9 of 44

which in turn moves the dial indicator. Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 10 of 44

Here we can see the tuning indicator that slides back and forth. It is to this that we'll be attaching the magnet later. Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 11 of 44

On/Off Reuse Looking at the underside of the radio, you'll see a bunch of crusty old parts. Do not lick them. If you want to have your Haunted Radio turn on and off via the original knob --this is often a dual-use on/off plus volume knob -- check for a pair of wires running to the knob. These are the on/off switches, vs. the set of three lugs that are for volume. You can clip all of these wires and then test continuity with a multimeter to confirm. Solder two wires to the on/off lugs, about 8" each. Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 12 of 44

Soldering on your stranded wire is fun! Here I've removed one of the vacuum tubes to use as a convenient through hole for running wires up to the top. Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 13 of 44

Battery Prep Next, you'll splice the on/off switch wires into the battery cable. Start by cutting the black wire (or the red, the decision is yours!) Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 14 of 44

Strip all of the wire ends. Use two butt splices to connect two pairs of green and black wires. Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 15 of 44

Squeeze down the connectors with a pair of pliers and you've now added the radio's on/off switch to your battery! Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 16 of 44

Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 17 of 44

Feather Prep First, solder on the stacking female/male headers to your Feather Huzzah ESP8266. (You can use this guide (https://adafru.it/x9c) as a reference.) Then, connect the Feather to the Terminal Block Breakout FeatherWing. Solder the male headers onto the Music Maker FeatherWing, and then fit it on top of the Feather. Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 18 of 44

Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 19 of 44

Before going any further, make sure you have a basic understanding of how to program and use an Arduinocompatible Feather microcontroller. Thankfully, we have a lot of great tutorials on how this whole thing works. Click here to get started with Arduino (https://adafru.it/pcg), and then come back to this guide to continue. Confirm that everything is working as expected by following the Music Maker guide here (https://adafru.it/x9d), connecting the Music Maker to a small speaker (or your radio's speaker) and running the Feather Player example. Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 20 of 44

Dial Sensing There are a number of ways to read the position of the tuner indicator on an old radio. One versatile, but more involved way would be to read the capacitance of the tuner itself. Another would be to add a rotary encoder to the proceedings, or perhaps glue an encoder disk to the tuner's large wheel and read it optically. Since we only need to measure a single position, and we don't need to know that state of the tuner (where it has been) we'll get away with using one of the most simple methods here: a hall effect sensor placed at the desired station number position that can read the presence of a magnet that travels with the indicator needle. Need to read multiple station positions? Just add more Hall effect sensors -- as many as your microcontroller has available inputs! This is our circuit diagram for the Haunted Radio -- the Hall effect sensor has three connections: 1. power to 3v3 on the Feather 2. ground to GND 3. digital out to pin 4 You'll also run a 10k resistor between legs 1 and 3 of the sensor. Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 21 of 44

Build the sensor harness with three of the jumper wires. You'll plug the sensor legs into the female jumper connectors and do the same with the resistor. A bit of tape can hold the ends together nicely. Make sure you match the orientation so that leg one is on the left with the "front" of the sensor (the smaller face) toward you, and goes into the power (red) wire. Trim the legs of the resistor and then push them in to contact the sensor legs 1 and 3. Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 22 of 44

Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 23 of 44

Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 24 of 44

Plug the red power wire into the 3v3 terminal block, then screw it down. Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 25 of 44

Plug in and screw down the black wire to GND. Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 26 of 44

Lastly, plug the yellow wire into the pin 4 (marked SDA on the board) terminal. Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 27 of 44

Plug in Power You can plug in the battery to the JST connector on the Feather board now -- check that the switch on the Terminal Block Breakout Board is in the "on" position. You'll turn on the whole system with the radio's on/off knob. Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 28 of 44

Sensor Placement Decide what frequency you'd like to use as your Haunted Radio's "cursed" frequency. Place the Hall effect sensor over this position (you may need to temporarily place the assembly back into the radio's case to determine the position). Place the magnet on the dial -- we'll check for proper orientation later when we upload the code to the Feather. In case Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 29 of 44

the dial isn't ferrous you can use tape or hot glue. Tilt and bend the sensor legs so that the sensing face is nearest the magnet -- on many Hall sensors this is the larger face -- then affix the sensor to the radio with tape or hot glue. Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 30 of 44

Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 31 of 44

The magnet should be easily read by the sensor at this distance, but you can fine tune it later. Speaker Wiring Strip the ends of the radio's speaker wires, then screw them into one of the output pairs (either Left or Right) on the Music Maker FeatherWing. Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 32 of 44

Don't be tempted to wire the Left and Right outputs together -- it won't make things louder and could damage the amp! Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 33 of 44

Tidy Up Neaten up the whole package by combining the Feather stack and the battery using zip ties or rubber bands. I've placed a small piece of felt between them to keep the exposed terminal points on the bottom from poking the heat shrink of the battery pack. Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 34 of 44

Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 35 of 44

Before fully reassembling the radio, let's upload the code to the Feather! Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 36 of 44

Code It Our code is fairly simple -- it really just does two things: play a looping static file, and then when the magnet is detected, play a different file. You already got the Feather up and running in the Feather Prep section of the guide, so now we need to add code to read the Hall effect sensor and play the second track. You'll needs two audio.mp3 files on the SD card. I've named my files STATIC.MP3 and TUNED.MP3. Load your files onto the card and then put the card in the FeatherWing's SD slot. You can find more info on loading music files here (https://adafru.it/wdp). Copy this code below, paste it into a new Arduino sketch, save the sketch as hauntedradio.ino in your Arduino sketches library, and then upload it to the Feather board which is plugged in via USB. //Haunted Radio //by John Park for Adafruit Industries //based on feather_player by Limor Fried // //Uses hall sensor to detect magnet attached to radio tuner dial //Plays static file and radio play files from Music Maker FeatherWing //connected to Feather microcontroller // //MIT License /*/////////// Hardware //////////////////////////////// Feather (of any variety, in this case ESP8266 Huzzah) Music Maker MP3 FeatherWing Hall sensor connected to digital input pin 4 Wiring is left (pin 1) to Vin, middle (2) to GND, right (3) to digital input -place 10K resistor between voltage in Pin 1 and voltage out Pin 3 \ / ------- / \ + GND Output \-[ ]-/ 10k resistor /////////////////////////////////////////////////////*/ #include <SPI.h> #include <SD.h> #include <Adafruit_VS1053.h> // These are the pins used Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 37 of 44

#define VS1053_RESET -1 // VS1053 reset pin (not used!) // Feather M0 or 32u4 #if defined( AVR ) defined(arduino_samd_feather_m0) #define VS1053_CS 6 // VS1053 chip select pin (output) #define VS1053_DCS 10 // VS1053 Data/command select pin (output) #define CARDCS 5 // Card chip select pin // DREQ should be an Int pin *if possible* (not possible on 32u4) #define VS1053_DREQ 9 // VS1053 Data request, ideally an Interrupt pin // Feather ESP8266 #elif defined(esp8266) #define VS1053_CS 16 // VS1053 chip select pin (output) #define VS1053_DCS 15 // VS1053 Data/command select pin (output) #define CARDCS 2 // Card chip select pin #define VS1053_DREQ 0 // VS1053 Data request, ideally an Interrupt pin // Feather ESP32 #elif defined(esp32) #define VS1053_CS 32 // VS1053 chip select pin (output) #define VS1053_DCS 33 // VS1053 Data/command select pin (output) #define CARDCS 14 // Card chip select pin #define VS1053_DREQ 15 // VS1053 Data request, ideally an Interrupt pin // Feather Teensy3 #elif defined(teensyduino) #define VS1053_CS 3 // VS1053 chip select pin (output) #define VS1053_DCS 10 // VS1053 Data/command select pin (output) #define CARDCS 8 // Card chip select pin #define VS1053_DREQ 4 // VS1053 Data request, ideally an Interrupt pin // WICED feather #elif defined(arduino_stm32_feather) #define VS1053_CS PC7 // VS1053 chip select pin (output) #define VS1053_DCS PB4 // VS1053 Data/command select pin (output) #define CARDCS PC5 // Card chip select pin #define VS1053_DREQ PA15 // VS1053 Data request, ideally an Interrupt pin #elif defined(arduino_feather52) #define VS1053_CS 30 // VS1053 chip select pin (output) #define VS1053_DCS 11 // VS1053 Data/command select pin (output) #define CARDCS 27 // Card chip select pin #define VS1053_DREQ 31 // VS1053 Data request, ideally an Interrupt pin #endif Adafruit_VS1053_FilePlayer musicplayer = Adafruit_VS1053_FilePlayer(VS1053_RESET, VS1053_CS, VS1053_DCS, VS1053_DREQ, CARDCS); const int HALLPIN = 4; int hallstate = 0; // hall effect sensor pin (since we aren't using I2C) // variable for reading the hall sensor status int staticon = 1; // variable to store state of static being played int stationon = 0; // variable to store state of station being selected /////////////////////////// Setup ///////////////////////////////////////////// void setup() { Serial.begin(115200); Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 38 of 44

pinmode(hallpin, INPUT_PULLUP); //so we can read the Hall sensor // if you're using Bluefruit or LoRa/RFM Feather, disable the BLE interface //pinmode(8, INPUT_PULLUP); // Wait for serial port to be opened, remove this line for 'standalone' operation //while (!Serial) { delay(1); } Serial.println("\n\nAdafruit Music Maker VS1053 Feather Haunted Radio"); if (! musicplayer.begin()) { // initialise the music player Serial.println(F("Couldn't find VS1053, do you have the right pins defined?")); while (1); } Serial.println(F("VS1053 found")); //musicplayer.sinetest(0x44, 500); // Make a tone to indicate VS1053 is working if (!SD.begin(CARDCS)) { Serial.println(F("SD failed, or not present")); while (1); // don't do anything more } Serial.println("SD OK!"); // Set volume for left, right channels. lower numbers == louder volume! musicplayer.setvolume(40,40); #if defined( AVR_ATmega32U4 ) // Timer interrupts are not suggested, better to use DREQ interrupt! // but we don't have them on the 32u4 feather... musicplayer.useinterrupt(vs1053_fileplayer_timer0_int); // timer int #elif defined(esp32) // no IRQ! doesn't work yet :/ #else // If DREQ is on an interrupt pin we can do background // audio playing musicplayer.useinterrupt(vs1053_fileplayer_pin_int); // DREQ int #endif } ///////////////////////// Loop ////////////////////////////////////////////// void loop(){ hallstate = digitalread(hallpin); // the magnet is on 1500AM, //check to see if we're tuned in to this station if(staticon == 1) { Serial.println("Playing STATIC.MP3.\n"); musicplayer.startplayingfile("static.mp3"); staticon = 0; //flip the flag so it doesn't start playing over again Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 39 of 44

} staticon = 0; //flip the flag so it doesn't start playing over again if (hallstate == HIGH){ //this is HIGH when we don't sense a magnet Serial.println("No magnet.\n"); delay(200); } else if(hallstate == LOW){ //when this goes LOW, we're seeing the magnet Serial.println("\t Magnet has been sensed!"); if(stationon==0){ Serial.println("\t Playing file TUNED.MP3\n"); musicplayer.setvolume(30,30); musicplayer.stopplaying(); musicplayer.startplayingfile("tuned.mp3"); stationon=1; } delay(200); } } if(musicplayer.stopped()) { Serial.println("Player has stopped.\n"); staticon=1; //reset counter so static will start again //stationon=0; //reset counter so station can be restarted when sensor is //over the magnet again, comment this line out if you don't want the station file to loop or play mul } Now, when you turn on the Haunted Radio it will begin immediately playing the static track. As you tune the dial and reach the cursed station, it will play back the second track! Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 40 of 44

Use the Haunted Radio Reassembly Put your radio back together now, sliding it in place first, and then reconnecting the knobs. Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 41 of 44

Use It It's time to unleash the mysterious powers of the Haunted Radio on your guests! You can make up a puzzle in a game or escape room that can only be solved by tuning the radio and listening to the message, or perhaps use it as an interactive prop while telling a ghost story... Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 42 of 44

Adafruit Industries https://learn.adafruit.com/mystery-box-haunted-radio Page 43 of 44

Adafruit Industries Last Updated: 2018-08-22 04:01:04 PM UTC Page 44 of 44