Stap 6: Het toevoegen van het LCD-scherm
Een fout die ik kwam met had te maken met het weergeven van de spanning op het scherm. Als ik 13 volt toonde, dan de spanning tot 8 Volt liet, zou het cijfer verschuiven naar de linker één positie, maar nog steeds laten zien de 3 van de 13, zodat het uiteindelijk 83 volt weergeven. Dit kan gebeuren met de temperatuur zo goed als u wisselende temperaturen boven en onder 100 (100,00 daalt tot 99,00) aan het lezen bent. Wij positiebepaling zulks in de definitieve code (op het gedeelte van de spanning) door toe te voegen:
Als (volt < 10) lcd.print=("");
vóór de
LCD.Print(volt);
Hier is de voltooide code:
#include "OneWire.h"
#include "DallasTemperature.h"
#include "LiquidCrystal.h"
LiquidCrystal lcd (7, 8, 9, 10, 11, 12);
Data aansluiting is 3 pin op de Arduino aangesloten
#define ONE_WIRE_BUS 3
Opstelling van een exemplaar van de privacy om te communiceren met alle apparaten privacy
Privacy oneWire(ONE_WIRE_BUS);
Onze privacy verwijzing naar Dallas temperatuur doorgeeft.
DallasTemperature sensoren (& Privacy);
DeviceAddress insideThermometer = {0x28, 0x27, 0xB0, 0xBD, 0x04, 0x00, 0x00, 0xF0};
int tempNegPin = 2; GND voor DS18B20
int tempPosPin = 6; + 5vdc voor DS18B20
int voltPin = 0; voltage divider (middelste terminal) aangesloten op analoge pin 0
buiten leidt tot 0-29vac
int val = 0; variabele de waarde op te slaan lees
int volt = 0; variabele op te slaan van de spanning berekend
void setup(void)
{
Twee ongebruikte digitale poorten als + 5v en Gnd gebruikt voor de DS18B20
pinMode (tempPosPin, OUTPUT); Hiermee stelt u de digitale pen als uitvoer
pinMode (tempNegPin, OUTPUT); Hiermee stelt u de digitale pen als uitvoer
digitalWrite (tempPosPin, hoge); stelt aan digitale vastmaken + 5vdc
digitalWrite (tempNegPin, laag); de digitale pin sets met Gnd
LCD.begin (20, 4); Setup LCD
Opstarten van de bibliotheek
sensors.begin();
de resolutie ingesteld op 10 bit (goed genoeg?)
sensors.setResolution (insideThermometer, 10);
}
VOID printTemperature(DeviceAddress deviceAddress)
{
zweven tempC = sensors.getTempC(deviceAddress);
Als (tempC ==-127.00) {}
lcd.setCursor (0, 2);
LCD.Print ("fout krijgen");
lcd.setCursor (0, 3);
LCD.Print("Temperature");
} else {}
lcd.setCursor (0, 2);
LCD.Print ("Temp");
LCD.Print((char)223);
LCD.Print ("C:");
LCD.Print(tempC);
lcd.setCursor (0, 3);
LCD.Print ("Temp");
LCD.Print((char)223);
LCD.Print ("F:");
LCD.Print(DallasTemperature::toFahrenheit(tempC));
}
}
void loop(void)
{
delay(500);
Val = analogRead(voltPin); Lees de invoer pin
volt = kaart (val, 0, 1023, 0, 29); kaart 29v bereik
lcd.setCursor (0, 0);
LCD.Print ("VAC");
Als (volt < 10) lcd.print=(""); verhindert scherm artefacten als 2 cijfers daalt tot één cijfer lezing
LCD.Print(volt);
sensors.requestTemperatures();
printTemperature(insideThermometer);
}