Arduino pomoc

Odpovědět
Mex
Příspěvky: 10287
Registrován: 6. 2. 2014, 10:29

30. 11. 2014, 6:50

Teď jsem si všiml, že jsi iniciativně přepsal identifikaci LED z mého:
#define LED1 0x01
#define LED2 0x02
#define LED3 0x04
na svoje
#define LED1 1
#define LED2 2
#define LED3 3

To právě nejde. Ta identifikace musí být tak, že každé LED přísluší jeden bit, pak je můžeš logickou funkcí OR (symbol '|') sloučit do skupin.
Takže když to chceš dekadicky a ne binárně nebo hexadecimálně (což je mnohem názornější), tak:
#define LED1 1
#define LED2 2
#define LED3 4
#define LED4 8

Nejnázornější je to binárně:
#define LED1 b00000001
#define LED2 b00000010
#define LED3 b00000100
#define LED4 b00001000
Uživatelský avatar
Hades
Příspěvky: 1196
Registrován: 11. 10. 2012, 10:59
Bydliště: Praha; Mimoň

30. 11. 2014, 6:57

Mex píše:Teď jsem si všiml, že jsi iniciativně přepsal identifikaci LED z mého:
........................

Nejnázornější je to binárně:
#define LED1 b00000001
#define LED2 b00000010
#define LED3 b00000100
#define LED4 b00001000
tohle je přesně ono, pak není třeba nic komentovat a na první pohled je jasné, kteráže LEDka je na kterém pinu :clap:

p.s.
aha, tak tedy TLESKÁM....
Uživatelský avatar
packa
Příspěvky: 7047
Registrován: 7. 2. 2007, 6:42
Bydliště: Královehradecký kraj

30. 11. 2014, 7:04

pokud bych to zapsal takhle:
#define LED1 1
#define LED2 2
#define LED3 4
#define LED4 8

tak se to chová špatně : to bych pči volání led3 spínal pin4 , u arduina se to prostě čísluje jinak

a binárně:

Nejnázornější je to binárně:
#define LED1 b00000001
#define LED2 b00000010
#define LED3 b00000100
#define LED4 b00001000



to vůbec nelze
Uživatelský avatar
Hades
Příspěvky: 1196
Registrován: 11. 10. 2012, 10:59
Bydliště: Praha; Mimoň

30. 11. 2014, 7:13

kokni do manuálu toho tvýho překladače, ale dle odkazu, co jsem sem dal já i lubos


PORTD = B10101000; // sets digital pins 7,5,3 HIGH

tak to musí binárně chodit.
Nezapoměl sis nastavit port, jak se má chovat? tohle se mi stávalo na PIC-kách, že jsm si nedefinoval, jak se má port chovat, a po inicializaci byl nastaven jak AD, nikoliv jako IO...
Ale jak jsem psal, arduino a jeho překladač neznám, bude to chtít kouknout do "MAN"


takže
#DEFINE LED1 B00000001;

DDRD = B11111111; / nastavit na OUT

PORTD = LED1;
Naposledy upravil(a) Hades dne 30. 11. 2014, 7:26, celkem upraveno 5 x.
Mex
Příspěvky: 10287
Registrován: 6. 2. 2014, 10:29

30. 11. 2014, 7:20

packa píše:to vůbec nelze
Arduino je základní zapojení procesoru ATmega328 s bootloaderem, a k tomu je vývojové prostředí, což je překladač GCC (resp. g++) s knihovnama.
Použití C++ je tady naprosto nesmyslné, nic to oproti C v této aplikaci nepřináší, ale udělali to prostě tak (předpokládám, že autoři projektu zrovna ve škole probírali objektové programování ;-) ).
No a protože to je klasický procesor a klasický překladač, tak se s tím dá zacházet jako s normální věcí. Takže proto musí fungovat nejjednodušší paralelní zápis na jednotlivé porty, je to ten absolutní základ, který musí zvládat všechny procesory a všechna vývojová prostředí na světě.
Uživatelský avatar
packa
Příspěvky: 7047
Registrován: 7. 2. 2007, 6:42
Bydliště: Královehradecký kraj

30. 11. 2014, 7:33

chlapy jsem rád že se mi snažíte pomoc , ale arduino se tomu brání a ještě já střevo k tomu takže to nemá dobré výsledky , já už to začal psát hezky za sebou , ale už je toho asi 300 řádků takže by se mi to opravdu hodilo to nějak zjednodušit .
Mex
Příspěvky: 10287
Registrován: 6. 2. 2014, 10:29

30. 11. 2014, 7:40

Možná by bylo dobré, kdybys napsal co přesně nejde.
Nejde to přeložit (hlásí chyby)?
Nebo to přeložíš a nefunguje?
Když sem vlepíš kousek (co nejmenší, ideálně tak max. 10 řádků) který nefunguje, tak určitě na něco přijedeme.
Uživatelský avatar
Hades
Příspěvky: 1196
Registrován: 11. 10. 2012, 10:59
Bydliště: Praha; Mimoň

30. 11. 2014, 7:45

ještě k tomu, co napsal Mex...

u těch skupin, nemělo by být spíše AND než OR

tedy:
#define skupina1 (led1 & led2 & led4) ???

ale to jen hádám z rychlého kouknutí , nestudoval jsem....

Ale připoj si ledky na port a zkus to definování portu (co má dělat) a pak rozsvěcej postupně ledky. A to co sis napsal, si zatím schovej :D
Mex
Příspěvky: 10287
Registrován: 6. 2. 2014, 10:29

30. 11. 2014, 7:46

Hades píše:ještě k tomu, co napsal Mex...

u těch skupin, nemělo by být spíše AND než OR
tedy:
#define skupina1 (led1 & led2 & led4) ???
ale to jen hádám z rychlého kouknutí , nestudoval jsem....
Ale připoj si ledky na port a zkus to definování portu (co má dělat) a pak rozsvěcej postupně ledky. A to co sis napsal, si zatím schovej :D
OR. Musíš jedničky skládat, ne z nich dělat průnik.
Uživatelský avatar
packa
Příspěvky: 7047
Registrován: 7. 2. 2007, 6:42
Bydliště: Královehradecký kraj

30. 11. 2014, 7:51

když použiju binární zápis tak nelze přeložit
pokud použiju zápis :
#define LED1 0x01
#define LED2 0x02
#define LED3 0x04
#define LED4 0x08
#define SKUPINA1 (LED1 | LED2 | LED3)
tak jednotlivé ledky můžu bez problému volat , ale volání skupiny nefunguje - třeba volám led 1,2,3 a rozsvítí to led 6

pokud to zapíšu takhle :
#define LED1 0x01
#define LED2 0x02
#define LED3 0x03
#define LED4 0x04

což se chová uplně stejně jako :
#define LED1 1
#define LED2 2
#define LED3 3
#define LED4 4
což je běžné u arduina tak bliká jen led 3 takže je problém v tom jak definovat skupinu
Mex
Příspěvky: 10287
Registrován: 6. 2. 2014, 10:29

30. 11. 2014, 7:55

A co znamená "volání skupiny" ?
To je tohle ?
PORTD |= SKUPINA1;
nebo to znamená něco jiného?

Proto říkám: pošli sem co nejmenší kousek, ale kompletního programu.
Uživatelský avatar
packa
Příspěvky: 7047
Registrován: 7. 2. 2007, 6:42
Bydliště: Královehradecký kraj

30. 11. 2014, 7:57

#define LED1 0x01
#define LED2 0x02
#define LED3 0x04
#define LED4 0x08

#define SKUPINA1 (LED1 + LED2 + LED3)
#define SKUPINA2 (LED3 + LED4)
#define PRODLEVA 500


void setup()
{
pinMode(0x01, OUTPUT); // nastaveni pinu 1 jako vystup
pinMode(0x02, OUTPUT); // nastaveni pinu 2 jako vystup
pinMode(0x04, OUTPUT); // nastaveni pinu 3 jako vystup
pinMode(0x08, OUTPUT); // nastaveni pinu 4 jako vystup

}

void loop(){


digitalWrite(SKUPINA1, HIGH);
delay(PRODLEVA);
digitalWrite(SKUPINA1, LOW);
delay(PRODLEVA);


}
Uživatelský avatar
Hades
Příspěvky: 1196
Registrován: 11. 10. 2012, 10:59
Bydliště: Praha; Mimoň

30. 11. 2014, 8:05

Mex píše: OR. Musíš jedničky skládat, ne z nich dělat průnik.
sypu si hlavu popelem :D
Uživatelský avatar
Hades
Příspěvky: 1196
Registrován: 11. 10. 2012, 10:59
Bydliště: Praha; Mimoň

30. 11. 2014, 8:23

To: packa....
[cite]
You should note, however, that pins 0 & 1 are used for serial communications for programming and debugging the Arduino, so changing these pins should usually be avoided unless needed for serial input or output functions. Be aware that this can interfere with program download or debugging.
[/cite]

ale problěmy by to dělat nemělo
Uživatelský avatar
packa
Příspěvky: 7047
Registrován: 7. 2. 2007, 6:42
Bydliště: Královehradecký kraj

30. 11. 2014, 8:34

jasně to vím s tím problém není to chodí v pohodě
Odpovědět

Zpět na „Ostatní elektronika“