 | Код: #include "Wire.h" #include <Keypad.h> #define DS1307_I2C_ADDRESS 0x68 #include <LiquidCrystal.h> // we need this library for the LCD commands LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); int countPressed; /* Ot tuk e za keypad*/ const byte ROWS = 4; //four rows const byte COLS = 3; //three columns char keys[ROWS][COLS] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'#','0','#'} }; byte rowPins[ROWS] = { 9, 8, 7, 6}; //connect to the row pinouts of the keypad byte colPins[COLS] = { 13, 1, 0}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); /* do tuk e za keypad*/ // Convert normal decimal numbers to binary coded decimal byte decToBcd(byte val) { return ( (val/10*16) + (val%10) ); } // Convert binary coded decimal to normal decimal numbers byte bcdToDec(byte val) { return ( (val/16*10) + (val%16) ); } // 1) Sets the date and time on the ds1307 // 2) Starts the clock // 3) Sets hour mode to 24 hour clock // Assumes you're passing in valid numbers void setDateDs1307(byte second, // 0-59 byte minute, // 0-59 byte hour, // 1-23 byte dayOfWeek, // 1-7 byte dayOfMonth, // 1-28/29/30/31 byte month, // 1-12 byte year) // 0-99 { Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.send(0); Wire.send(decToBcd(second)); // 0 to bit 7 starts the clock Wire.send(decToBcd(minute)); Wire.send(decToBcd(hour)); Wire.send(decToBcd(dayOfWeek)); Wire.send(decToBcd(dayOfMonth)); Wire.send(decToBcd(month)); Wire.send(decToBcd(year)); Wire.send(0x10); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave Wire.endTransmission(); } // Gets the date and time from the ds1307 void getDateDs1307(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { // Reset the register pointer Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.send(0); Wire.endTransmission(); Wire.requestFrom(DS1307_I2C_ADDRESS, 7); // A few of these need masks because certain bits are control bits *second = bcdToDec(Wire.receive() & 0x7f); *minute = bcdToDec(Wire.receive()); *hour = bcdToDec(Wire.receive() & 0x3f); // Need to change this if 12 hour am/pm *dayOfWeek = bcdToDec(Wire.receive()); *dayOfMonth = bcdToDec(Wire.receive()); *month = bcdToDec(Wire.receive()); *year = bcdToDec(Wire.receive()); } void setup() { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; Wire.begin(); // Change these values to what you want to set your clock to. // You probably only want to set your clock once and then remove // the setDateDs1307 call. second = 0; minute = 23; hour = 23; dayOfWeek = 4; dayOfMonth = 19; month = 5; year = 10; // setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year); lcd.begin(16, 2); // tells Arduino the LCD dimensions lcd.setCursor(0,0); lcd.print(" Miroslav's "); // print text and move cursor to start of next line lcd.setCursor(0,1); lcd.print("Diplomna Rabota "); delay(5000); lcd.clear(); // clear LCD screen } int waitForKey() { char key = keypad.getKey(); if (key != NO_KEY){ if (key == '#') { int key = NO_KEY; unsigned long _start_time = millis(); int countPressed = 0; while(((key = keypad.getKey()) == NO_KEY) && ((millis()-_start_time) < 10000)) { // Do nothing if(key==PRESSED) { countPressed++; setClock(); return key; } } return key; } } return countPressed; } int setClock() { char key = keypad.getKey(); switch(countPressed) { int first_hour; int first_minute; int second_hour; int second_minute; case 1: lcd.print ("Hours:"); first_hour = key; return first_hour; case 2: lcd.print ("Hours:"); lcd.print (first_hour); second_hour = key; return second_hour; case 3: lcd.print ("Minutes:"); first_minute = key; return first_minute; case 4: lcd.print ("Minutes"); lcd.print (first_minute) ; second_minute = key; return second_minute; } } void loop() { char key = keypad.getKey(); if (key != NO_KEY) { waitForKey(); } int sensorPin = 0; int reading = analogRead(sensorPin);
// converting that reading to voltage, for 3.3v arduino use 3.3 float voltage = reading * 5.0 / 1024; // print out the voltage // now print out the temperature float temperatureC = (voltage - 0.5) * 100 ; byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); lcd.clear(); // clear LCD screen lcd.setCursor(0,0); lcd.print(hour, DEC); lcd.print(":"); if (minute<10) { lcd.print("0"); } lcd.print(minute, DEC); lcd.print(":"); if (second<10) { lcd.print("0"); } lcd.print(second, DEC); lcd.print(" "); lcd.print(temperatureC); lcd.print("C"); lcd.setCursor(0,1); lcd.print(" "); switch(dayOfWeek){ case 1: lcd.print("Sun"); break; case 2: lcd.print("Mon"); break; case 3: lcd.print("Tue"); break; case 4: lcd.print("Wed"); break;
case 5: lcd.print("Thu"); break; case 6: lcd.print("Fri"); break; case 7: lcd.print("Sat"); break; } lcd.print(" "); lcd.print(dayOfMonth, DEC); lcd.print("/"); lcd.print(month, DEC); lcd.print("/20"); lcd.print(year, DEC); delay(1000); }
|  |