Arduino pomoc

Odpovědět
Uživatelský avatar
packa
Příspěvky: 7047
Registrován: 7. 2. 2007, 6:42
Bydliště: Královehradecký kraj

30. 11. 2014, 11:12

Zdravím dělám takovou blbost a potřeboval bych v arduinu udělat funkci pro hromadné ovládání pinů , ted volám přeba LED1 a pod , ale potřeboval bych volat najednou třeba piny 1, 6 ,12 pod jedním názvem , nebo všechny led najednou -.led-all

předem dík
packa

int led1 = 1;
int led2 = 2;
int led3 = 3;
int led4 = 4;
int led5 = 5;
int led6 = 6;
int led7 = 7;
int led8 = 8;
int led9 = 9;
int led10 = 10;
int led11 = 11;
int led12 = 12;
int led13 = 13;
int led-all ---------?????
Uživatelský avatar
packa
Příspěvky: 7047
Registrován: 7. 2. 2007, 6:42
Bydliště: Královehradecký kraj

30. 11. 2014, 12:32

tak tohle taky nefunguje ,
lubos
Sponzor fora
Příspěvky: 5065
Registrován: 2. 5. 2007, 3:47
Bydliště: Praha

30. 11. 2014, 2:00

předpokládám že ti vadí postupné aktivování ledek? nebo chceš ušetřit řádky?
XpertMill, Gravos, Ninos, Galaad
IQ156
-1500Kč, -520Kč, -1čokoláda, - 28000Kč
www.freeair.cz www.rotexelectric.eu www.retrofitcnc.cz
Uživatelský avatar
packa
Příspěvky: 7047
Registrován: 7. 2. 2007, 6:42
Bydliště: Královehradecký kraj

30. 11. 2014, 2:38

tam budou různé sekvence kde potřebuju volat různé skupiny ledek a vypisovat se mi to po řádkách se mi nechce bylo by toho strašně moc
Mex
Příspěvky: 10287
Registrován: 6. 2. 2014, 10:29

30. 11. 2014, 5:11

Já teda Arduino neznám a ani znát nechci a nebudu.
Myslím to vývojové prostředí Arduino, ty destičky jsou naopak docela fajn.
Předpokládám, že ty LEDky máš prostě pověšené na jednotlivé piny nějakého výstupního portu.
Tak snad není problém poslat obsah celého portu najednou, ne?

Něco jako:
#define LED1 0x01
#define LED2 0x02
#define LED3 0x04
...
#define LED6 0x20

#define SKUPINA1 (LED1 | LED2 | LED6)
#define SKUPINA2 (LED1 | LED5)

No a pak buď rozsvítíš nebo zhasneš jednu LED:
PORT |= LED1
PORT &= ~LED1

Nebo celou skupinu:
PORT |= SKUPINA1
PORT &= ~SKUPINA1

Nevím, jak se v Arduinu zapisuje na porty, ale nějak takhle to snad taky jde (tedy tak, jak se to dělá ve všech ostatních vývojových prostředích).
Uživatelský avatar
packa
Příspěvky: 7047
Registrován: 7. 2. 2007, 6:42
Bydliště: Královehradecký kraj

30. 11. 2014, 5:43

tenhle zápis skupiny taky na arduinu nejde
Mex
Příspěvky: 10287
Registrován: 6. 2. 2014, 10:29

30. 11. 2014, 5:51

To prostě není možné.
Neříkej mi, že Arduino neumí vyslat jedním přikazem obsah celého portu.
A pokud opravdu ne, tak je to systém vhodný jen pro skartační pytel.
Uživatelský avatar
packa
Příspěvky: 7047
Registrován: 7. 2. 2007, 6:42
Bydliště: Královehradecký kraj

30. 11. 2014, 5:55

určítě umí :D , ale nevím jak
Uživatelský avatar
Hades
Příspěvky: 1196
Registrován: 11. 10. 2012, 10:59
Bydliště: Praha; Mimoň

30. 11. 2014, 5:59

to co poslal Mex musí fungovat, jen ty budeš muset definovat adresy podle zařízení, ale Arduino, jsem na tom jak Mex :D
Něco jako:
#define LED1 ... adresa portu
#define LED2 ... adresa portu
#define LED3 ... adresa portu

tohle by ti mohlo pomoci http://www.arduino.cc/en/Reference/PortManipulation" onclick="window.open(this.href);return false;
Uživatelský avatar
packa
Příspěvky: 7047
Registrován: 7. 2. 2007, 6:42
Bydliště: Královehradecký kraj

30. 11. 2014, 6:11

takhle jsem to napsal a nejede : samozřejmě když volám jednotlivé led tak je vše ok
#define LED1 1
#define LED2 2
#define LED3 3
#define LED4 4

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



void setup()
{
pinMode(1, OUTPUT); // nastaveni pinu 1 jako vystup
pinMode(2, OUTPUT); // nastaveni pinu 2 jako vystup
pinMode(3, OUTPUT); // nastaveni pinu 3 jako vystup
pinMode(4, OUTPUT); // nastaveni pinu 4 jako vystup
pinMode(5, OUTPUT); // nastaveni pinu 5 jako vystup



}

void loop(){

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

}
lubos
Sponzor fora
Příspěvky: 5065
Registrován: 2. 5. 2007, 3:47
Bydliště: Praha

30. 11. 2014, 6:24

Tady je to pěkně popsané
http://www.arduino.cc/en/Reference/PortManipulation" onclick="window.open(this.href);return false;
XpertMill, Gravos, Ninos, Galaad
IQ156
-1500Kč, -520Kč, -1čokoláda, - 28000Kč
www.freeair.cz www.rotexelectric.eu www.retrofitcnc.cz
Mex
Příspěvky: 10287
Registrován: 6. 2. 2014, 10:29

30. 11. 2014, 6:26

Přečti si to PDF, co poslal Hades.
Je to tam přesně popsané na pár řádcích i s příkladem, který se přesně hodí pro tebe.

Pokud bys měl ty LEDky třeba na portu D, tak rozsvícení:

PORTD |= SKUPINA1;
zhasnutí:
PORTD &= ~SKUPINA1;

Platí v případě, kdy LED svítí při log. H, tj. pokud jsou zapojené proti GND.
Pokud jsou proti plusu, tak je samozřejmě rozsvicení a zhasnutí naopak.
lubos
Sponzor fora
Příspěvky: 5065
Registrován: 2. 5. 2007, 3:47
Bydliště: Praha

30. 11. 2014, 6:28

Podle toho můžeš jak hromadně definovat vstupy ,výstupy tak i jejich stav, používal jsem to řízení bldc motoru kde to muselo být fakt rychlé.
XpertMill, Gravos, Ninos, Galaad
IQ156
-1500Kč, -520Kč, -1čokoláda, - 28000Kč
www.freeair.cz www.rotexelectric.eu www.retrofitcnc.cz
Uživatelský avatar
Hades
Příspěvky: 1196
Registrován: 11. 10. 2012, 10:59
Bydliště: Praha; Mimoň

30. 11. 2014, 6:41

packa píše:takhle jsem to napsal a nejede : samozřejmě když volám jednotlivé led tak je vše ok
#define LED1 1
#define LED2 2
#define LED3 3
#define LED4 4

#define SKUPINA1 (LED1 | LED2 |LED3)
#define SKUPINA2 (LED3 | LED4)
#define PRODLEVA 500
nastaveni skupiny, pokud to nenecházíš...
PORTD = B10101000; // sets digital pins 7,5,3 HIGH
Uživatelský avatar
packa
Příspěvky: 7047
Registrován: 7. 2. 2007, 6:42
Bydliště: Královehradecký kraj

30. 11. 2014, 6:44

jo koukám na to , ale nějak se to tím komplikuje , potřebuju volat asi 12 různých skupin a to od 2 do 6 pinů v různých kombinacích
Odpovědět

Zpět na „Ostatní elektronika“