Köszönöm, esetleg az említett Kínai oldal elérhetősége?
Nem lehet linkelni a fórumon, de gondolom privátban el tudjátok intézni. Ahogy látom még korlát van nálad ezért nem tudsz üzenetet küldeni, de talán fogadni igen.
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
Kérjük olvasd el milyen korlátozások vonatkoznak rád, miután regisztrációd jóvá lett hagyva.
Regisztrációs korlátozások
Köszönöm, esetleg az említett Kínai oldal elérhetősége?
// DS1302_Serial_Easy (C)2010 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
//
// A quick demo of how to use my DS1302-library to
// quickly send time and date information over a serial link
//
// I assume you know how to connect the DS1302.
// DS1302: CE pin -> Arduino Digital 2
// I/O pin -> Arduino Digital 3
// SCLK pin -> Arduino Digital 4
#include <DS1302.h>
// Init the DS1302
DS1302 rtc(2, 3, 4);
void setup()
{
// Set the clock to run-mode, and disable the write protection
rtc.halt(false);
rtc.writeProtect(false);
// Setup Serial connection
Serial.begin(9600);
// The following lines can be commented out to use the values already stored in the DS1302
rtc.setDOW(FRIDAY); // Set Day-of-Week to FRIDAY
rtc.setTime(12, 0, 0); // Set the time to 12:00:00 (24hr format)
rtc.setDate(6, 8, 2010); // Set the date to August 6th, 2010
}
void loop()
{
// Send Day-of-Week
Serial.print(rtc.getDOWStr());
Serial.print(" ");
// Send date
Serial.print(rtc.getDateStr());
Serial.print(" -- ");
// Send time
Serial.println(rtc.getTimeStr());
// Wait one second before repeating :)
delay (1000);
}
Sziasztok!
Már úgy 2 hónapja követem ezt az Arduino-s projectet, és ezen felbuzdulva vettem én is egy MEGA 2560-at, egy Nano-t (jó lesz másra ) , DS18B20, reléket meg mindenféle kütyüt ami kellhet.
Össze is ollóztam az általatok közreadott kódokból egy sajátot, és most úgy néz ki a megadott hőmérsékletnél ki-be kapcsolgatja egy relé a fűtést, ezenkívül a szűrőt gombnyomáskor leállítja 5 percre etetéshez.
Az a problámám, hogy én a DS1302 óramodult vettem meg, és nem bírom használni. Az időt sikerült beállítani rajta, ki is írja serialon mp-ként, de nem tudom felhasználni arra amire ti, hogy időzítsek vele.
Tudnátok segíteni benne?
Leírom, hogy melyik kódot használom most hozzá, hátha abban van a megoldás:
Kód beillesztése:// DS1302_Serial_Easy (C)2010 Henning Karlsen // web: http://www.henningkarlsen.com/electronics // // A quick demo of how to use my DS1302-library to // quickly send time and date information over a serial link // // I assume you know how to connect the DS1302. // DS1302: CE pin -> Arduino Digital 2 // I/O pin -> Arduino Digital 3 // SCLK pin -> Arduino Digital 4 #include <DS1302.h> // Init the DS1302 DS1302 rtc(2, 3, 4); void setup() { // Set the clock to run-mode, and disable the write protection rtc.halt(false); rtc.writeProtect(false); // Setup Serial connection Serial.begin(9600); // The following lines can be commented out to use the values already stored in the DS1302 rtc.setDOW(FRIDAY); // Set Day-of-Week to FRIDAY rtc.setTime(12, 0, 0); // Set the time to 12:00:00 (24hr format) rtc.setDate(6, 8, 2010); // Set the date to August 6th, 2010 } void loop() { // Send Day-of-Week Serial.print(rtc.getDOWStr()); Serial.print(" "); // Send date Serial.print(rtc.getDateStr()); Serial.print(" -- "); // Send time Serial.println(rtc.getTimeStr()); // Wait one second before repeating :) delay (1000); }
Szia!
Én úgy látom, hogy az aktuális idő kiolvasás nálad string-be történik, ami azért baj, mert ha ezzel akarsz valamit kezdeni, akkor vizsgálnod kéne hogy mikor jön a :
Értsd: vizsgálati rutint kéne írni hogy aszongya: első két karakter kiolvas -> legyen eltárolva órának, megnéz hogy valóban a : elválasztó jel jön-e, 3.4. karakter kiolvas -> legyen perc, 5.6. karakter legyen másodperc. Ez így szerintem túl bonyolult.
Szerintem próbáld meg ezt a kiolvasó rutint beilleszteni, persze a szükséges változók deklarálásával:
void get_time() //Idő kiolvasási rutin
{
Wire.beginTransmission(rtc); // start communication over i2c with DS1307
Wire.write(0x00); // Write the value of the register to point to
Wire.endTransmission(); // End communication over i2c with DS1307
Wire.requestFrom(rtc,7); // This will request 7 bytes of data
//starting from the '0' the register
ss=bcd_to_dec(Wire.read());
mm=bcd_to_dec(Wire.read());
hh=bcd_to_dec(Wire.read());
d=bcd_to_dec(Wire.read());
DD=bcd_to_dec(Wire.read());
MM=bcd_to_dec(Wire.read());
YY=bcd_to_dec(Wire.read());
Wire.endTransmission();
}
remélem segített!
Szia!
Én úgy látom, hogy az aktuális idő kiolvasás nálad string-be történik, ami azért baj, mert ha ezzel akarsz valamit kezdeni, akkor vizsgálnod kéne hogy mikor jön a :
Értsd: vizsgálati rutint kéne írni hogy aszongya: első két karakter kiolvas -> legyen eltárolva órának, megnéz hogy valóban a : elválasztó jel jön-e, 3.4. karakter kiolvas -> legyen perc, 5.6. karakter legyen másodperc. Ez így szerintem túl bonyolult.
Szerintem próbáld meg ezt a kiolvasó rutint beilleszteni, persze a szükséges változók deklarálásával:
...KÓD...
remélem segített!
Szia!
sajnos valami nem jó abban amit írtál, mert a kód ellenőrzésekor hibát talál:
_1302_henningkarlsen.ino: In function 'void get_time()':
_1302_henningkarlsen:98: error: 'Wire' was not declared in this scope
_1302_henningkarlsen:105: error: 'ss' was not declared in this scope
_1302_henningkarlsen:105: error: 'bcd_to_dec' was not declared in this scope
_1302_henningkarlsen:106: error: 'mm' was not declared in this scope
_1302_henningkarlsen:107: error: 'hh' was not declared in this scope
_1302_henningkarlsen:108: error: 'd' was not declared in this scope
_1302_henningkarlsen:109: error: 'DD' was not declared in this scope
_1302_henningkarlsen:110: error: 'MM' was not declared in this scope
_1302_henningkarlsen:111: error: 'YY' was not declared in this scope
Amúgy nem I2c-n kapcsolódik ez az óramodul, lehet, hogy ez a baj?
Ajjaj
"It is not I2C, it's not OneWire, and it is not SPI. The most used name is "3-wire interface". "
Hát, akkor a saját libraryt kell használnod.
Viszont milyen formában kapod meg az időt?
Egy formázott sztringben?
void loop()
{
// Send time
Serial.println(rtc.getTimeStr());
// Wait one second before repeating :)
delay (1000);
}
Akkor a string--et egésszé kell alakítani. Ezzel:Ez a kód:
És ez az eredmény serial monitoron:Kód beillesztése:void loop() { // Send time Serial.println(rtc.getTimeStr()); // Wait one second before repeating :) delay (1000); }
16:40:13
16:40:14
16:40:15
16:40:16
Kell:
#include <Wire.h>
Deklarálni ss, mm, stb-t. (byte ss,mm,hh,d,DD,MM,YY; )
Kell:
byte bcdToDec(byte val)
{
return ( (val/16*10) + (val%16) );
}
függvény,
Setup-ba:
Wire.begin();
Viszont: hogy is kapcsolódik az óramodul?
Akkor a string--et egésszé kell alakítani. Ezzel:
Arduino - StringSubstring
Arduino - StringToInt
pl. valamistr = rtc.getTimeStr();
int ora = valamistr.substring(0,2).toInt();
és így tovább.
void loop()
{
String ido = rtc.getTimeStr();
Serial.println(ido);
int ora = ido.substring(7).toInt();
if (ora == 0) {
// Send time
Serial.println("mehet");
digitalWrite (13, HIGH);
}
else {
digitalWrite (13, LOW);
delay (1000);
}
}
Igen, jó úton járszOdáig jutottam, hogy minden 10. mp-ben kiírja serialon, hogy "mehet". A mp-el való kisérletezést azért választottam, hogy jobban tudjam tesztelni.
Ezt így sikerült:
Kód beillesztése:void loop() { String ido = rtc.getTimeStr(); Serial.println(ido); int ora = ido.substring(7).toInt(); if (ora == 0) { // Send time Serial.println("mehet"); digitalWrite (13, HIGH); } else { digitalWrite (13, LOW); delay (1000); } }
Jó úton járok?
Egyébként mit jelent a substring utáni zárójelben lévő szám?
void loop()
{
bouncer.update ( );
//--------------Szűrő műveletek-----------------------------
if ((bouncer.read() == HIGH) && (bouncer.duration() > 50) && digitalRead(szuro_rele) == LOW) //Ha a gomb békén van hagyva és a szűrő megy
{
digitalWrite(szuro_rele, LOW); // A szűrő menjen tovább
}
if ((bouncer.read() == LOW) && (bouncer.duration() > 50) && digitalRead(szuro_rele) == LOW) // Ha a gomb meg van nyomva működő szűrésnél
{
digitalWrite(szuro_rele, HIGH); // Szűrő kikapcs
indul = millis();
}
if (millis() > (indul+240000)) { // Szűrő kikapcs 4 percre
digitalWrite(szuro_rele, LOW);
}
if (millis() > (indul+248000)) { // Kaja feltúrás 8mp-ig :D
digitalWrite(szuro_rele, HIGH);
}
if (millis() > (indul+428000)) { // Újabb 3 perc kajaidő :)
digitalWrite(szuro_rele, LOW);
}
}
Köszönöm, az óra már tökéletesen működik
Próbálom beállítani most az etetőgombot.
A probléma a következő. Anélkül, hogy hozzányúlnék a gombhoz, az Arduino indítása után lefut az etetőprogram magától (egyszer).
Miért? Mit lehet tenni?
Egyébként a gomb nyomására tökéletesen lefut az etetőprogram amit szerettem volna elérni vele, tehát leáll->megy egy picit->leáll újra majd szűr a következő etetésig.
else ágba az utolsó if-nélAzt nem tudom, miért fut le induláskor, de indulás után 4 perccel mindig le fog futni, 4 perc 8 másodperc után beindul, és kb. ~7 perc után végleg leáll a szűrő.
Nem is kell gombokat nyomogatni ehhez.