üzenetek

hozzászólások


Melorin
(addikt)
Blog

Okés, azt hittem, hogy ez a topik csak az arduino bemutatásáról szól, és nem kéne teleírkálni kódokkal :)

Szóval van egy DS1302 óramodulom, amivel időzíteni szeretnék egy világítást.
Van hozzá library, ami szépen ki is írja az időt Soros monitoron.

Az a baj, hogy nem bírom kideríteni, hogy hogyan tudom azt megcsinálni, hogy pl(leegyszerűsített példa):

int villany_be = 11:00;
int villany_ki = 20:00;

if ((óra_perc >= villany_be) & (óra_perc < villany_ki))
{
digitalWrite(villany_rele, HIGH);
}
else
{
digitalWrite(villany_rele, LOW);
}

Nem tudom lekérdezni az óra_perc-et, amit össze tudnék hasonlítani az általam meghatározott időzítésekkel.


ielektros
(senior tag)
Blog

Ezzel a library-vel probaltad mar? Bar nem tul fiatal. [link]

En mondjuk inkabb DS1307-el jatszanek. Egyszerubb szerintem es i2c bus-os. Nem 3 wire mint a DS1302.

Azt ertem, hogy mi a celod, csak nem tudom hogyan probaltad eddig es miert nem mukodott.

A Playground-os linken levo peldaval mi a gond vegul is?

[ Szerkesztve ]


Melorin
(addikt)
Blog

1302 van csak nekem, és van bőven pin a lapomon, nem kell takarékoskodni :)

Hát ez az, nem próbáltam eddig semmit, mert halvány fogalmam sincs, hogy mivel lehetne próbálkozni.

A playgroundos példa pedig semmit nem mond nekem, nem is írják, hogy mit csinál, és 1km hosszú, nem tudok vele megbírkózni így a nulláról indulva :(


ielektros
(senior tag)
Blog

Hat elobb probald ki az ott talalhato teljes programot. Ott van a linkeden egy teljes kesz "sketch" amit beletudsz tolteni az arduino-ba. Aztan a Sketch-ben levo labakra vezetekezd be a modult. De inkabb forditva. :) Vezetekezd ossze, es ird be a progit. Vagy ahogy jol esik :DDD Faradt vagyok.

Ezzel ha megvagy akkor az arduino fejlesztoben talalhato Serial Monitoron fogod latni, hogy mi tortenik. A lekerdezessel majd akkor kezdj el foglalkozni ha egyaltalan mar az latod, hogy mukodik az aramkor.

// Set your own pins with these defines !
#define DS1302_SCLK_PIN 6 // Arduino pin for the Serial Clock
#define DS1302_IO_PIN 7 // Arduino pin for the Data I/O
#define DS1302_CE_PIN 8 // Arduino pin for the Chip Enable

A DS1302-hoz is van kesz library de azt nem tudom, hogy melyik verzioval kompatibilis es, hogy mifan terem. Soha nem hasznaltam ezt az IC-t.

[ Szerkesztve ]


Melorin
(addikt)
Blog

Működik az áramkör, eddig is működött, csak lekérdezni nem tudtam.
Most feltöltöttem rá a Playgnd-s sketch-et, és ezt írja ki a Serial Monitoron:
DS1302 Real Time Clock
Version 2, March 2013
Time = 14:28:59, Date(day of month) = 22, Month = 5, Day(day of week) = 3, Year = 2013
Time = 14:29:04, Date(day of month) = 22, Month = 5, Day(day of week) = 3, Year = 2013
Time = 14:29:09, Date(day of month) = 22, Month = 5, Day(day of week) = 3, Year = 2013

Szóval működik ez a sketch is.

[ Szerkesztve ]


ielektros
(senior tag)
Blog

Okok. Azt nem tudtam, hogy mar el az aramkor. Nah hat akkor ott latod, hogy melyik valtozokat printeli ki a serial portra es mikor. Azokkal a valtozokkal esetleg tudsz operalni valamit. Estefele ranezek a kodra megint, most hajtas van.


Melorin
(addikt)
Blog

Sikerült valamit kibogarásznod a kódból?


DarkByte
(addikt)
Blog

Neked csak ez a fájl érdekes ami a minta projekt: [link] A lib-et egy az egyben felhasználhatod amit linkeltek.

A kódban a setup() alatti rész inicializálja a modult (beállítja rajta az időt), a loop() függvény ezután megy körbe körbe és a soros porton küldi a gépnek időnként az idő bélyeget.

Ha valami időzítőnek akarod használni a modult igazából annyi a dolgod hogy a loop-ban figyeled a modulról olvasott időt hogy túllépte-e az időpontot amikor kapcsolni kell valamit. Ha igen, akkor valamelyik digitális portra a digitalWrite függvénnyel logikai magas jelet írsz és kapcsolsz relét vagy akármit amit oda megálmodsz.

Amit írtál kódot jó szemantikailag de nem szintaktikailag.

int villany_be = 11:00;
int villany_ki = 20:00;

Ez nem jó így. Az int egy egész számot tároló típus, a 11:00 pedig nem egy szám hanem egy karaktersorozat amit a fordító nem tud értelmezni.

Ha megnézed a példa kódot az időt külön részekben kapod meg.

Time t = rtc.time();

Ez kéri el a modultól az aktuális időbélyeget, a t változóban fogod megkapni. Ezután ezen lehet elérni az órát, percet, másodpercet, dátumot: t.yr, t.mon, t.date, t.hr, t.min, t.sec

Ha pl. azt akarod elérni hogy minden nap 11 -kor kapcsoljon be, 20-kor pedig ki akkor csinálhatsz valami ilyesmit:

void setup() {
// Itt beállítod az órát úgy ahogy a példában
}

boolean villanyBekapcsolva = false;

void loop() {
Time t = rtc.time(); // Lekérjük a modultól az időt

if ((t.hr>=11 && t.hr<20) && !villanyBekapcsolva) { // 11 óra után és 20 óra előtt vagyunk és nem ég a villany?
// Ha igen, villany bekapcs
villanyBekapcsolva = true;
digitalWrite(villany_rele, HIGH);
} else if ((t.hr>=20 || t.hr <11) && villanyBekapcsolva) { // 20 óra után vagyunk vagy 11 óra előtt és ég a villany?
// Ha igen, villany kikapcs
villanyBekapcsolva = false;
digitalWrite(villany_rele, LOW);
}

delay(1000); // alszunk 1mp-et mielőtt újra figyeljük a feltételeket
}

[ Szerkesztve ]


Melorin
(addikt)
Blog

Köszi, ezzel így már talán el tudok indulni.

Viszont amit linkeltél, az nem működik nálam, valószínűnek tartom, hogy azért, mert nincs string.h és stdio.h library-m.
Viszont nem is találok olyan helyet, ahonnan le lehetne tölteni. :F


DarkByte
(addikt)
Blog

Mindkettő standard lib, benne kell hogy legyen az Arduino IDE disztribúcióban amit leszedtél. Másold be a full hibaüzenetet amit ír az IDE nyugodtan. Szerintem más lesz a baj.

[ Szerkesztve ]


Melorin
(addikt)
Blog

In file included from sketch_may26a.ino:10:
C:\Program Files (x86)\Arduino Nano\libraries\String/string.h:23:22: error: WProgram.h: No such file or directory
In file included from sketch_may26a.ino:10:
C:\Program Files (x86)\Arduino Nano\libraries\String/string.h:58: error: 'boolean' does not name a type
C:\Program Files (x86)\Arduino Nano\libraries\String/string.h:59: error: 'boolean' does not name a type
C:\Program Files (x86)\Arduino Nano\libraries\String/string.h:60: error: 'boolean' does not name a type
C:\Program Files (x86)\Arduino Nano\libraries\String/string.h:71: error: 'boolean' does not name a type
C:\Program Files (x86)\Arduino Nano\libraries\String/string.h:72: error: 'boolean' does not name a type
C:\Program Files (x86)\Arduino Nano\libraries\String/string.h:78: error: ISO C++ forbids declaration of 'byte' with no type
C:\Program Files (x86)\Arduino Nano\libraries\String/string.h:78: error: expected ';' before '*' token
C:\Program Files (x86)\Arduino Nano\libraries\String/string.h:79: error: expected `;' before 'const'
C:\Program Files (x86)\Arduino Nano\libraries\String/string.h: In destructor 'String::~String()':
C:\Program Files (x86)\Arduino Nano\libraries\String/string.h:39: error: 'free' was not declared in this scope
C:\Program Files (x86)\Arduino Nano\libraries\String/string.h: In member function 'void String::getBuffer(unsigned int)':
C:\Program Files (x86)\Arduino Nano\libraries\String/string.h:101: error: 'malloc' was not declared in this scope
C:\Program Files (x86)\Arduino Nano\libraries\String/string.h: In member function 'void String::doubleBuffer()':
C:\Program Files (x86)\Arduino Nano\libraries\String/string.h:109: error: 'strcpy' was not declared in this scope
C:\Program Files (x86)\Arduino Nano\libraries\String/string.h:110: error: 'free' was not declared in this scope
In file included from C:\Program Files (x86)\Arduino Nano\hardware\arduino\cores\arduino/Arduino.h:192,
from sketch_may26a.ino:14:
C:\Program Files (x86)\Arduino Nano\hardware\arduino\cores\arduino/WString.h: At global scope:
C:\Program Files (x86)\Arduino Nano\hardware\arduino\cores\arduino/WString.h:45: error: redefinition of 'class String'
C:\Program Files (x86)\Arduino Nano\libraries\String/string.h:28: error: previous definition of 'class String'
In file included from C:\Program Files (x86)\Arduino Nano\hardware\arduino\cores\arduino/Stream.h:26,
from C:\Program Files (x86)\Arduino Nano\hardware\arduino\cores\arduino/HardwareSerial.h:28,
from C:\Program Files (x86)\Arduino Nano\hardware\arduino\cores\arduino/Arduino.h:193,
from sketch_may26a.ino:14:
C:\Program Files (x86)\Arduino Nano\hardware\arduino\cores\arduino/Print.h: In member function 'size_t Print::write(const char*)':
C:\Program Files (x86)\Arduino Nano\hardware\arduino\cores\arduino/Print.h:51: error: 'strlen' was not declared in this scope
sketch_may26a.ino: At global scope:
sketch_may26a:23: error: 'DS1302' does not name a type
sketch_may26a.ino: In function 'void print_time()':
sketch_may26a:29: error: 'Time' was not declared in this scope
sketch_may26a:29: error: expected `;' before 't'
sketch_may26a:32: error: 'memset' was not declared in this scope
sketch_may26a:33: error: 't' was not declared in this scope
sketch_may26a:35: error: 'strcpy' was not declared in this scope
sketch_may26a:60: error: 't' was not declared in this scope
sketch_may26a.ino: In function 'void setup()':
sketch_may26a:75: error: 'rtc' was not declared in this scope
sketch_may26a:80: error: 'Time' was not declared in this scope
sketch_may26a:80: error: expected `;' before 't'
sketch_may26a:83: error: 't' was not declared in this scope


DarkByte
(addikt)
Blog

Uhh, itt sok baj van.
- Először is javasolnám hogy olyan helyre telepítsd az Arduino IDE-t ahol nincs szóköz az útvonalban.
- Úgy látom valami spéci build-et szedtél le a fejlesztői környezetből. Nem emlékszem pontosan de ezzel a WProgram.h-val én is szívtam már. Azt hiszem ez megszűnt egy ideje, csak a nagyon régi IDE-kben van de nem emlékszem pontosan. Szerintem inkább tedd fel a legutóbbi stabilt az Arduino oldaláról: [link] és válaszd a Nano-t a board menüben.


Melorin
(addikt)
Blog

Szia. Eddig is a legújabb verziót használtam.
De ahogy kérted, át tettem egy másik mappába, és így már jóval kevesebb hibát ír ki:
_1302nemjo.ino: In function 'void print_time()':
_1302nemjo:29: error: 'class DS1302' has no member named 'time'
_1302nemjo:33: error: 'class Time' has no member named 'day'
_1302nemjo:60: error: 'class Time' has no member named 'yr'
_1302nemjo:61: error: 'class Time' has no member named 'hr'
_1302nemjo.ino: In function 'void setup()':
_1302nemjo:75: error: 'class DS1302' has no member named 'write_protect'
_1302nemjo:80: error: no matching function for call to 'Time::Time(int, int, int, int, int, int, int)'
C:\Arduino\libraries\DS1302/DS1302.h:72: note: candidates are: Time::Time()
C:\Arduino\libraries\DS1302/DS1302.h:62: note: Time::Time(const Time&)
_1302nemjo:83: error: 'class DS1302' has no member named 'time'


DarkByte
(addikt)
Blog

Ehhez viszont kellene az ino fájlod forrása. Látszólag már csak az a baja hogy a hívások nem match-elnek a lib-re. Valami típus eltérés lehet, vagy nem jól van valami behúzva a lib.


Melorin
(addikt)
Blog

"Neked csak ez a fájl érdekes ami a minta projekt: [link] A lib-et egy az egyben felhasználhatod amit linkeltek."

Te ezt kipróbáltad egyébként, és megpróbáltad lefordíttatni a programmal?


DarkByte
(addikt)
Blog

Az imént kipróbáltam. Nekem nem volt vele semmi gond. A cpp és h fájlt be kell másolni az <ide_mappája>\libraries\DS1302 alá. Ezután a pde fájlt megnyitod és a compile le kell hogy menjen hiba nélkül a fordítás.


Melorin
(addikt)
Blog

Mindent újra csináltam most, és ezt a hibaüzit írja:
In file included from set_clock.pde:10:
D:\Arduino\libraries\String/string.h:23:22: error: WProgram.h: No such file or directory
In file included from set_clock.pde:10:
D:\Arduino\libraries\String/string.h:58: error: 'boolean' does not name a type
D:\Arduino\libraries\String/string.h:59: error: 'boolean' does not name a type
D:\Arduino\libraries\String/string.h:60: error: 'boolean' does not name a type
D:\Arduino\libraries\String/string.h:71: error: 'boolean' does not name a type
D:\Arduino\libraries\String/string.h:72: error: 'boolean' does not name a type
D:\Arduino\libraries\String/string.h:78: error: ISO C++ forbids declaration of 'byte' with no type
D:\Arduino\libraries\String/string.h:78: error: expected ';' before '*' token
D:\Arduino\libraries\String/string.h:79: error: expected `;' before 'const'
D:\Arduino\libraries\String/string.h: In destructor 'String::~String()':
D:\Arduino\libraries\String/string.h:39: error: 'free' was not declared in this scope
D:\Arduino\libraries\String/string.h: In member function 'void String::getBuffer(unsigned int)':
D:\Arduino\libraries\String/string.h:101: error: 'malloc' was not declared in this scope
D:\Arduino\libraries\String/string.h: In member function 'void String::doubleBuffer()':
D:\Arduino\libraries\String/string.h:109: error: 'strcpy' was not declared in this scope
D:\Arduino\libraries\String/string.h:110: error: 'free' was not declared in this scope
In file included from D:\Arduino\hardware\arduino\cores\arduino/Arduino.h:192,
from set_clock.pde:14:
D:\Arduino\hardware\arduino\cores\arduino/WString.h: At global scope:
D:\Arduino\hardware\arduino\cores\arduino/WString.h:45: error: redefinition of 'class String'
D:\Arduino\libraries\String/string.h:28: error: previous definition of 'class String'
In file included from D:\Arduino\hardware\arduino\cores\arduino/Stream.h:26,
from D:\Arduino\hardware\arduino\cores\arduino/HardwareSerial.h:28,
from D:\Arduino\hardware\arduino\cores\arduino/Arduino.h:193,
from set_clock.pde:14:
D:\Arduino\hardware\arduino\cores\arduino/Print.h: In member function 'size_t Print::write(const char*)':
D:\Arduino\hardware\arduino\cores\arduino/Print.h:51: error: 'strlen' was not declared in this scope
set_clock.pde: In function 'void print_time()':
set_clock:32: error: 'memset' was not declared in this scope
set_clock:35: error: 'strcpy' was not declared in this scope


Proci85
(senior tag)

A megfelelő alappanel van kiválasztva a keretrendszerben?


Melorin
(addikt)
Blog

Elvileg bármelyik panellal működnie kéne.
Na de "könnyebb" vizekre eveztem, próbálok működésre bírni egy 7 szegmenses kijelzőt.
Meg is építettem egy TPIC6C595 shift regisztert hozzá. De nem működik.
Kezd nagyon bosszantó lenni ez az Arduino. Mielőtt megvettem, azt hittem nagyon egyszerű, mert mindenhol ez folyt.
A gyakorlat viszont nem ezt mutatja sajnos :(
Jó, LED-eket villogtatni valóban egyszerű, de amikor valami értelmeset kéne csinálni vele, akkor csak a szívás van vele. :W


ielektros
(senior tag)
Blog

Ez elofordul. Ne keseredj el, nem az Arduino lesz a vetkes szerintem :). En is eppen egy 4digites 7 szegmenses kijelzovel zsonglorkodom. MAX7219 ic-vel. Ahhoz is van kesz library. Playground


DarkByte
(addikt)
Blog

Programozni az Arduino sem fog megtanulni helyetted. Ezt az energiát neked kell beleölni. Keress valamilyen C/C++ tutorial-t a neten és szedd fel kicsit magad tudással. Az alapján amit elsőnek írtál kódot nekem úgy tűnik leginkább ez lesz a probléma. Nem látod még át mi miért van a kódban, amit letöltesz annak mi a szerepe.

Még akinek ez a szakmája is tud véteni szép számmal hibákat, ezt csak a tapasztalat fogja eloszlatni teljesen. Még 4 év programozói tapasztalattal a hátam mögött is találok a mai napig olyan dolgokat hogy ketté füstöl a fejem :D Kitartás és meg fogja hálálni :)

[ Szerkesztve ]


Sleed
(aktív tag)

Sziasztok,
nyitottam egy Arduino témát, ha gondoljátok osszátok meg hogy éppen min dolgoztok :)

Üdv:Sleed

üzenetek