Svetelektro.com

Svetelektro.com

Meno:
Heslo:
SVETELEKTRO • Arduino a DALI

Arduino a DALI

C,C++,C#

Moderátori: psichac, Moderátori

Arduino a DALI

Odoslaťod Andrej152 » 16 Feb 2018, 18:48

Caute!
pracujeme na jednom velkom projekte na suzaz a zastavil ma jeden problem . Jedna sa o inteligentne osvetlenie , mame driver na lampy cez protokol DALi . HW to funguje , problem je z programom .. ohladom arduina a dali je toho na nete malo nasiel som jeden kod ktory po uprave funguje polovicne na arduine nano - dokazem nastavit lampe jas , ale vycitat ho z regulatora zatial neviem .. problem je v tom ze ako procesor mam ATmega644P a mightycore . na atmega328p v pohode nahra a ide program , ale na 644p vypise chybu

invalid conversion from 'const char*' to 'char*' [-fpermissive]

cmd2 = readBinaryString(input.substring(8, 16).c_str());

jedna sa o tuto kniznicu
https://create.arduino.cc/projecthub/NabiyevTR/simple-dali-controller-506e44
pripadne, neskusal to uz niekto ?

Diky
Andrej152
Obrázok používateľa
Pokročilý člen
Pokročilý člen
Príspevky: 908
Vek: 18.13
Založený: 29.07.2013
Bydlisko: prešov
Karma: 27

Re: Arduino a DALI

Odoslaťod peterple » 16 Feb 2018, 20:52

Nevinne vyzerajúca otázka a koľko s tým bude patálií, pretože treba vidieť hlboko do vnútorností C jazyka
V prvom rade treba vedieť aký je rozdiel medzi
Kód: Vybrať všetko
char* a const char*

To prvé je ukazateľ na pole znakov teda C string (pole znakov s ukončovacím znakom 0).
To druhé je to isté ale prekladaču sa naznačí že z nejakého dobrého dôvodu sa to pole znakov nemôže meniť. Teda musí byť konštantné.

A teraz treba rozklúčovať toto:
Kód: Vybrať všetko
cmd2 = readBinaryString(input.substring(8, 16).c_str());

input je String. Ten nemá s C stringom veľa spoločné. String je objekt. Ako taký má nejaké svoje vnútorné premenné a potom metódy pomocou ktorých s nimi niečo robí.
Prvá metóda substring vráti zase String ale taký ktorý obsahuje iba určitú časť pôvodného stringu. Tam teda problém nie je.
Druhá metóda c_str robí takú zvláštnu vec a to že sprístupní text v objekte String ako c string. Lenže:
Converts the contents of a string as a C-style, null-terminated string. Note that this gives direct access to the internal String buffer and should be used with care. In particular, you should never modify the string through the pointer returned. When you modify the String object, or when it is destroyed, any pointer previously returned by c_str() becomes invalid and should not be used any longer.

to robí ako je C az C++ zvykom tak trochu nejakým hackom aby to bolo jednoduché a rýchle a k pamäti šetrné. Podmienkou je že ten string sa nesmie meniť. teda táto funkcia vracia const char*

No a teraz sa dostávame k finále. Funkcia readBinaryString čakáva char *
Kód: Vybrať všetko
int Dali::readBinaryString(char *s){
..}

No a tu platí pravidlo že char * na const char* sa pretypuje bez kecov lebo je to bezpečné. Opačne to ale bezpečné nie je. Preto kompilátor držkuje.

Von z toho sa dá dvomi spôsobmi. Hádaj akými?
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
peterple
Ultimate člen
Ultimate člen
Príspevky: 1898
Vek: 52.81
Založený: 25.06.2013
Bydlisko: Krajné
Karma: 52

Re: Arduino a DALI

Odoslaťod Andrej152 » 17 Feb 2018, 09:50

Okej , ako citam musim zacat studovat riadne C :D
ale dobre , teraz zacinam uvazovat ako je to mozene ze pri arduine nano ( resp . vsetky ktore maju 328p ) tak to ide bez pipnutia , ale ak to prepnem na inu dosku - atmega 644p tak to hadze .. nieje pricina tam , ze tomu boardu co pouzivam - mightycore , jednoducho nemoze mu chybat nieco ?


EDIT: vyriesene!
miesto mightycore som dal saguino a nepipa ze daco zle a ide to !
Andrej152
Obrázok používateľa
Pokročilý člen
Pokročilý člen
Príspevky: 908
Vek: 18.13
Založený: 29.07.2013
Bydlisko: prešov
Karma: 27

Re: Arduino a DALI

Odoslaťod peterple » 17 Feb 2018, 12:08

Pravda, na tento tretí spôsob som zabudol. Miesto jedného nefungujúceho bazmeku použijeme iný ktorý náhodou funguje. Potom to vyzerá tak že na protokol čo posiela dva byte v manchestrovom kóde treba hľadať na nete hotové riešenie.
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
peterple
Ultimate člen
Ultimate člen
Príspevky: 1898
Vek: 52.81
Založený: 25.06.2013
Bydlisko: Krajné
Karma: 52

Re: Arduino a DALI

Odoslaťod Tribec Zacks » 17 Feb 2018, 13:59

@Andrej152, Ak to chces s elektrotechnikou potiahnut niekam dalej ako byt macher v miestnom pat-a-mat elektro klube, tak mas teraz v tvojom veku najlepsi mozny cas sa vyprdet na vsetky arduinko k.k.tinky.... zober datasheet, pochop ako funguje protokol, ako ma vypadat jeho timing diagram, a naprogramuj to sam pre hw ktory chces pouzit, bez nejakych trapnych knizniciek co niekde funguju, niekde nie, co ani boh nereverzne.... a to plati pre vsetky projekty o ktorych si tu kedy pisal, kde su zakladne veci ako lcd displeje, rozne senzory a podobne (pokial nejde o usb alebo ethernet etc) Nebuduj si navyk ako kazdy druhy arduinista - macher pisania pseudokodu co v zivote nevidel datasheet a nevie co to je register mcu... Blby niesi, tak to nezahod, radi ti pomozeme ked sa budes s niecim takym trapit. A ak nemas, tak setri na nejaky zakladny dso osciloskop, bude ti viac nez potrebny.
Kreativita a motivacia je to, co prinasa originalne napady a myslienky, disciplina je to, co ich dokaze zrealizovat.
Tribec Zacks
Obrázok používateľa
Pokročilý člen
Pokročilý člen
Príspevky: 623
Vek: 37.07
Založený: 26.06.2010
Bydlisko: Levice / Cork IRL
Karma: 21

Re: Arduino a DALI

Odoslaťod Andrej152 » 19 Mar 2018, 10:31

ano mas pravdu .
ale predsa, venujem sa elektronike a z mensej casti aj foteniu a zvuceniu..
programovanie nikdy som nemal ako nejaku zalubu - a ked nieco trebalo na rychlo arduino to rychlo vyriesilo. kedze dali som potreboval spravit do par dni tak nemal som velmi chut to studovat rovno som to skusil cez arduino a fungovalo to
Andrej152
Obrázok používateľa
Pokročilý člen
Pokročilý člen
Príspevky: 908
Vek: 18.13
Založený: 29.07.2013
Bydlisko: prešov
Karma: 27


Naspäť na C,C++,C#

Kto je prítomný

Užívatelia prezerajúci si toto fórum: Žiadny registrovaný používateľ a 1 hosť.

Forums ©
Autor stránky je Ondrej Závodský(zawin), o graficky design sa stará Ľuboš Fabo(BUFU).

TOPlist

Powered by Copyright © UNITED-NUKE CMS. All Rights Reserved.
Čas potrebný k spracovaniu stránky 0.27 sekúnd