Digital Arduino Voltmeter med temperatur (6 / 6 steg)
Steg 6: Lägga till LCD-skärmen
Ett fel som jag kom upp med hade att göra med att Visa spänningen på skärmen. Om jag var visar 13 volt, sedan tappade spänningen till 8 Volt, skulle siffran flytta till vänster en position, men visar ändå 3 från 13, så det hamnade visar 83 volt. Detta kan hända med temperaturen om det du läser varierande temperaturer över och under 100 (släppa från 100.00 till 99,00). Vi löser detta i den slutliga kod (på avsnittet spänning) genom att lägga till:
om (volt < 10) lcd.print=("");
innan den
LCD.Print(volt);
Här är ifyllda koden:
#include "OneWire.h"
#include "DallasTemperature.h"
#include "LiquidCrystal.h"
LiquidCrystal lcd (7, 8, 9, 10, 11, 12);
Data kabeln är ansluten till stift 3 på Arduino
#define ONE_WIRE_BUS 3
Setup en oneWire instans att kommunicera med någon OneWire enheter
OneWire oneWire(ONE_WIRE_BUS);
Passera vår oneWire referens till Dallas temperatur.
DallasTemperature sensorer (& oneWire);
DeviceAddress insideThermometer = {0x28, 0x27, 0xB0, 0xBD, 0x04, 0x00, 0x00, 0xF0};
int tempNegPin = 2; GND för DS18B20
int tempPosPin = 6; + 5vdc för DS18B20
int voltPin = 0; spänningsdelare (mellersta terminal) ansluten till analoga stift 0
utanför leder till 0-29vac
int val = 0; variabel för att lagra värdet läsa
int volt = 0; variabel att lagra spänningen beräknas
void setup(void)
{
Används två oanvända digitala portar som + 5v och jord för DS18B20
pinMode (tempPosPin, produktionen); Anger den digitala pin som utdata
pinMode (tempNegPin, produktionen); Anger den digitala pin som utdata
digitalWrite (tempPosPin, hög); apparater digitala stift till + 5vdc
digitalWrite (tempNegPin, låg); apparater digitala stift till Gnd
LCD.BEGIN (20, 4); setup LCD
Starta upp biblioteket
sensors.BEGIN();
Ställ in upplösningen till 10 bit (bra nog?)
sensors.setResolution (insideThermometer, 10);
}
void printTemperature(DeviceAddress deviceAddress)
{
flyta tempC = sensors.getTempC(deviceAddress);
om (tempC ==-127.00) {
lcd.setCursor (0, 2);
LCD.Print ("fel får");
lcd.setCursor (0, 3);
LCD.Print("temperature");
} annat {
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); Läs ingångsstiftet
volt = karta (val, 0, 1023, 0, 29); karta 29v utbud
lcd.setCursor (0, 0);
LCD.Print ("VAC");
om (volt < 10) lcd.print=(""); förhindrar skärm artefakter när släppa från 2 siffrigt till ensiffriga behandlingen
LCD.Print(volt);
sensors.requestTemperatures();
printTemperature(insideThermometer);
}