Knihovna a odevzdavani parametru typu pole

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

poprad
Okoloidúci
Okoloidúci
Príspevky: 11
Dátum registrácie: 20 Sep 2010, 00:00
Bydlisko: Poprad
Kontaktovať používateľa:

Knihovna a odevzdavani parametru typu pole

Príspevok od používateľa poprad » 13 Nov 2015, 13:03

Zdravím.
Co dělám špatně, že mi hlásí knihovna chybu při deklaraci lokálních parametrů prvku pole.
StepperSerial,cpp

Kód: Vybrať všetko

#include <Arduino.h>
#include "SerialStepper.h"

SerialStepper::SerialStepper(byte pin_STC, 
                                           byte pin_SHCP, 
                                           byte pin_DS, 
                                           byte pocet_M, 
                                           byte motory[], 
                                           byte smerM[])
{
  byte _pin_STC = pin_STC;      // OK
  byte _pin_SHCP = pin_SHCP;  // OK
  byte _pin_DS = pin_DS;         // OK
  byte _pocet_M = pocet_M;    // OK
  byte _motory[] = motory[];   // tu to hlasi chybu
  byte _smerM[] = smerM[];     // tu to hlasi chybu
}
SerialStepper.h

Kód: Vybrať všetko

#ifndef SerialStepper_h
#define SerialStepper_h

#include "Arduino.h"

class SerialStepper
{
  public:
    SerialStepper (byte pin_STC,
                   byte pin_SHCP, 
                   byte pin_DS, 
                   byte pocet_M, 
                   byte motory[],
                   byte smerM[]);
  private:
};
Trápím se s tím dlouho a nevím jak to napsat správně.
Děkuji
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1539
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: Knihovna a odevzdavani parametru typu pole

Príspevok od používateľa jirka.jirka. » 13 Nov 2015, 14:20

Sice jsem s arduinem nepracoval, ale ukaž nám tu chybu. :) Určitě i ta nám hodně napoví.
0

poprad
Okoloidúci
Okoloidúci
Príspevky: 11
Dátum registrácie: 20 Sep 2010, 00:00
Bydlisko: Poprad
Kontaktovať používateľa:

Re: Knihovna a odevzdavani parametru typu pole

Príspevok od používateľa poprad » 13 Nov 2015, 14:37

Kód: Vybrať všetko

C:\..........\Documents\Arduino\libraries\SerialStepper\src\SerialStepper.cpp: 
In constructor 'SerialStepper::SerialStepper(byte, byte, byte, byte, byte*, byte*)':

C:\..........\Documents\Arduino\libraries\SerialStepper\src\SerialStepper.cpp:15:27: 
error: expected primary-expression before ']' token

   byte _motory[] = motory[];
                           ^
C:\..........\Documents\Arduino\libraries\SerialStepper\src\SerialStepper.cpp:16:25: 
error: expected primary-expression before ']' token

   byte _smerM[] = smerM[];
                         ^
exit status 1
Chyba kompilace.
0

Používateľov profilový obrázok
dxr
Ultimate člen
Ultimate člen
Príspevky: 3968
Dátum registrácie: 05 Aug 2013, 20:21
Bydlisko: V strede nicoho
Kontaktovať používateľa:

Re: Knihovna a odevzdavani parametru typu pole

Príspevok od používateľa dxr » 14 Nov 2015, 07:54

Klasika problemy s C/C++ pointrami pole je pointer respektive sa konvertuje na pointer.
A hovori ti ze sa mu nepaci to ako priradujes parameter tomu zapuzdrenemu polu v class-e
aspon mam ten pocit. Ako dlho robis s C/C++ jazykom ktory sa pouziva pri programovani Arduina?
Aby sme vedeli ako ta mame smerovat.

Kód: Vybrať všetko

In constructor 'SerialStepper::SerialStepper(byte, byte, byte, byte, byte*, byte*)':
Tu ti to aj pise ze problem je v Construktore tj. metode ktora inicializuje objekt posledne 2 parametre su pointre
typu byte/char a potom ktomu treba aj pristupovat. Inak tomuto sa Arduino kniznice vyhybaju
aby stym ludia nemali problem. ;)

PS: Ja by som asi vtej classe definoval pointer na pole bajtov a pracoval snim kedze pole bude asi globalna premmena;
lebo ak ju budes duplikovat zozerie ti drahocenne bajty z pamate. No nic pockame ci si aspon toto pochopil.
Riesit sa to da rozne otazne je co chces tym polom dosiahnut co tam je sekvencia spinania faz?

Asi najcitatelnejsie pre tvojich studentov to bude pomocou for (i=0; i<MAX_PRVOK;i++) { _motory=motory;}
0
Mahátma Ghándí: „Nejdřív tě budou ignorovat. Pak se ti budou smát. Pak proti tobě budou bojovat. Potom zvítězíš.“
čo viac dodať som taký a možeš to skúsiť vyhrať aj tak to vzdáš.. Obrázok
Arduino is popular becouse allow complex task with minimum investment

Používateľov profilový obrázok
budvar10
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1050
Dátum registrácie: 15 Dec 2014, 10:55
Bydlisko: Košice

Re: Knihovna a odevzdavani parametru typu pole

Príspevok od používateľa budvar10 » 15 Nov 2015, 12:23

Pointre nemôžeš priradzovať pomocou [], kompilátor očakáva číslo prvku poľa alebo vymenovanie prvkov. Napr. motory[] je neznámy prvok poľa kde 'motory' by mal byť pointer.
0

poprad
Okoloidúci
Okoloidúci
Príspevky: 11
Dátum registrácie: 20 Sep 2010, 00:00
Bydlisko: Poprad
Kontaktovať používateľa:

Re: Knihovna a odevzdavani parametru typu pole

Príspevok od používateľa poprad » 18 Nov 2015, 19:40

Už jsem to vyřešil:

SerialStepper.h

Kód: Vybrať všetko

#ifndef SerialStepper_h
#define SerialStepper_h
#include <Arduino.h>

class SerialStepper
{
  public:
    SerialStepper (byte pin_STCP,
                   byte pin_SHCP, 
                   byte pin_DS, 
                   byte pocetM, 
                   int  motory[]); 
    void Init(); 

  private: 
    byte _pin_STCP;
    byte _pin_SHCP; 
    byte _pin_DS;
    byte _pocetM;
    int * _motory = NULL;    // Inicializacia pointera
};
#endif
SerialStepper.cpp

Kód: Vybrať všetko

#include <Arduino.h>
#include "SerialStepper.h"

SerialStepper::SerialStepper( byte pin_STCP, 
                              byte pin_SHCP, 
                              byte pin_DS, 
                              byte pocetM, 
                              int motory[])
{
  this->_pin_STCP = pin_STCP;  // priradenie k lokalnym
  this->_pin_SHCP = pin_SHCP;  // premennym
  this->_pin_DS   = pin_DS;
  this->_pocetM   = pocetM;
  this->_motory = & motory[0]; // Priradenie adresy
}
A práce s lokálními proměnnými v SerialStepper.cpp už je klasika:

Kód: Vybrať všetko

.......
  digitalWrite (_pin_STCP,HIGH); 
.......
  digitalWrite (_pin_SHCP,LOW );
.......
digitalWrite (_pin_DS,LOW );
.......
for (byte i = _pocetM; i>0 ;i--)
  {
    Motory = _motory[i-1];
.......
0

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