Stránka 1 z 2

Arduino - zapojení s potenciometrem a diodou

Napsal: 30 pro 2014, 16:10
od arduino
Ahoj, mám A-Uno, a potřebuji jako předlohu program, který by mi umožňoval pomocí potenciometru řídit svit diody (ať už ve smysly 100% svitu, anebo neaktivity, anebo ve smyslu postupného rozsvícení).

Zkoušel jsem na netu najít nějaké předlohy, ale pro tento typ Arduina jsem nikdy nic nenašel. A taky potřebuji poradit, jak připojit diodu - toto je pro jinou verzi, a není mi jasné, kam mám na Unu připojit ten zelený vodič. http://www.itnetwork.cz/images/3391/ard ... schema.png

Děkuji.

Napsal: 30 pro 2014, 16:31
od ross4435897
precti si priklady pro:
analogread
analogwrite

Napsal: 30 pro 2014, 16:31
od jezevec
arduino píše:Ahoj, mám A-Uno, a potřebuji jako předlohu program, který by mi umožňoval pomocí potenciometru řídit svit diody...
Na to jsi si snad pořizoval arduino, aby ses ty programy naučil sám psát, nebo se pletu...?

Napsal: 30 pro 2014, 17:24
od Jirka525
Napiš jakou máš desku a jaký je na ní procesor. Případně pošli schéma. Pak to dáme dohromady.
Jirka

Napsal: 30 pro 2014, 17:26
od arduino
jezevec píše:
arduino píše:Ahoj, mám A-Uno, a potřebuji jako předlohu program, který by mi umožňoval pomocí potenciometru řídit svit diody...
Na to jsi si snad pořizoval arduino, aby ses ty programy naučil sám psát, nebo se pletu...?
Nepopírám, ale prostě když uvidím hotový program, tak se z něj daleko snáz naučím, jak si pak napsat vlastní... ty taky, když jsi začínam, třeba s bastlením, tak jsi určitě nejdřív něco rozebral, a zkusil sis z toho odvodit funkci.

Napsal: 30 pro 2014, 17:48
od jezevec
To platí u bastlení, ale neřekl bych, že i u programování. Tady ti jako začátečníkovy moc nepomohou, pokud nejsou psány jako výukové a bohatě komentované, cizí programy. A stažené hex jsou jako učební úplně k ničemu.
Musíš pochopit, jak procesor pracuje a to se naučíš jen vlastním programováním. Třeba pro začátek jen tlačítkem rozsvítit LEDku.

Napsal: 30 pro 2014, 18:49
od dreamer
Právě těch jednoduchých příkladů je přímo v Arduino IDE poměrně velká spousta (Examples) a velice dobře okomentovaných - jen ti nesmí překážet angličtina. Další spoustu příkladů najdeš přímo na stránkách www.arduino.cc případně zkus www.arduino.cz www.duinozone.cz (dnes stránky nefungují ale ještě před několika dny nebyl problém) případně http://arduino8.webnode.cz/

Napsal: 30 pro 2014, 20:10
od Honza_dy
a) proč nepokračuješ v původním vlákně které si založil?
b) na googlu je velká spousta studijního materiálu nehledě na česky psanou knihu, kterou postoval alkom01.
c) Nejlépe se naučíš, když si program zkusíš modifikovat a koukat co to udělá. Procesoru neublížíš, v nejhorším případě ti překladač vynadá. To na co jsi se ptal je deklarace proměnné, zkus si o tom něco najít. Pokud neovládáš angličtinu alespoň v základech, jsi nahranej. V češtině toho opravdu moc není.
Já jsem taky samouk. Tady je jeden z mých prvních prográmků, kterým jsem se s arduinem seznamoval. Dost poctivě jsem ho okomentoval, tak se na něj koukni a studuj.
P.S. Teď jsem si to s odstupem času taky prošel a je to napsané strašně prasácky :oops:

Napsal: 30 pro 2014, 23:07
od frpr666
Posílám příklad na AnalogRead a knihovnu FlexiTimer2 a Dbg.
Jsou k stáhnutí na http://playground.arduino.cc/Main/LibraryList
Čte hodnotu A0, A1 a zapisuje jako číslo na uart/usb
Odzkoušeno s Ard. mega 2560 :D

Kód: Vybrat vše

// - - - - - - - - - - - - - - - 
// file: analog1.ino
// reading A0, A1 value every second
//
// - - - - - - - - - - - - - - - 

#include <FlexiTimer2.h>
#include <Dbg.h>

#define BREAD(_byte,_bitmask) ((_byte)&(_bitmask))

// Switch on LED on pin 13 each second
volatile uint8_t time;
uint8_t time_ip;
uint8_t time_hf;
uint8_t temp;
uint16_t ad_ch0, ad_ch1;

// - - - - - - - - - - - - - - - 
void flash()
{
  time++;
}

// - - - - - - - - - - - - - - - 
void setup()
{
  pinMode(13, OUTPUT);
  pinMode(0, INPUT);
  pinMode(1, INPUT);

  FlexiTimer2::set(500, flash); // 500ms period
  FlexiTimer2::start();

  Debug.begin(1,9600);
}

// - - - - - - - - - - - - - - - 
void loop()
{
  {
    temp = time;
    time_ip = (~temp) & time_hf;
    time_hf = temp;
  }

  if (BREAD(time_hf,0x01))
  {
    digitalWrite(13, HIGH);
  }
  else
  {
    digitalWrite(13, LOW);
  }
 
  if (BREAD(time_ip,0x01))
  {
    ad_ch0 = analogRead(A0);
	
    ad_ch1 = analogRead(A1);	
	
	dbg("%d\t%d", ad_ch0, ad_ch1);
  }
   
}
// - - - - - - - - - - - - - - - 
// EOF


Napsal: 30 pro 2014, 23:24
od Honza_dy
Paráda, tímhle jsi ho poslal přímo do pekla. Teď už jenom hodit arduino do záchodu a spláchnout.

Napsal: 31 pro 2014, 10:02
od ross4435897
Je to vazne tak tezke?
analogRead()
analogWrite()

Napsal: 31 pro 2014, 10:38
od arduino
To na co jsi se ptal je deklarace proměnné, zkus si o tom něco najít.

Mě nebaví číst tuny sraček, ze kterejch je polovina stejně blbě, když se to dá odbýt pár větama.

Ano, prostě nějak musím nadeklarovat informace, které ta proměnná definuje. Podle toho, co sem odpozoroval, to funguje asi tak, že si pojmenuju port č.5 červená (podle progamu "int cervena = 5 ; //určenie premennej cervena na pin 5") a pak ho (ten odkaz) přiřadím na místo, kde má něco udělat.

Prostě taková substituce, jako u řešení matematických rovnic.

Jen nevím, jak tomu programu mám nabindovat, CO na tom vstupu má hledat. Když tam chci mít např. poťák, co ty diody bude řídit, musím nějak na ten analogový vstup nabindovat, při jaké úrovni (při jaké poloze jezdce poťáku) napětí má sepnout tu diodu. To nevím.

Napsal: 31 pro 2014, 16:54
od Honza_dy
Máš v tom hokej.
Dá se to napsat takto

Kód: Vybrat vše

int cervena = 5; // celociselna hodnota 5 ma od ted prezdivku cervena

void setup()
{
pinMode (cervena, OUTPUT); // nastav pin 5 jako vystup
}
nebo se to dá napsat i takto:

Kód: Vybrat vše

void setup()
{
pinMode (5,OUTPUT); // nastav pin 5 jako vystup
}
tyto dva kódy jsou si rovnocené.

To že si něco pojmenuješ, ještě nic neznamená. Důležité je nastavení ve funci setup().
Ještě jinak. Rozepíšu to pod sebe

int - definice datového typu v tomto případě integer
cervena - přezdívka pod kterou bude toto číslo (promněnná) vystupovat v programu
= rovnítko
5 - číselná hodnota proměnné.

Z toho vyplývá že cervena = 5

Chápeš to trošku?

Co se týče čtení analogového signálu z potenciometru, k tomu slouží právě příkaz analogRead(). Procesor umí číst spojitý signál pouze na šesti pinech, které jsou pevně dané. Kromě toho lze tyto piny použít i jako digitální vstupy a výstupy.
Co který pin znamená je hezky znázorněno na tomto obrázku:
Obrázek
Funkci analogRead musíme pouze říct , ze kterého pinu má číst. To uděláme tak, že název pinu vepíšeme jako parametr do závorek.

Kód: Vybrat vše

 analogRead(A0);
a nebo si ten pin nějak pojmenuj

Kód: Vybrat vše

int potenciometr = A0;

void setup()
{

}

void loop()
{
analogRead(potenciometr);
}
funkce vrátí hodnotu z AD převodníku v rozsahu 0 - 1023. Jak převodník funguje zde popisovat nebudu, o tom si přečti tunu sraček.

Následně musíme nějak rozhodnout kdy se má ledka vlastně ropzsvítit což se dělá podmínkou if. Řekněme, že ledka se rozsvítí v polovině dráhy potenciometru.
Edit: Než jsem do klávesnice vyzvracel svoje myšlenkové pochody, tak se zde objevil semafor. Pokračovat budu na případné přání.

Napsal: 31 pro 2014, 17:08
od arduino
Ahoj, nakonec sem vzal tento příklad:

http://arduino.sk/viewtopic.php?f=3&t=1 ... a4fbfd40c0

a zapojil ho podle tohoto schématu, s použitím A-Nano.

http://img24.cz/images/28113185579979066280.jpg

Je to vše v pořádku? Tlačítko na poruchový stav sem nezapojil, neexsituje. Bude to fungovat?

Napsal: 31 pro 2014, 17:24
od Honza_dy
Snažíš se alespoň trošku přemýšlet, nebo bezhlavě opajcuješ nějaký kód a potom se ptáš jiných jestli to bude fungovat?
Co má semafor společného se čtením polohy potenciometru?