Arduino a DALI

C,C++,C#

Moderátori: psichac, Moderátori

Používateľov profilový obrázok
Andrej152
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1022
Dátum registrácie: 29 Júl 2013, 12:49
Bydlisko: prešov
Vek: 22

Arduino a DALI

Príspevok od používateľa Andrej152 » 16 Feb 2018, 17: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/Na ... ler-506e44
pripadne, neskusal to uz niekto ?

Diky
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Arduino a DALI

Príspevok od používateľa peterple » 16 Feb 2018, 19: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?
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Používateľov profilový obrázok
Andrej152
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1022
Dátum registrácie: 29 Júl 2013, 12:49
Bydlisko: prešov
Vek: 22

Re: Arduino a DALI

Príspevok od používateľa Andrej152 » 17 Feb 2018, 08: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 !
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Arduino a DALI

Príspevok od používateľa peterple » 17 Feb 2018, 11: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.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Používateľov profilový obrázok
Tribec Zacks
Pokročilý člen
Pokročilý člen
Príspevky: 709
Dátum registrácie: 26 Jún 2010, 00:00
Bydlisko: Levice / Cork IRL
Vek: 41
Kontaktovať používateľa:

Re: Arduino a DALI

Príspevok od používateľa Tribec Zacks » 17 Feb 2018, 12: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.
0
Kreativita a motivacia je to, co prinasa originalne napady a myslienky, disciplina je to, co ich dokaze zrealizovat.

Používateľov profilový obrázok
Andrej152
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1022
Dátum registrácie: 29 Júl 2013, 12:49
Bydlisko: prešov
Vek: 22

Re: Arduino a DALI

Príspevok od používateľa Andrej152 » 19 Mar 2018, 09: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
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok