Üdv,össze raktam magamnak egy kódot, de nem kapcsol rendesen, segítsetek kijavítani, köszönöm.
#include <Wire.h> #include <RTClib.h> #include <Time.h> #include <TimeAlarms.h> RTC_DS1307 RTC; // Start Time Light 1 int sHour = 06; int sMinute = 40; int sSecond = 0;
// Start Time Light 2 int s2Hour = 07; int s2Minute = 00; int s2Second = 00;
// Start Time Light 3 int s3Hour = 07; int s3Minute = 20; int s3Second = 00;
// Start Time Light 4 int s4Hour = 07; int s4Minute = 40; int s4Second = 00;
// Start Time Light 5 int s5Hour = 07; int s5Minute = 00; int s5Second = 00;
// Start Time Light 6 int s6Hour = 07; int s6Minute = 20; int s6Second = 24;
// End Time Light 1 int eHour = 17; int eMinute = 40; int eSecond = 00;
// End Time Light 2 int e2Hour = 18; int e2Minute = 00; int e2Second = 00;
// End Time Light 3 int e3Hour = 18; int e3Minute = 20; int e3Second = 00;
// End Time Light 4 int e4Hour = 18; int e4Minute = 40; int e4Second = 00;
// End Time Light 5 int e5Hour = 19; int e5Minute = 00; int e5Second = 00;
// End Time Light 6 int e6Hour = 19; int e6Minute = 20; int e6Second = 00; int lightRelay1 = 9; int lightRelay2 = 2; int lightRelay3 = 3; int lightRelay4 = 4; int lightRelay5 = 5; int lightRelay6 = 6;
void setup() { // Set the relay to off immediately digitalWrite(lightRelay1, HIGH); digitalWrite(lightRelay2, HIGH); digitalWrite(lightRelay3, HIGH); digitalWrite(lightRelay4, HIGH); digitalWrite(lightRelay5, HIGH); digitalWrite(lightRelay6, HIGH); Serial.begin(9600); Wire.begin(); RTC.begin(); // Set the pinmode pinMode(lightRelay1, OUTPUT); pinMode(lightRelay2, OUTPUT); pinMode(lightRelay3, OUTPUT); pinMode(lightRelay4, OUTPUT); pinMode(lightRelay5, OUTPUT); pinMode(lightRelay6, OUTPUT); // Notify if the RTC isn't running if (! RTC.isrunning()) { Serial.println("RTC is NOT running"); } // Get time from RTC DateTime current = RTC.now(); DateTime compiled = DateTime(__DATE__, __TIME__); if (current.unixtime() < compiled.unixtime()) { Serial.println("RTC is older than compile time! Updating"); RTC.adjust(DateTime(__DATE__, __TIME__)); } // Use RTC time to set the start time1 setTime(sHour, sMinute, sSecond, current.day(), current.month(), current.year()); time_t s = now(); // Use RTC time to set the start time2 setTime(s2Hour, s2Minute, s2Second, current.day(), current.month(), current.year()); time_t s2 = now(); // Use RTC time to set the start time3 setTime(s3Hour, s3Minute, s3Second, current.day(), current.month(), current.year()); time_t s3 = now(); // Use RTC time to set the start time4 setTime(s4Hour, s4Minute, s4Second, current.day(), current.month(), current.year()); time_t s4 = now(); // Use RTC time to set the start time5 setTime(s5Hour, s5Minute, s5Second, current.day(), current.month(), current.year()); time_t s5 = now(); // Use RTC time to set the start time6 setTime(s6Hour, s6Minute, s6Second, current.day(), current.month(), current.year()); time_t s6 = now(); // Use RTC time to set the end time1 setTime(eHour, eMinute, eSecond, current.day(), current.month(), current.year()); time_t e = now(); // Use RTC time to set the end time2 setTime(e2Hour, e2Minute, e2Second, current.day(), current.month(), current.year()); time_t e2 = now(); // Use RTC time to set the end time3 setTime(e3Hour, e3Minute, e3Second, current.day(), current.month(), current.year()); time_t e3 = now(); // Use RTC time to set the end time4 setTime(e4Hour, e4Minute, e4Second, current.day(), current.month(), current.year()); time_t e4 = now(); // Use RTC time to set the end time5 setTime(e5Hour, e5Minute, e5Second, current.day(), current.month(), current.year()); time_t e5 = now(); // Use RTC time to set the end time6 setTime(e6Hour, e6Minute, e6Second, current.day(), current.month(), current.year()); time_t e6 = now(); // Use RTC time to set the current time setTime(current.hour(), current.minute(), current.second(), current.day(), current.month(), current.year()); time_t n = now(); // Test if grow light should be on if (s <= n && n <= e) { digitalWrite(lightRelay1, LOW); // Sets the grow light "on" } if (s2 <= n && n <= e2) { digitalWrite(lightRelay2, LOW); // Sets the grow light "on" } if (s3 <= n && n <= e3) { digitalWrite(lightRelay3, LOW); // Sets the grow light "on" } if (s4 <= n && n <= e4) { digitalWrite(lightRelay4, LOW); // Sets the grow light "on" } if (s5 <= n && n <= e5) { digitalWrite(lightRelay5, LOW); // Sets the grow light "on" } if (s6 <= n && n <= e6) { digitalWrite(lightRelay6, LOW); // Sets the grow light "on" } Alarm.alarmRepeat(sHour, sMinute, sSecond, Light1On); Alarm.alarmRepeat(eHour, eMinute, eSecond, Light1Off); Alarm.alarmRepeat(s2Hour, s2Minute, s2Second, Light2On); Alarm.alarmRepeat(e2Hour, e2Minute, e2Second, Light2Off); Alarm.alarmRepeat(s3Hour, s3Minute, s3Second, Light3On); Alarm.alarmRepeat(e3Hour, e3Minute, e3Second, Light3Off); Alarm.alarmRepeat(s4Hour, s4Minute, s4Second, Light4On); Alarm.alarmRepeat(e4Hour, e4Minute, e4Second, Light4Off); Alarm.alarmRepeat(s5Hour, s5Minute, s5Second, Light5On); Alarm.alarmRepeat(e5Hour, e5Minute, e5Second, Light5Off); Alarm.alarmRepeat(s6Hour, s6Minute, s6Second, Light6On); Alarm.alarmRepeat(e6Hour, e6Minute, e6Second, Light6Off); } void loop() { DateTime now = RTC.now(); setTime(now.hour(), now.minute(), now.second(), now.day(), now.month(), now.year()); Serial.print("Current time: "); Serial.print(now.year(), DEC); Serial.print('/'); Serial.print(now.month(), DEC); Serial.print('/'); Serial.print(now.day(), DEC); Serial.print(' '); Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.print(now.second(), DEC); Serial.println(); Serial.println(); Alarm.delay(600000); } void Light1On() { Serial.println("Turning Light 1 On"); digitalWrite(lightRelay1, LOW); } void Light1Off() { Serial.println("Turning Light 1 Off"); digitalWrite(lightRelay1, HIGH); } void Light2On() { Serial.println("Turning Light 2 On"); digitalWrite(lightRelay2, LOW); } void Light2Off() { Serial.println("Turning Light 2 Off"); digitalWrite(lightRelay2, HIGH); } void Light3On() { Serial.println("Turning Light 3 On"); digitalWrite(lightRelay3, LOW); } void Light3Off() { Serial.println("Turning Light 3 Off"); digitalWrite(lightRelay3, HIGH); } void Light4On() { Serial.println("Turning Light 4 On"); digitalWrite(lightRelay4, LOW); } void Light4Off() { Serial.println("Turning Light 4 Off"); digitalWrite(lightRelay4, HIGH); } void Light5On() { Serial.println("Turning Light 5 On"); digitalWrite(lightRelay5, LOW); } void Light5Off() { Serial.println("Turning Light 5 Off"); digitalWrite(lightRelay5, HIGH); } void Light6On() { Serial.println("Turning Light 6 On"); digitalWrite(lightRelay6, LOW); } void Light6Off() { Serial.println("Turning Light 6 Off"); digitalWrite(lightRelay6, HIGH); }
int Relay0 = 4; int Relay1 = 5; int Relay2 = 6; int Relay3 = 13;
DS3231 rtc(SDA, SCL); Time t;
const int OnHour0 = 12; const int OnMin0 = 24; const int OffHour0 = 12; const int OffMin0 = 25; const int OnHour1 = 12; const int OnMin1 = 26; const int OffHour1 = 12; const int OffMin1 = 27;
// relay8_Demo // Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved // web: http://www.RinkyDinkElectronics.com/ // // A quick demo of most of the library functions. //
// Include our library :) #include <relay8.h>
// Declare what pins our relays are connected to. // relay8 supports from 1 to 8 relays. relay8 relay(2, 3, 4, 5, 6, 7, 8, 9);
void setup() { // Nothing special is needed here }
void loop() { // Switch the first relay on and off a couple of times for (int t=0; t<3; t++) { relay.on(1); delay(500); relay.off(1); delay(500); }
// Switch the last relay on and off a couple of times for (int t=0; t<3; t++) { relay.on(relay.numberOfRelays()); delay(500); relay.off(relay.numberOfRelays()); delay(500); }
// Switch all relays on and off a couple of times for (int t=0; t<3; t++) { relay.allOn(); delay(500); relay.allOff(); delay(500); }
// Cycle through all relays slowly from the first to the last // then a little faster back down again for (int t=0; t<3; t++) { relay.cycleUp(); relay.cycleDown(100); }
// Switch on all relays in sequence then switch then all off // again a little faster for (int t=0; t<3; t++) { relay.chaseUpOn(500); relay.chaseUpOff(); }
// Switch on all relays in sequence then switch then all off // again a little faster. This time in the opposite direction for (int t=0; t<3; t++) { relay.chaseDownOn(); relay.chaseDownOff(100); } }
Üdv, köszönöm a segítséget, de úgy szeretném megoldani hogy mind a 6db relé külön adott időben be és ki kapcsolni ahogy a példa programban is van 1db relével.
Esetleg tudsz abban még segíteni hogy ez hogy nézne ki kész program formájában?
Üdv, valaki tudna segíteni nekem? Ezt a programot szeretném használni de úgy hogy 6 db relét tudjak egyesével időre kapcsolni, lényegében 6 relére kéne kibővíteni. Eggyel működik gond nélkül.
// Date and time functions using a DS3231 RTC connected via I2C and Wire Lib
// Start Time int sHour = 11; int sMinute =30; int sSecond = 0;
// End Time int eHour = 11; int eMinute = 30; int eSecond = 4;
int lightRelay = 2;
void setup() { // Set the relay to off immediately digitalWrite(lightRelay, HIGH);
Serial.begin(9600); Wire.begin(); RTC.begin();
// Set the pinmode pinMode(lightRelay, OUTPUT);
// Notify if the RTC isn't running if (! RTC.isrunning()) { Serial.println("RTC is NOT running"); }
// Get time from RTC DateTime current = RTC.now(); DateTime compiled = DateTime(__DATE__, __TIME__); if (current.unixtime() < compiled.unixtime()) { Serial.println("RTC is older than compile time! Updating"); RTC.adjust(DateTime(__DATE__, __TIME__)); }
// Use RTC time to set the start time setTime(sHour, sMinute, sSecond, current.day(), current.month(), current.year()); time_t s = now();
// Use RTC time to set the end time setTime(eHour, eMinute, eSecond, current.day(), current.month(), current.year()); time_t e = now();
// Use RTC time to set the current time setTime(current.hour(), current.minute(), current.second(), current.day(), current.month(), current.year()); time_t n = now();
// Test if grow light should be on if (s <= n && n <= e) { digitalWrite(lightRelay, LOW); // Sets the grow light "on" }
Warning comparisons like 'X<=Y<=Z' do not have their mathematical meaning
Tehát ez neked hülyeség, hiába helyes C programkód.
Ezt jelenti: Először kiértékeli ezt: 1 < kaka, ennek az eredménye egy bool lesz (true vagy false). Utána pedig megvizsgálja, hogy a kapott bool kisebb-e, mint 2, ami definíció szerint mindig true.
Helyette ez az alak használatos:
else if (1 < kaka && kaka < 2) {
De szép változóneved van...
> Mivel a switch-case-t egyáltalán nem tudtam működésre bírni (ahogy olvastam nem igazán működik az arduinon)
első project, egy plotterről leolvasott értéket duplázva (0-10) szeretném megoldani, h az 5 ledem közül felvillanjon az értéknek megfelelő számú (0-2-ig 1, 2-4-ig 2 stb..), és az érték(kerekítvenyilván) megjelenjen egy 7szegmensű kijelzőn. Ennek ugye egyszerű az emélete, mégsem jön össze. Külön külön minden tökéletesen működik, de nem tudom összehozni az egészet egyszerre. Nem a hivatalos arduino-m van, hanem vmi copy (ebayen az első ha rákeresel h arduino uno).
Mivel a switch-case-t egyáltalán nem tudtam működésre bírni (ahogy olvastam nem igazán működik az arduinon), elkezdtem az if-eket. 0 és 1 tökéletesen működik, prímán meg is jelenik a kis kijelzőn, ég a megfelelő LED, alles gut, but onnantól az istenért se menne tovább. A kód külön működik, de valamiért nem akar a program belépni oda ahová kellene...
int pinA = 6; int pinB = 5; int pinC = 2; int pinD = 3; int pinE = 4; int pinF = 7; int pinG = 8;
Ha az "else if (2<kaka<3)"-at átírom sima "if (2<kaka<3)"-ra akkor abba lép be, megjelenik a 2-es a kijelnzőn és ég a 2 led az értéktől függetlenül. A képen látjátok h jól működik a plotter, ha a fent leírt kód fut akkor 0 és 1 között tud váltani, aztán nemtom, elfogy a tudomány ha tovább kéne állni. A programozás terén IS kezdő vagyok de azért szerintem itt nem ejtettem olyan nagy hibát.
Mit csinálok rosszul ? Előre is köszi (L)
ui.: kusza a kapcsolás, de külön letesztelve minden működik...
WARNING: Category '' in library EEPROM is not valid. Setting to 'Uncategorized' WARNING: Category '' in library SPI is not valid. Setting to 'Uncategorized' WARNING: Category '' in library SoftwareSerial is not valid. Setting to 'Uncategorized' WARNING: Category '' in library Wire is not valid. Setting to 'Uncategorized' Warning: platform.txt from core 'Arduino AVR Boards' contains deprecated recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{build.path}/{archive_file}" "{object_file}", automatically converted to recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{archive_file_path}" "{object_file}". Consider upgrading this core. signal: bad system call (core dumped) Error compiling for board Arduino Uno.
This report would have more information with "Show verbose output during compilation" option enabled in File -> Preferences.
Kérem valaki világosítson fel mit csinálok rosszul?
szerintem először határozd meg, mennyi a motor elérhető maximális és még használható minimális sebessége. ezt a "tartományt" osszad fel mondjuk 4 részre, ez lesz a 4 használandó sebesség.
a motor elindulási irányán nem értem mi a probléma, hát vagy közeleíteni akarsz, vagy távolítani, nem?
az aktuális és a célpozíció függvényében kellene eldöntenie a programnak, hoy max sebességgel indul, vagy a többi 3 lépcső valamelyikével. Ha kicsi a távlság, akkor a legkisebbel, másként túlmegy rajta. Ahogy közeledik, csökkented a sebességet. Az ultrahangos távolságmérőnek van egy mérési időtartama - vagyis a távolságot legfeljebb ilyen időközönként tudod meghatározni. Ha az aktuális pozíció mínusz a célpozíció közötti táv kisebb, mint amit a motor két távmérés alatt megtesz, akkor a motor működtetési idejét már a táv/sebesség alapján kell számolnod.
A legfontosabb szerintem: a célpozícióra állásnak kell legyen egy megengedett pontatlansága, vagyis ha ezen belül vagy, akkor le kell állni a beállásnak, másként a végtelenségig rángatja majd előre-hátra.
Egy szintezőt szeretnék építeni. Ez tulajdonképpen egy makett lenne. A szenzor alatt lévő objektumhoz képes igazítaná a felfüggesztett fém lemezt, aminek a két végén helyezkednek el a szenzorok(HC-SR04 ultrahangos távolságmérő). A szintezést egy 12 voltos dc motor végezné, aminek a fordulatszámát áttétellel is lassítottam. Ezt a motort egy L298N vezérlő irányítaná.
A programozással akadtak problémáim. Az lenne a kérdésem, hogy hogyan lehetne megoldani azt, hogy a motor mindig a megfelelő irányban, csak a szükséges mértékig állítson és ez az állítás mindig a lehető leggyorsabban történjen.
Építenék egy TZXDuino-t (https://github.com/sadken/TZXDuino). Kijelző, SD kártya olvasó már csatlakoztatva. A kártya olvasó nem érzékeli a kártyát. Egy 256 MB-os régi Nokia microSD kártyáról van szó. Minden vezeték a megfelelő helyen van, nincs kontakt hiba. Kipróbáltam az arduino fejlesztő rendszer Libraries/SD/examples/ mappában található Cardinfo programot is, ami a következő hibát dobja soros monitoron:
"Initializing SD card...Wiring is correct and a card is present.
Card type: SD1 Could not find FAT16/FAT32 partition. Make sure you've formatted the card"
Formáztam FAT16-ra, FAT32-re, letöltöttem az SDcard.org oldalról az SD kártya formázó proggit, de semmi.
1.8.5.-ös az arduino fejlesztőrendszer, az SD library 1.2.1-es, az USB-n keresztül 4.9V-ot kap a panel.
+ Arduino környezetben a honlapon van kissé alapabb a "library"-k (könyvtárak) használatáról.
Mindenképp jó irány. A sok void (ami nem feltétlen void) első lépésnek nem rossz, de a könyvtárak használata mindenképp célravezetőbb (és elegánsabb is).
Keress rá a neten a "moduláris programozás C nyelven" kifejezésre. Ezért van külön lépésben a fordítás és a linkelés, és erre valók a header (.h) fájlok. (Pascalban a unit csinálja ugyanezt.)