Založen: Sep 19, 2007 Příspěvky: 3697 Bydliště: Praha
Zaslal: út červen 21 2016, 19:27 Předmět:
dj_rizek - dovolím si udělat malý code review:
1)
Definice konstant na začátku - použijte buď C styl
kód:
#define led 11
nebo pro číselné konstanty také ve stylu C++
kód:
const int led = 11;
Takhle se zbytečně alokuje inicializovaná RAM.
2)
Blok uvozený komentářem //PWM má zbytečné složené závorky. Pokud se proměnná value nepoužívá jinde, pak blok má smysl, ovšem s nadefinováním lokální proměnné value. Platí zásada, že proměnné se mají definovat s minimálním oborem viditelnosti. To samé platí pro proměnnou x. Takže:
kód:
// ------------- PWM -------------
{
int value, x;
value = analogRead(analogpin); //precist potenciometr
x = map(value, 0, 1023, 0, 255); //prevod hodnot z potenciometru na PWM rozsah
analogWrite(Ledpin, x);
}
delay(20);
nebo lépe:
kód:
// ------------- PWM -------------
{
int x = map(analogRead(analogpin),
0, 1023, 0, 255); //prevod hodnot z potenciometru na PWM rozsah
analogWrite(Ledpin, x);
}
Založen: Nov 20, 2012 Příspěvky: 1453 Bydliště: Praha
Zaslal: út červen 21 2016, 19:45 Předmět:
frpr666 napsal(a):
Tak jsem zjistil, že arduino si už použilo časovač ke svým účelům...
Arduino používá timer0 vždy ke svým účelům. Timer0 je použit pro funkce millis(), delay() a micros(). Taky je použit pro PWM na pinech 5 a 6. Proto nejde jednoduše měnit frekvence PWM. A taky když se změní předdělička časovače, tak výše uvedené funkce přestanou fungovat správně. Obdobně je použit i Timer1 a Timer2, z hlavy si nepamatuji přesně k čemu. Určitě nějaký používá např. knihovna k ovládání serv.
Založen: Apr 07, 2005 Příspěvky: 711 Bydliště: blízko Třeboně
Zaslal: út červen 21 2016, 19:46 Předmět:
mtajovsky- děkuji za reakci,bohužel muj problem je že ve škole nás učili už v tý době mrtvej jazyk Pascal z něj jsem pak přešel na Delphi, něco málo nás učili assembler, bohužel C šlo mimo a to je ten zádrhel (to je tak když vás učí pitomec kterej víc neumí).
Pokud to píšu,tak právě složitě.
Pokud porovnám tvou upravu,je logická a jasná až na kód:
svetlo = !svetlo;
Co má za funkci "!" ?
Právě se ještě trápím s interním časováním protože je mi vlastne jedno že to nebude přesný ale aby to prostě kolem jedný hodiny vyplo výstup relé.
Shrnutí
Na první pohled to vypadá, že použití funkce millis() je více komplikované než použití delay(). V některých případech je to pravda. Přesto výhodou je, že sketch se stane výrazně flexibilnější. Animace se stanou jednodušší. Komunikování s LCD a souběžné čtení tlačítek bude bez problému. Virtuálně můžete udělat Arduino multitaskové.
https://www.baldengineer.com/millis-tutorial.html
Založen: Nov 10, 2009 Příspěvky: 426 Bydliště: Brno
Zaslal: st červen 22 2016, 9:09 Předmět:
V nekolika konstrukcich mam implementovan ChiBios asi v 6-ti vlaknech ? (6x I/O, 4x I2C, 1x LCD a Keyboard) ... a pokud vim, vse zatim bezi tak jak ma. Je to jednoduche a snadno pochopitelne, s prilozenymi priklady to zmaknes. Funkce DELAY je tam primo zakazana, a je nahrazena jinou, kompatibilni s RTOS. Millis tedy neresis.
Jak uz zde bylo zmineno, o multitasking v pravem slova smyslu se nejedna ... spis o jeho 'simulaci'.
Ahoj, otvírám trochu starší téma.
Potřeboval bych nasimulovat výstup ze snímače otáček, tedy obdélník do cca 15 kHz. Je reálné použít atmegu 328, resp. Arduino UNO coby generátor obdélníku? Frekvenci bych zadával ručně potenciometrem na analog IN, případně přes UART nějak z PC.
Pomocí funkce Delay takto "vysoká" frekvence již vygenerovat nejde, ale mohl by jít nějak využít interní counter např. OCR1A.
Uvažuju správně, nebo to mám rovnou vzdát, protože tudy cesta nevede?
Časy uváděny v GMT + 1 hodina Jdi na stránku Předchozí1, 2
Strana 2 z 2
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.