Tag Archives: temperature

Improving the Android Temperature Converter App

In this tutorial we will look at how to improve the code in the Temperature Converter App for Android from the previous tutorial. If you have tested the app yourself, you might notice that the app works great when the user enters only numbers. However, what happens when a user enters nothing at all? The app will crash!

We will look at how to prevent such errors from occurring so that the app won’t crash if the user accidentally (or deliberately) enters non-numeric values or nothing at all – this is something known as data validation. This is what the app will look like…

Android Temperature Converter app (with data validation)
Android Temperature Converter app (with data validation)

The code below is from the same app but has some new code added to it. All of the code is commented, explaining what each new line does. None of the design elements (buttons, labels, text fields) have been changed in any way.

using Android.App;
using Android.Widget;
using Android.OS;
// need to add using System; to access the Math functions
using System;

namespace TemperatureConverter
{
  [Activity (Label = "TemperatureConverter", MainLauncher = true, Icon = "@mipmap/icon")]
  public class MainActivity : Activity
  {
    Button cButton;
    Button fButton;
    TextView resultTextView;
    EditText temperatureTextEdit;

    protected override void OnCreate (Bundle savedInstanceState)
    {
      base.OnCreate (savedInstanceState);

      // Set our view from the "main" layout resource
      SetContentView (Resource.Layout.Main);

      cButton = FindViewById<Button> (TemperatureConverter.Resource.Id.cButton);
      fButton = FindViewById<Button> (TemperatureConverter.Resource.Id.fButton);
      resultTextView = FindViewById<TextView> (TemperatureConverter.Resource.Id.resultTextView);
      temperatureTextEdit = FindViewById<EditText> (TemperatureConverter.Resource.Id.temperatureTextEdit);

      cButton.Click += CButton_Click;
      fButton.Click += FButton_Click;
    }

    void FButton_Click (object sender, System.EventArgs e)
    {
      // Get the temperature entered and store as a string
      string tempString = temperatureTextEdit.Text;
      // Check if the string is empty
      if (string.IsNullOrEmpty (tempString) == false) {
        // If string is not empty, create a float variable to store the temperature value
        float temp;
        // Use TryParse method to store the value in the temp variable if value is numeric
        bool isNumeric = float.TryParse (tempString, out temp);
        // Check if tempString value is numeric and if so, use it in the conversion formula
        if (isNumeric == true) {
          // Create fResult variable which stores result of C to F conversion
          float fResult = temp * 1.8f + 32f;
          // Change fResult to decimal data type and round to 2 decimal places
          decimal fResultRounded = Math.Round ((decimal)fResult, 2);
          // Display result on the screen
          resultTextView.Text = fResultRounded.ToString () + " degrees Fahrenheit";
        }
        // If tempString is not numeric, ask user to enter numbers only
        else {
          resultTextView.Text = "Enter numbers only";
        }
        // If nothing was entered by user, ask user to enter a number
      }
      else {
        resultTextView.Text = "Enter a number to convert";
      }
    }

    void CButton_Click (object sender, System.EventArgs e)
    {
      // Get the temperature entered and store as a string
      string tempString = temperatureTextEdit.Text;
      // Check if the string is empty
      if (string.IsNullOrEmpty (tempString) == false) {
        // If string is not empty, create a float variable to store the temperature value
        float temp;
        // Use TryParse method to store the value in the temp variable if value is numeric
        bool isNumeric = float.TryParse(tempString, out temp);
        // Check if tempString value is numeric and if so, use it in the conversion formula
        if (isNumeric == true) {
          // Create cResult variable which stores result of F to C conversion
          float cResult = (temp - 32f) / 1.8f;
          // Change cResult to decimal data type and round to 2 decimal places
          decimal cResultRounded = Math.Round((decimal)cResult, 2);
          // Display result on the screen
          resultTextView.Text = cResultRounded.ToString () + " degrees Celsius";
        } 
        // If tempString is not numeric, ask user to enter numbers only
        else {
          resultTextView.Text = "Enter numbers only";
        }
      }
      // If nothing was entered by user, ask user to enter a number
      else {
        resultTextView.Text = "Enter a number to convert";
      }
    }
  }
}

Improving on the iOS Temperature Converter App

In this tutorial we will look at how to improve the code in the Temperature Converter App for iOS from the previous tutorial. If you have tested the app yourself, you might notice that the app works great when the user enters only numbers. However, what happens when a user enters nothing or enters something other than numbers (such as a letter or other character)? The app will crash!

We will look at how to prevent such errors from occurring so that the app won’t crash if the user accidentally (or deliberately) enters non-numeric values or nothing at all. This is something known as data validation.

The code below is from the same app but has some new code added to it. All of the code is commented, explaining what each new line does. None of the design elements (buttons, labels, text fields) have been changed in any way.

Sample code

Here is the new and improved code for the ViewController.cs file.

// need to add using System; line to access math functions
using System;

using UIKit;

namespace TempConverter
{
  public partial class ViewController : UIViewController
  {
    public ViewController (IntPtr handle) : base (handle)
    {
    }

    public override void ViewDidLoad ()
    {
      base.ViewDidLoad ();
      // Perform any additional setup after loading the view, typically from a nib.e

      //  Create a button touch event for the Convert to Celsius button
      cButton.TouchUpInside+= CButton_TouchUpInside;
      //  Create a button touch event for the Convert to Fahrenheit button
      fButton.TouchUpInside+= FButton_TouchUpInside;

    }

    void FButton_TouchUpInside (object sender, EventArgs e)
    {
      // Get the temperature entered and store as a string
      string tempString = tempTextField.Text;
      // Check if the string is empty
      if (string.IsNullOrEmpty (tempString) == false) {
        // If string is not empty, create a float variable to store the temperature value
        float temp;
        // Use TryParse method to store the value in the temp variable if value is numeric
        bool isNumeric = float.TryParse (tempString, out temp);
        // Check if tempString value is numeric and if so, use it in the conversion formula
        if (isNumeric == true) {
          // Create fResult variable which stores result of C to F conversion
          float fResult = temp * 1.8f + 32f;
          // Change fResult to decimal data type and round to 2 decimal places
          decimal fResultRounded = Math.Round ((decimal)fResult, 2);
          // Display result on the screen
          resultLabel.Text = fResultRounded.ToString () + " degrees Fahrenheit";
        }
        // If tempString is not numeric, ask user to enter numbers only
        else {
          resultLabel.Text = "Enter numbers only";
        }
      // If nothing was entered by user, ask user to enter a number
      }
      else {
        resultLabel.Text = "Enter a number to convert";
      }

    }

    void CButton_TouchUpInside (object sender, EventArgs e)
    {
      // Get the temperature entered and store as a string
      string tempString = tempTextField.Text;
      // Check if the string is empty
      if (string.IsNullOrEmpty (tempString) == false) {
        // If string is not empty, create a float variable to store the temperature value
        float temp;
        // Use TryParse method to store the value in the temp variable if value is numeric
        bool isNumeric = float.TryParse(tempString, out temp);
        // Check if tempString value is numeric and if so, use it in the conversion formula
        if (isNumeric == true) {
          // Create cResult variable which stores result of F to C conversion
          float cResult = (temp - 32f) / 1.8f;
          // Change cResult to decimal data type and round to 2 decimal places
          decimal cResultRounded = Math.Round((decimal)cResult, 2);
          // Display result on the screen
          resultLabel.Text = cResultRounded.ToString () + " degrees Celsius";
        } 
        // If tempString is not numeric, ask user to enter numbers only
        else {
          resultLabel.Text = "Enter numbers only";
        }
      }
      // If nothing was entered by user, ask user to enter a number
      else {
        resultLabel.Text = "Enter a number to convert";
      }

    }

    public override void DidReceiveMemoryWarning ()
    {
      base.DidReceiveMemoryWarning ();
      // Release any cached data, images, etc that aren't in use.
    }
      
    public override void TouchesBegan (Foundation.NSSet touches, UIEvent evt)
    {
      base.TouchesBegan (touches, evt);

      this.View.EndEditing (true);
    }
  }
}

Creating your first iOS app

This tutorial will show you how to create a Temperature Converter app for iOS devices using Xamarin. We made the same app for Android in a previous tutorial and now we are going to make it for iOS devices. The app will look like this…

iosapp

Although we will be using Xamarin for designing and coding the app, you will still need to have XCode installed on your Mac device (click here for detailed installation instructions).

Watch the video below or scroll down to view the step-by-step instructions and sample code.

Video

Step 1

To get started, open Xamarin and begin a New Solution.

ios1

Step 2

Select App under iOS and then select Single View App (C#). Click on Next to continue.

ios2

Step 3 

Give your app a name. In this case, it will be called TempConverter. You also need to select a minimum iOS version you want to support. In this case, the target version is iOS 9.1. Make sure the target version is either an older or same version of iOS that you will be using to run the app on. Click Next to continue.

ios3

Step 4

Now just confirm the project and solution name (making sure it is not the same name as a solution that already exists in your projects folder) as well as the project folder location and click Create.

ios4

Step 5

Once the new solution has loaded, Xamarin will automatically open a file called AppDelegate.cs. Don’t worry about this file for now as we won’t really be changing anything there. The two files that we will be working with are the Main.storyboard file (for adding the buttons, text labels, and text boxes) and ViewController.cs (for coding the functionality).

ios5

Double-click the Main.storyboard file to open it. It may take a minute to load. The storyboard is where you will add your user interface elements such as buttons, text boxes and text labels. Choose the iPhone device that you want to use as the preview for your storyboard eg. iPhone 6.

ios6

Step 6

In the Toolbox panel (use the search box to find and add the Toolbox to your layout if you don’t see it there), scroll down until you see Label (you can also search in the Toolbox for the Label element.

Drag a Label element on to the phone screen where you would like to place it.

ios7

Step 7

Change the Text value in the Properties panel (on the Widgets tab) to ‘Enter temperature in degrees:’.

ios8

Step 8

Drag the edges of the Label element to resize it so that you can see all of the text.

ios9

You can also change the colour of the text, the font and alignment (eg. align to center) from the Properties panel.

ios10

Step 9

Drag a Text Field element from the Toolbox on to the screen under the text label. Change its Placeholder text to ‘Temperature in degrees’. Resize the Text Field and center-align the text.

ios11

Step 10

Drag two Button elements on to the screen and resize them to fit their text. Change the first button’s text to ‘Convert to Celsius’ and the second button’s text to ‘Convert to Fahrenheit’.

ios12

Step 11

The last element to add is the text label which will display the result of the temperature conversion. Drag a Label element on to the screen and change its default Text to 0, change its Colour and Font size/style. You can also change the Alignment to center.

ios13

Step 12

Now we need to name each of the screen elements so that they can be accessed by the code. Firstly, click on the temperature text field and change its Name to tempTextField.

ios14

Step 13

Now give the ‘Convert to Celsius’ button the Name cButton.

ios15

Also set the Name of the ‘Convert to Fahrenheit’ button to fButton.

ios16

Step 14

Lastly, click on the text label which will display the conversion result and change its Name to resultLabel. Now is a good time to save the Main.storyboard file (Click File > Save).

ios17

Step 15

Now its time to do some coding. Open the ViewController.cs file. In this file, click inside the ViewDidLoad method and add the code highlighted below. This code will add a button touch event that will occur when the user touches to Convert to Celsius button. When we create the cButton.TouchUpInside event it will also automatically create a new method CButton_TouchUpInside which will contain the code that will convert a temperature to Celsius.

ios18

Step 16

We now need to also create a button touch event for the Convert to Fahrenheit button and a method that will contain its code.

ios19

Step 17

Now let’s add the code for the FButton_TouchUpInside method first. This method will be called when the Convert to Fahrenheit button is pressed by the user. Add the highlighted code below. Firstly, a float variable called temp is created to store the temperature value that the user enters into the text field as a float value. Then a variable called fResult will convert the temperature from Celsius to Fahrenheit and store the result as a float value. Lastly, the text on the resultLabel element will display the result and the text ‘degrees Fahrenheit’ at the end of the sentence eg. ’68 degrees Fahrenheit’.

ios20

Note: You may need to resize the fResult label element in the Main.storyboard file so that it can fit the result and text.

Step 18

We can now add the code for the Convert to CButton_TouchUpInside method to run the conversion when the Convert to Celsius button is pressed. Add the highlighted code to this method shown below. Then save your code (File > Save).

ios21

Step 19

Now go back to the Main.storyboard file and select the Text Field element. In the Properties panel and on the Widget tab, scroll down and change the Keyboard Type to Decimal Pad so that numbers with decimal place can be typed in and the most suitable keypad is displayed. Save the file.

ios22

Step 20

At this point, the app will work and will allow the user to type in a temperature (as a whole or decimal number) and convert it to either Celsius or Fahrenheit. However, after the user has typed in a number they should be able to hid the keyboard if it is no longer needed.

Before testing the app we will add a little piece of code that will allow the keypad to be dismissed by the user when it is no longer needed. To do this, go back to the ViewController.cs file and start typing the highlighted line of code (where it is shown below). As you start typing override touchesBegan you should see an auto-complete suggestion called TouchesBegan(NSSet touches, UIEvent evt). Press the Enter/Return key on your keyboard to auto-complete the line of code. This will create a new override method called TouchesBegan. Inside this method we will add some code to dismiss the keyboard.

ios23
As you start typing override touchesBegan you should see an auto-complete suggestion called TouchesBegan(NSSet touches, UIEvent evt). Press the Enter/Return key on your keyboard to auto-complete the line of code.

Add the following code inside the new override method called TouchesBegan to allow the keyboard to be dismissed when typing has been completed by the user. Then save the file.

ios24

Finishing up

All of the coding is done. Congratulations – you have made your first iOS app using Xamarin and the C# programming language! Remember to save your files.Now just select a type of iPhone model you would like to test this app on and click on the Build button to start testing/emulating the app.

ios25

And this is what the completed app should look like…

ios26

What next?

Test your app thoroughly. Are there any problems with your app? Does it crash under some circumstances? Is there any way it could be improved. Jump into the next tutorial to see how this app can be improved.

Sample code

You can download the sample code for the ViewController.cs file here:

using System;

using UIKit;

namespace TempConverter
{
  public partial class ViewController : UIViewController
  {
    public ViewController (IntPtr handle) : base (handle)
    {
    }

    public override void ViewDidLoad ()
    {
      base.ViewDidLoad ();
      // Perform any additional setup after loading the view, typically from a nib.e

      cButton.TouchUpInside+= CButton_TouchUpInside;

      fButton.TouchUpInside+= FButton_TouchUpInside;

    }

    void FButton_TouchUpInside (object sender, EventArgs e)
    {
      float temp = float.Parse(tempTextField.Text);
      float fResult = temp * 1.8f + 32f;
      resultLabel.Text = fResult.ToString () + " degrees Fahrenheit";
    }

    void CButton_TouchUpInside (object sender, EventArgs e)
    {
      float temp = float.Parse (tempTextField.Text);
      float cResult = (temp - 32f) / 1.8f;
      resultLabel.Text = cResult.ToString () + " degrees Celsius";
    }

    public override void DidReceiveMemoryWarning ()
    {
      base.DidReceiveMemoryWarning ();
      // Release any cached data, images, etc that aren't in use.
    }
      
    public override void TouchesBegan (Foundation.NSSet touches, UIEvent evt)
    {
      base.TouchesBegan (touches, evt);

      this.View.EndEditing (true);
    }
  }
}

Creating your first Android app with Xamarin

This tutorial explains how to use Xamarin and the C# programming skills you have gained so far in this tutorial series to start making your very own Android apps. In this tutorial, we will develop a Temperature Converter app for Android which can convert between Celsius and Fahrenheit temperatures.

This is what the app will look like:

Temperature Converter app for Android
Temperature Converter app for Android

So let’s get started! You can watch the video below or read through the step-by-step instructions below. The C# sample code for this project is also at the bottom of this page.

Video

Step 1

Click on New Solution to create a new solution for this project.

aa1

Step 2

Select the Android App template and click Next.

aa2

Step 3

Give your app a name. For this example, we have called the app TemperatureConverter. Select a target platform. Here, we have chosen Modern Development to make this app compatible with modern Android phones. If you choose Latest and Greatest you will need to download the latest Android Simulators. Choose Default theme and click Next.

aa3

Step 4

Choose the location to store your project and click Next. You can keep the project name as it is or give it a different name.

aa4

Step 5

After Xamarin creates your new project it will most likely automatically open the MainActivity.cs file (if not, double-click it from the Solution folders list on the left side of the screen). By default, you will already have some lines of code in there for an example app. Delete the lines of code shown in the image below (we will be adding our own buttons so we don’t need the one that is already there).

aa5

Step 6

In the Solution list on the left side of the screen, click to open the Resources folder, then open the layout folder, and double-click to open the Main.axml file. This will open the storyboard for our main screen in Designer view.

aa6

You will see the default button ‘Hello World, Click Me!’ there. You can right-click this button and click on Delete to remove the button.

aa6b

Step 7

From the Toolbox on the right side of the screen, scroll down until you see the Text (Small) element (under Form Widgets). Drag the Text (Small) element on to the storyboard in the Designer view.

aa7

Step 8

Now drag a Plain Text element (under Text Fields) from the Toolbox on to the storyboard under the Small Text element you added in the previous step.

aa8

Step 9

Now you need to drag two Button elements (found under Form Widgets in the Toolbox) on to the screen.

aa9

Hint: You can search form screen design elements in the Toolbox using the search box.

Step 10

The last screen design element to add is a Text (Large) (large text label) to display the result of the temperature conversion.

aa10

Step 11

Click on the Small Text element and in the Properties panel (and Widgets tab) change the Text property from ‘Small Text’ to ‘Temperature (in degrees)’. Hit the Enter/Return key on your keyboard and you should see the text label change on the phone screen.

aa11

Step 12

Change the Text property in the Properties panel for both buttons. The first button should say ‘Convert to Celsius’ and the second button should say ‘Convert to Fahrenheit’.

aa12

Step 13

Now change the large text label so that it says ‘0’ is the default value before any result is displayed.

aa13

Did you know? These values can also be changed from the Source view if you prefer as shown below. Be careful not to accidentally change any of the other code though! Some of your code might be different to the code below – don’t change it unless you know exactly what you are doing.

You can alternatively change the text and IDs of elements in the Source view if you prefer that over the Designer view.
You can alternatively change the text and IDs of elements in the Source view if you prefer that over the Designer view.

Step 14

Now that we have changed the text that displays on the labels and buttons, we need to change the actual names of the elements.

Click on the temperature text field and change its Id in the Properties panel. Its Id needs to change from @+id/editText1 to @+id/temperatureEditText.

aa14

Step 15

Now change the name (Id) of the text label that will display the conversion result. Click on the result label and change its Id from @+id/textView2 to @+id/resultTextView.

aa15

Step 16

Repeat the last step for the two buttons changing their Id’s to @+id/cButton for the Convert to Celsius button and @+id/fButton for the Convert to Fahrenheit button. Make sure you save the Main.axml file by pressing Cmd + S (on Mac) or Ctrl + S (on Windows).

aa16

Step 17

Now we can add the functionality to the app. Open the MainActivity.cs file. Firstly, we will define the different text label and button elements in the code. Inside the public class MainActivity: Activity class, add the following highlighted code:

aa17
Click to see larger version of image if you can’t read the code.

Step 18

Now we need to assign the values from the Main.axml file to each element in the MainActivity.cs file. Under the SetContentView (Resource.Layout.Main); line of code, add the following highlighted code:

aa18

Now we will be able to use these elements in a new method that will convert the temperature input.

Step 19

We need to create click events for both the ‘Convert to Celsius’ button and the ‘Convert to Fahrenheit’ button. To do this, add the code below. You will notice that this will create two new methods for our click events. These methods will be used when the click event is fired (when the buttons are tapped by the user) so the relevant conversion code will need to be in each click event method.

aa19

Step 20

Now let’s add the code for the FButton_Click method first (the method which will convert from Celsius to Fahrenheit). We will create a new float variable that will contain the value entered by the user in the temperatureEditText text field. The value will also need to be converted (parsed) from the string data type to the float data type.

aa20

Step 21

A float variable will need to be created that will store the result of converting from Celsius to Fahrenheit. In the conversion formula, we need to add the letter f at the end of each value that will need to be parsed as a float.

Step 22

Now we can access the resultTextView element and display the conversion result on that text label. It will also need to be converted to a string. We can add the text “ degrees Farenheit” to the end of the result displayed.

Step 23

Now we just need to write the code for the CButton_Click method by creating the variable which will store the value entered by the user, creating a variable which will store the Fahrenheit to Celsius conversion result, and then displaying the result on the text label. After adding the code (as shown below), save the file.

aa23

Step 24

Now go back to the Main.axml file in the Designer view and click on the temperatureEditText text field element. In the Properties panel, scroll down until you see Input Type (under Input Format on the Widget tab). Change the Input Type to NumberDecimal. Then save the file.

aa24

That is all of the coding done! Now we can test the app but first we must select an Android Virtual Device to emulate the app.

Step 25

Click on the Device button next to Debug on the top toolbar and select a compatible Virtual Device that has been installed. The Virtual Device must be the same or higher API level than the targeted device selected in Step 3 (eg. the Modern Development option is API level 16). The Nexus 5 virtual device shown below is API level 19. If you don’t have a compatible virtual device to select then you will need to click on Manage Android Devices and download a compatible virtual device (they are free to download).

To install and use virtual Android devices for testing, it is suggested you install the Xamarin Android Player. Once installed, you can download a virtual device (eg. Nexus 5) and use it on your Mac or PC to test the Android apps you build. You can also use the built-in Android Virtual Device manager but it is much slower!

aa25a

Once a compatible virtual device has been selected you can run the app by clicking on the Build icon on the top toolbar.

aa25b

The Xamarin Android Player will open and load the selected virtual device. It may take a minute. Unlock the device screen and your app should open!

aa25c
Unlock the simulated phone by dragging the padlock icon to the side. Your app should then automatically open.
aa25d
Enter a number value in the text field and then press the relevant conversion button to see the conversion result.
Success!
Success!

Congratulations, you just made your very first Android app using Xamarin and the C# language! In the next tutorial we will make the same app for an iPhone.

Later on we will also look at how to export an Android app so that you can install it on your own phone.

Sample C# code

Here is the sample code for the MainActivity.cs file. Note that the app, solution and project are all named TemperatureConverter.

using Android.App;
using Android.Widget;
using Android.OS;

namespace TemperatureConverter
{
  [Activity (Label = "TemperatureConverter", MainLauncher = true, Icon = "@mipmap/icon")]
  public class MainActivity : Activity
  {
    Button cButton;
    Button fButton;
    TextView resultTextView;
    EditText temperatureTextEdit;

    protected override void OnCreate (Bundle savedInstanceState)
    {
      base.OnCreate (savedInstanceState);

      // Set our view from the "main" layout resource
      SetContentView (Resource.Layout.Main);

      cButton = FindViewById<Button> (TemperatureConverter.Resource.Id.cButton);
      fButton = FindViewById<Button> (TemperatureConverter.Resource.Id.fButton);
      resultTextView = FindViewById<TextView> (TemperatureConverter.Resource.Id.resultTextView);
      temperatureTextEdit = FindViewById<EditText> (TemperatureConverter.Resource.Id.temperatureTextEdit);

      cButton.Click+= CButton_Click;
      fButton.Click+= FButton_Click;

    }

    void FButton_Click (object sender, System.EventArgs e)
    {
      float temp = float.Parse (temperatureTextEdit.Text);
      float fResult = temp * 1.8f + 32f;
      resultTextView.Text = fResult.ToString () + " degrees Fahreheit";
    }

    void CButton_Click (object sender, System.EventArgs e)
    {
      float temp = float.Parse (temperatureTextEdit.Text);
      float cResult = (temp - 32f) / 1.8f;
      resultTextView.Text = cResult.ToString () + " degrees Celsius";
    }
  }
}

 

Arduino weather station project

This tutorial will show you how to take temperature readings using the Freetronics temperature sensor and an Arduino Uno.

Note that there are two different module types: the temperature sensor module and the humidity & temperature sensor module. If you have the humidity & temperature sensor module you will need to download a library for the Arduino IDE and use different wiring and code – follow the instructions for that module here: http://www.freetronics.com.au/pages/humid-humidity-temperature-sensor-module-quickstart-guide

Parts required

Here is what you will need:

  • Arduino Uno board
  • Temperature Sensor Module
  • Breadboard
  • 3 male-to-male jumper wires
  • Arduino IDE software (free at http://www.arduino.cc/)
  • USB cable

Wire it up!

tempwiring

 

Attach the temperature sensor module to your breadboard. The GND pin should connect the GND pin on the Arduino board, the VCC pin should connect the 5V pin on the Arduino board, and the DATA pin should connect to the digital I/O pin 2 on the Arduino board – all these are connected via the breadboard using male-to-male jumper wires.

The pictures below show how to wire it all up in greater detail.

tempwiring1 tempwiring2 tempwiring3

 

Arduino code

Here is the code for the Arduino sketch (you can also copy it from http://www.freetronics.com.au/pages/temp-temperature-sensor-module-quickstart-guide). Make sure you scroll down to see how to test the sensor.

#define REF_PIN 2
void getCurrentTemp( int *sign, int *whole, int *fract);
char temp_string[10];
void setup(){
  Serial.begin(9600);
  // initialize DS18B20 datapin
  digitalWrite(REF_PIN, LOW);
  pinMode(REF_PIN, INPUT);      // sets the digital pin as input (logic 1)
  pinMode(15, INPUT);
}
void loop(){
  getCurrentTemp(temp_string);
  Serial.println(temp_string);
  delay(1000);
}
void OneWireReset (int Pin) // reset.  Should improve to act as a presence pulse
{
  digitalWrite (Pin, LOW);
  pinMode (Pin, OUTPUT);        // bring low for 500 us
  delayMicroseconds (500);
  pinMode (Pin, INPUT);
  delayMicroseconds (500);
}
void OneWireOutByte (int Pin, byte d) // output byte d (least sig bit first).
{
  byte n;
 
  for (n=8; n!=0; n--)
  {
    if ((d & 0x01) == 1)  // test least sig bit
    {
      digitalWrite (Pin, LOW);
      pinMode (Pin, OUTPUT);
      delayMicroseconds (5);
      pinMode (Pin, INPUT);
      delayMicroseconds (60);
    }
    else
    {
      digitalWrite (Pin, LOW);
      pinMode (Pin, OUTPUT);
      delayMicroseconds (60);
      pinMode (Pin, INPUT);
    }
    d = d>>1; // now the next bit is in the least sig bit position.
  }
}
byte OneWireInByte (int Pin) // read byte, least sig byte first
{
  byte d, n, b;
 
  for (n=0; n<8; n++)   {     digitalWrite (Pin, LOW);     pinMode (Pin, OUTPUT);     delayMicroseconds (5);     pinMode (Pin, INPUT);     delayMicroseconds (5);     b = digitalRead (Pin);     delayMicroseconds (50);     d = (d >> 1) | (b<<7); // shift d to right and insert b in most sig bit position
  }
  return (d);
}
void getCurrentTemp (char *temp)
{
  int HighByte, LowByte, TReading, Tc_100, sign, whole, fract;
  OneWireReset (REF_PIN);
  OneWireOutByte (REF_PIN, 0xcc);
  OneWireOutByte (REF_PIN, 0x44); // perform temperature conversion, strong pullup for one sec
  OneWireReset (REF_PIN);
  OneWireOutByte (REF_PIN, 0xcc);
  OneWireOutByte (REF_PIN, 0xbe);
  LowByte = OneWireInByte (REF_PIN);
  HighByte = OneWireInByte (REF_PIN);
  TReading = (HighByte << 8) + LowByte;
  sign = TReading & 0x8000;  // test most sig bit
  if (sign) // negative
  {
    TReading = (TReading ^ 0xffff) + 1; // 2's comp
  }
  Tc_100 = (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25
 
  whole = Tc_100 / 100;  // separate off the whole and fractional portions
  fract = Tc_100 % 100;
 
  if (sign) {
    temp[0] = '-';
  } else {
    temp[0] = '+';
  }
 
  if (whole/100 == 0) {
    temp[1] = ' ';
  } else {
    temp[1] = whole/100+'0';
  }
  temp[2] = (whole-(whole/100)*100)/10 +'0' ;
  temp[3] = whole-(whole/10)*10 +'0';
  temp[4] = '.';
  temp[5] = fract/10 +'0';
  temp[6] = fract-(fract/10)*10 +'0';
  temp[7] = '\0';
}
Testing

Upload the code once you connect the Arduino to the computer with a USB cable. In the Arduino IDE, click on Tools > Serial Monitor. Make sure you change the baud rate to 9600 baud. The temperature sensor should have a constant blue light and the Serial Monitor should display the temperature readings every second.

temptesting temptesting2

Think about how you could use the temperature sensor. You can connect the Arduino to a dot-matrix or LCD display to display the temperature. It could also be used for climate control inside a room. How else could you use it?

Click here if you would like to download a PDF copy of these instructions.