Skaka & vakna (3 / 4 steg)
Steg 3: kodning
Först måste du ladda upp tiden till RTC (väckarklocka arduino):
#include
"Wire.h"
#define DS1307_I2C_ADDRESS 0x68
byte decToBcd(byte val)
{
tillbaka ((val/10 * 16) + (val % 10));
}
void setDateDs1307)
byte andra, / / 0-59
byte minut, / / 0-59
byte timme, / / 1-23
byte dayOfWeek, / / 1-7 1 = mån, 7 = solen
byte dayOfMonth, / / 1-28/29/30/31
byte månad, / / 1-12
byte år / / 0-99
)
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.write(decToBcd(Second));
Wire.write(decToBcd(Minute));
Wire.write(decToBcd(Hour));
Wire.write(decToBcd(DAYOFWEEK));
Wire.write(decToBcd(dayOfMonth));
Wire.write(decToBcd(month));
Wire.write(decToBcd(Year));
Wire.endTransmission();
}
void setup()
{
byte sekund, minut, timme, dayOfWeek, dayOfMonth, månad, år.
Wire.BEGIN();
pinMode (13, OUTPUT);
Ändra dessa värden till vilka du vill ställa in klockan.
Det är bäst att lägga till 30 sekunder till en minut att ge tid för datorn att kompilera och ladda upp den aktuella tiden.
Bara köra skriptet en gång, som kör det igen över tiden i RTC chip!
Timmar är i 24 timmars format
Veckodag börjar med måndag = 1 upp till söndag = 7
År är i formatet åå, så använd bara de 2 sista siffrorna i årtalet
//
En gång du har kört programmet, blinkar LED på stift 13 för att säga det är färdigt, vill inte koppla ur eller återställa.
Helt enkelt följa handledningen och ladda upp LCD koden för att undvika att skriva över den korrekta tiden med denna tid igen.
//
för det andra = 0;
minut = 13.
timme = 15.
dayOfWeek = 1;
dayOfMonth = 11;
månad = 1;
år = 16.
setDateDs1307 (sekund, minut, timme, dayOfWeek, dayOfMonth, månad, år);
//*/
}
void loop()
{
digitalWrite 13, hög. Aktivera LED (HIGH är spänningsnivån)
Delay(1000); vänta en sekund
digitalWrite 13, låg. Inaktivera LED genom att spänningen låg
Delay(1000);
}
Sedan måste du ladda upp när du vill vakna upp (väckarklocka arduino):
#include "Wire.h"
#include
#include
#define DS1307_I2C_ADDRESS 0x68
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
byte bcdToDec(byte val)
{
tillbaka ((val/16 * 10) + (val % 16));
}
void getDateDs1307 (byte * andra, byte * minut, byte * timme, byte * dayOfWeek, byte * dayOfMonth, byte * månad, byte * år)
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.endTransmission();
Wire.requestFrom (DS1307_I2C_ADDRESS, 7);
* andra = bcdToDec(Wire.read() & 0x7f);
* minut = bcdToDec(Wire.read());
* timme = bcdToDec(Wire.read() & 0x3f);
* dayOfWeek = bcdToDec(Wire.read());
* dayOfMonth = bcdToDec(Wire.read());
* månad = bcdToDec(Wire.read());
* år = bcdToDec(Wire.read());
}
void setup()
{
byte sekund, minut, timme, dayOfWeek, dayOfMonth, månad, år.
Wire.BEGIN();
ÄNDRA OM DU ANVÄNDER EN ANNAN LCD SKÄRM / /
LCD.BEGIN (16, 2);
pinMode (7, OUTPUT);
}
void loop()
{
byte sekund, minut, timme, dayOfWeek, dayOfMonth, månad, år.
Sträng s, m, d, mth, h;
getDateDs1307 (& sekund, minut, timme, & dayOfWeek, & dayOfMonth, & månad, & år);
om (andra < 10) {s = "0" + String(second);} annat {s = String(second);}
om (minuten < 10) {m = "0" + String(minute);} annat {m = String(minute);}
h = String(hour);
om (dayOfMonth < 10) {d = "0" + String(dayOfMonth);} annat {d = String(dayOfMonth);}
om (månad < 10) {mth = "0" + String(month);} annat {mth = String(month);}
char * dagar [] = {"NA", "Må", "TI", "Ons", "Tor", "fr", "lö", "Sun"};
LCD.Clear();
HOPPA TILL CENTRUM PÅ EN 16 X 2 SKÄRM / /
lcd.setCursor(4,0);
ÄNDRA FÖLJANDE FÖR ATT STÄLLA IN DATUMET I DIN FÖREDROG BESTÄLLNING / /
LCD.Print (h + ":" + m + ":" + s);
NÄSTA RAD, 1 UTRYMME I FRÅN VÄNSTER / /
lcd.setCursor(1,1);
PREFIX 20 EFTERSOM RTC CHIP BARA ANVÄNDER 2 SIFFROR FÖR ÅR / /
LCD.Print(String(Days[DAYOFWEEK]) + "" + d + "/" + mån + "/ 20" + år);
Delay(1000); Vänta en sekund
om (timme == 15 & & minut == 18) digitalWrite (7, hög).
om (minut! = 18) digitalWrite (7, låg).
}
Det sista steget är att ladda upp koden till mottagaren (pilow arduino):
#define rfReceivePin A0 //RF mottagare pin = Analog pin 0
#define ledPin 13 //Onboard LED = digital stift 13
unsigned int data = 0; variabeln som används för att lagra mottagna data
CONST unsigned int upperThreshold = 70. övre tröskelvärde
CONST unsigned int lowerThreshold = 50; lägre tröskelvärde
void setup() {
pinMode (ledPin, produktionen);
Serial.BEGIN(9600);
}
void loop() {
data=analogRead(rfReceivePin); lyssna efter data på analoga stift 0
IF(data>upperThreshold) {
digitalWrite (ledPin, låg); Om en låg signal tas emot, stänga LED av
Serial.println(data);
}
om (data
digitalWrite (ledPin, hög); Om en hög signal tas emot, slå LED
Serial.println(data);
}
}