The code for this is a mix between code for CIRC04: Servo and CIRC10: Temperature. What we're doing is attaching the value for the temperature, to a value of the servo. Let's walk through some parts of it:
Inside, the loop, we're going to read in a voltage from the pin using the getVoltage()
function from CIRC04. We are then going to pass this value to a new function, convertToF()
, which is generated from the voltage value, to convert the voltage to a degrees Fahrenheit temperature:
// read the voltage from the pin float voltage = getVoltage(temperaturePin); // convert the voltage to a temperature value float temperature = convertToF(voltage);
Then, we're going to constrain the temperature values. This is totally up to you, you can use any number, but we are using -10F and 100F as our minimum and maximum temperature accepted by the TMP36:
map((int(temperature)), -10, 100
We still need to map the temperature values to servo values. The minimum degrees a servo can move is 0 degrees and the maximum degrees is 180, so let's set the servo to map: -10 to 0 and 100 to 180:
servoPos = map((int(temperature)), -10, 100, 0, 180);
Then, write servoPos
to the servo!
// write servoPos to the servo metroServo.write(servoPos); // poll every 0.5sec delay(500);
Here's the full code, with all the helpers built in:
/* * PROJ07 - RGB Color Mixer * * by Brent Rubell for Adafruit Industries */ // RGB LED Pins int rgbLED[] = {9, 10, 11}; // trim potentiometer pin int trimPin = A0; // button pin const int buttonPin = 12; // button state int buttonState = 0; // trim pot. value int trimValue = 0; int colorIdx = 0; int red = 0; int green = 0; int blue = 0; boolean CURRENTRGB[] = {0, 0, 0}; void setup() { // Setup Serial Serial.begin(9600); // set the 3 pins as output pins for(int i = 0; i < 3; i++) { pinMode(rgbLED[i], OUTPUT); } // initialize the push-button as an input pinMode(buttonPin, INPUT); } void loop() { // read the value of the push-button buttonState = digitalRead(buttonPin); if(buttonState == LOW) { delay(2); // reset the colorIdx if it goes past Blue (colorIdx = 3) if(colorIdx == 3) { colorIdx = 0; } colorIdx++; switch(colorIdx) { case 1: trimValue = analogRead(trimPin); red = map(trimValue, 0, 670, 0, 255); CURRENTRGB[0] = red; break; case 2: trimValue = analogRead(trimPin); green = map(trimValue, 0, 670, 0, 255); CURRENTRGB[1] = green; break; case 3: trimValue = analogRead(trimPin); blue = map(trimValue, 0, 670, 0, 255); CURRENTRGB[2] = blue; break; default: break; } Serial.println("red:"); Serial.print(CURRENTRGB[0]); Serial.println(" "); Serial.println("green:"); Serial.print(CURRENTRGB[1]); Serial.println(" "); Serial.println("blue:"); Serial.print(CURRENTRGB[2]); Serial.println(" "); setColor(rgbLED, CURRENTRGB); delay(1000); } } void setColor(int* led, const boolean* color) { for(int i = 0; i < 3; i++){ digitalWrite(led[i], color[i]); } }
Page last edited January 22, 2025
Text editor powered by tinymce.