Men visst e det så. jag har letat som en tok, men det jag hittat har antingen på tok för många funktioner, eller så är det inte samma komponenter.
Jag vill endast ha 2 funktioner (till att börja med iaf) och det ska tilläggas att jag är ganska ny på arduino och programmering men har fått ihop 2 fungerande projekt innan:)
Komponenterna jag har och har kopplat ihop är
Arduino Uno R3
DF Robot LCD Keypad shield http://www.dfrobot.com/wiki/index.php?t ... DFR0009%29
1307 RTC Module https://www.sparkfun.com/products/99
Dallas DS1829B Temp Sensor http://www.adafruit.com/products/381
4 Channel Relay module http://www.mhobbies.com/arduino-4-chann ... board.html
Allt funkar som det ska och jag har testat sketches för alla individuella komponenter.. men nu ska man ju bara få allt att samarbeta med.
De funktioner jag i stora drag är ute efter är så enkelt som på displayen ska visas klocka och temp, 2 av reläerna ska sättas av och på mellan olika tidpunkter (jepp exakt som en timer, eller rättare sagt som en dubbel timer för de ska kunna styras var för sig vid olika tider) och ett relä ska gå på om tempen överstiger 28 grader och stängas av.
Så min första fråga lyder.. är det möjligtvis någon som rent spontant vet en sida eller så med ett projekt som liknar detta och med de komponenter jag har?
Min andra fråga är, jag har testat 3-4 olika sketcher för klockan och dom funkar ju bra, men så fort jag drar ur strömmen så nollställs klockan och jag måste ställa in den igen.. det ska väl inte behövas då det sitter ett batteri på RTC modulen?
Dessa bla har jag testat men nu är det stop, har problem med att klockan inte sparar tiden, och vet inte riktigt hur jag ska forsätta med att kombinera ihop allt, så tips och råd vore av stor vikt just nu:)
Koden för tempsensorn har jag använt denna
Kod: Markera allt
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress tempProbe = { 0x28, 0xB0, 0x30, 0x7A, 0x05, 0x00, 0x00, 0x1B };
float tempC;
void setup(void)
{
Serial.begin(9600);
sensors.begin();
sensors.setResolution(tempProbe, 10);
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("ReefControl Temp");
}
void printTempSerial(float temp)
{
Serial.print("Probe temperature is: ");
if (temp < -100) {
Serial.print("Error getting temperature");
} else {
Serial.print("C: ");
Serial.print(temp);
}
Serial.print("\n\r\n\r");
}
void LCDTemp(float temp)
{
lcd.setCursor(0,1);
if (temp < -100) {
lcd.print("Error: check connection");
} else {
lcd.print (temp);
lcd.print (" Celcius");
}
}
void loop(void)
{
sensors.requestTemperatures();
tempC = sensors.getTempC(tempProbe);
printTempSerial(tempC);
LCDTemp(tempC);
delay(2000);
}
Kod: Markera allt
#include <Wire.h>
const int DS1307 = 0x68; // Address of DS1307 see data sheets
const char* days[] =
{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
const char* months[] =
{"January", "February", "March", "April", "May", "June", "July", "August","September", "October", "November", "December"};
// Initializes all values:
byte second = 0;
byte minute = 0;
byte hour = 0;
byte weekday = 0;
byte monthday = 0;
byte month = 0;
byte year = 0;
void setup() {
Wire.begin();
Serial.begin(9600);
delay(2000); // This delay allows the MCU to read the current date and time.
Serial.print("The current date and time is: ");
printTime();
Serial.println("Please change to newline ending the settings on the lower right of the Serial Monitor");
Serial.println("Would you like to set the date and time now? Y/N");
while (!Serial.available()) delay(10);
if (Serial.read() == 'y' || Serial.read() == 'Y')
// This set of functions allows the user to change the date and time
{
Serial.read();
setTime();
Serial.print("The current date and time is now: ");
printTime();
}
Serial.println("Thank you.");
}
// Continuous function for converting bytes to decimals and vice versa
void loop() {
}
byte decToBcd(byte val) {
return ((val/10*16) + (val%10));
}
byte bcdToDec(byte val) {
return ((val/16*10) + (val%16));
}
// This set of codes is allows input of data
void setTime() {
Serial.print("Please enter the current year, 00-99. - ");
year = readByte();
Serial.println(year);
Serial.print("Please enter the current month, 1-12. - ");
month = readByte();
Serial.println(months[month-1]);
Serial.print("Please enter the current day of the month, 1-31. - ");
monthday = readByte();
Serial.println(monthday);
Serial.println("Please enter the current day of the week, 1-7.");
Serial.print("1 Sun | 2 Mon | 3 Tues | 4 Weds | 5 Thu | 6 Fri | 7 Sat - ");
weekday = readByte();
Serial.println(days[weekday-1]);
Serial.print("Please enter the current hour in 24hr format, 0-23. - ");
hour = readByte();
Serial.println(hour);
Serial.print("Please enter the current minute, 0-59. - ");
minute = readByte();
Serial.println(minute);
second = 0;
Serial.println("The data has been entered.");
// The following codes transmits the data to the RTC
Wire.beginTransmission(DS1307);
Wire.write(byte(0));
Wire.write(decToBcd(second));
Wire.write(decToBcd(minute));
Wire.write(decToBcd(hour));
Wire.write(decToBcd(weekday));
Wire.write(decToBcd(monthday));
Wire.write(decToBcd(month));
Wire.write(decToBcd(year));
Wire.write(byte(0));
Wire.endTransmission();
// Ends transmission of data
}
byte readByte() {
while (!Serial.available()) delay(10);
byte reading = 0;
byte incomingByte = Serial.read();
while (incomingByte != '\n') {
if (incomingByte >= '0' && incomingByte <= '9')
reading = reading * 10 + (incomingByte - '0');
else;
incomingByte = Serial.read();
}
Serial.flush();
return reading;
}
void printTime() {
char buffer[3];
const char* AMPM = 0;
readTime();
Serial.print(days[weekday-1]);
Serial.print(" ");
Serial.print(months[month-1]);
Serial.print(" ");
Serial.print(monthday);
Serial.print(", 20");
Serial.print(year);
Serial.print(" ");
if (hour > 12) {
hour -= 12;
AMPM = " PM";
}
else AMPM = " AM";
Serial.print(hour);
Serial.print(":");
sprintf(buffer, "%02d", minute);
Serial.print(buffer);
Serial.println(AMPM);
}
void readTime() {
Wire.beginTransmission(DS1307);
Wire.write(byte(0));
Wire.endTransmission();
Wire.requestFrom(DS1307, 7);
second = bcdToDec(Wire.read());
minute = bcdToDec(Wire.read());
hour = bcdToDec(Wire.read());
weekday = bcdToDec(Wire.read());
monthday = bcdToDec(Wire.read());
month = bcdToDec(Wire.read());
year = bcdToDec(Wire.read());
}
Kod: Markera allt
/*
* TimeRTC.pde
* example code illustrating Time library with Real Time Clock.
*
*/
#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);
void setup() {
lcd.begin(16, 2);
Serial.begin(9600);
setSyncProvider(RTC.get); // the function to get the time from the RTC
if(timeStatus()!= timeSet)
Serial.println("Unable to sync with the RTC");
else
Serial.println("RTC has set the system time");
}
void loop()
{
digitalClockDisplay();
delay(1000);
}
void digitalClockDisplay(){
// digital clock display of the time
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print(" ");
Serial.print(day());
Serial.print(" ");
Serial.print(month());
Serial.print(" ");
Serial.print(year());
Serial.println();
lcd.setCursor(2, 0); // Set LCD cursor position (column, row)
lcd.print(hour());
lcd.print(":");
lcd.print (minute());
lcd.print(" ");
lcd.print(second());
lcd.print(" ");
lcd.print("Uhr");
lcd.setCursor(3, 1); // Set LCD cursor position (column,row)
lcd.print(day());
lcd.print(".");
lcd.print(month());
lcd.print(".");
lcd.print(year());
// Print text to LCD
// Delay to read text
// Clear the display
}
void printDigits(int digits){
// utility function for digital clock display: prints preceding colon and leading 0
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}