Bargraf
Úvodní stránka › Fórum › Vaše projekty › Arduino › Bargraf
- Toto téma obsahuje celkem 31 odpovědí. Do diskuze (4 diskutující) se naposledy zapojil uživatel
posjirka a poslední změna proběhla před 8 roky a 1 měsícem.
-
AutorPříspěvky
-
9.12.2016 v 22:46 #9451
Jerry
ÚčastníkZdravím myslíte že by to šlo nějak zjednodušit ? Děkuji
byte led[] = {2,3,4,5,6,7,8,9,10,11}; //piny s LED diodami
byte pocet = 10; //počet diod
int rychlostP = 70;
int rychlost = 70;void setup()
{
pinMode(led[0], OUTPUT);
pinMode(led[1], OUTPUT);
pinMode(led[2], OUTPUT);
pinMode(led[3], OUTPUT);
pinMode(led[4], OUTPUT);
pinMode(led[5], OUTPUT);
pinMode(led[6], OUTPUT);
pinMode(led[7], OUTPUT);
pinMode(led[8], OUTPUT);
pinMode(led[9], OUTPUT);
pinMode(led[10], OUTPUT);
pinMode(led[11], OUTPUT);
}void loop()
{
digitalWrite( 2 , HIGH );
delay( rychlostP );
digitalWrite( 3 , HIGH );
delay( rychlostP );
digitalWrite( 4 , HIGH );
delay( rychlostP );
digitalWrite( 5 , HIGH );
delay( rychlostP );
digitalWrite( 6 , HIGH );
delay( rychlostP );
digitalWrite( 7 , HIGH );
delay( rychlostP );
digitalWrite( 8 , HIGH );
delay( rychlostP );
digitalWrite( 9 , HIGH );
delay( rychlostP );
digitalWrite( 10 , HIGH );
delay( rychlostP );
digitalWrite( 11 , HIGH );
delay( rychlostP );
digitalWrite( 2 , LOW );
delay( rychlostP );
digitalWrite( 3 , LOW );
delay( rychlostP );
digitalWrite( 4 , LOW );
delay( rychlostP );
digitalWrite( 5 , LOW );
delay( rychlostP );
digitalWrite( 6 , LOW );
delay( rychlostP );
digitalWrite( 7 , LOW );
delay( rychlostP );
digitalWrite( 8 , LOW );
delay( rychlostP );
digitalWrite( 9 , LOW );
delay( rychlostP );
digitalWrite( 10 , LOW );
delay( rychlostP );
digitalWrite( 11 , LOW );
delay( rychlostP );
digitalWrite( 11 , HIGH );
delay( rychlostP );
digitalWrite( 10 , HIGH );
delay( rychlost );
digitalWrite( 9 , HIGH );
delay( rychlost );
digitalWrite( 8 , HIGH );
delay( rychlost );
digitalWrite( 7 , HIGH );
delay( rychlost );
digitalWrite( 6 , HIGH );
delay( rychlost );
digitalWrite( 5 , HIGH );
delay( rychlost );
digitalWrite( 4 , HIGH );
delay( rychlost );
digitalWrite( 3 , HIGH );
delay( rychlost );
digitalWrite( 2 , HIGH );
delay( rychlost );
digitalWrite( 11 , LOW );
delay( rychlost );
digitalWrite( 10 , LOW );
delay( rychlost );
digitalWrite( 9 , LOW );
delay( rychlost );
digitalWrite( 8 , LOW );
delay( rychlost );
digitalWrite( 7 , LOW );
delay( rychlost );
digitalWrite( 6 , LOW );
delay( rychlost );
digitalWrite( 5 , LOW );
delay( rychlost );
digitalWrite( 4 , LOW );
delay( rychlost );
digitalWrite( 3 , LOW );
delay( rychlost );
digitalWrite( 2 , LOW );
delay( rychlost );
}9.12.2016 v 23:00 #9452Jerry
ÚčastníkVideo
9.12.2016 v 23:14 #9454Jerry
Účastník10.12.2016 v 8:50 #9456Vojtěch Vosáhlo
ÚčastníkŠlo by to zkrátit na pár řádek pomocí foreach a někde bitshiftováním ale foreach by mělo stačit. Doporučuju zkouknout si nějaké ukázky. Na večer můžu přidat i kód.
10.12.2016 v 21:31 #9464Vojtěch Vosáhlo
ÚčastníkEDIT: Není to foreach ale jen FOR, omlouvám se. Doporučuju inspirovat se třeba tady: https://www.arduino.cc/en/Tutorial/ForLoopIteration
11.12.2016 v 0:50 #9465posjirka
Účastníkpřesně jak píše Vojtěch.
1. použij smyčku for a do ni uzavři celý průběh bargrafu pro 1 směr.
2. v setup() má piny vypsané z pole, v loop() už vypsiuješ každý zvláš´t. i tady ti pomůže pole.
3. různě časy spoždění pro 2 směry můžeš nastavit zvlášť po dokončení smyčky
4. máš zmatek v počtu LED v poli (11 ks) a v setup() (12ks)Můžu tě trochu nakopnout správným směrem. Zapiš do programu tyto posloupné funkce:
setup()
smyčka for pro i = 0 až 10
– nastav pinmode pro LED[i]
– nastav LED[i] na LOW
konec smyčkyloop()
smyčka for pro i = 1 až 10
– nastav LED[i] na HIGH
– čekej
konec smyčky
smyčka for pro i = 1 až 10
– nastav LED[i] na LOW
– čekej
konec smyčky
smyčka for pro i = 10 až 1
– nastav LED[i] na HIGH
– čekej
konec smyčky
smyčka for pro i = 10 až 1
– nastav LED[i] na LOW
– čekej
konec smyčkysamozřejmě to jde ještě výrazně zjenodušit, ale je třeba si uvědomit možnosti a funkci jednotlivých příkazů. Pokud budeš chtít ještě o stupínek nahoru, tak můžes definovat proměnnou a která bdue mít hodnoty 1 až 4, ty pojednou v hlavní smyčce loop() a budou značit jednotlivé fáze změny svitu LED:
1 – rozsvi´t 1-10
2 – zhasni 1-10
3 – rozsviť 10-1
4 – zhasni 10-1
na to by byl vhodný select case ….ps. a´t tu nejsem ukamenován: vím, že to jde mnohem jednoušeji, ale když začíná je lepší aby to pochopil jak co funguje, než mu dát hotový kod.
11.12.2016 v 1:15 #9468Jerry
ÚčastníkDíky
16.12.2016 v 20:37 #9587Jerry
ÚčastníkTak přátelé znalci troch jste mě jako začátečníka potrápili za což i díky kopírovat kódy jdou jednoduše. Tak že co třeba takhle ? Pokud to jde ještě jednodušeji pište. Díky.
int timer = 40;
int timer1 = 60;
void setup() {
for (int thisPin = 2; thisPin < 12; thisPin++) {
pinMode(thisPin, OUTPUT);}}
void loop() {
for (int thisPin = 2; thisPin < 12; thisPin++) {
digitalWrite(thisPin, HIGH);
delay(timer);}
for (int thisPin = 2; thisPin < 12; thisPin++) {
digitalWrite(thisPin, LOW);
delay(timer);}
for (int thisPin = 12; thisPin >= 2; thisPin–) {
digitalWrite(thisPin, HIGH);
delay(timer1);}
for (int thisPin = 12; thisPin >= 2; thisPin–) {
digitalWrite(thisPin, LOW);
delay(timer1);}
}16.12.2016 v 21:33 #9592posjirka
Účastníkco je na tom těžkého 🙂 … dělám si srandu každej něják začínal:
/* BARGRAF V1 BY J.POSPISIL 12/2016 */ // promenne byte led[] = {2,3,4,5,6,7,8,9,10,11}; //piny s LED diodami // byte pocet = 10; //počet diod int rychlostP = 70; int rychlostL = 70; void setup(){ // nastaveni vystupu for (int a=0; a <= sizeof(led)-1; a++){ pinMode(led[a], OUTPUT); digitalWrite( led[a] , LOW ); } } void loop(){ // postupne rozsvit 2 - 11 for (int a=0; a <= sizeof(led)-1; a++){ digitalWrite( led[a] , HIGH); delay(rychlostP); } // postupne zhasni 2 - 11 for (int a=0; a <= sizeof(led)-1; a++){ digitalWrite( led[a] , LOW); delay(rychlostP); } // postupne rozsvit 11 - 2 for (int a=sizeof(led)-1; a >= 0; a--){ digitalWrite( led[a] , HIGH); delay(rychlostP); } // postupne zhasni 11 - 2 for (int a=sizeof(led)-1; a >= 0; a--){ digitalWrite( led[a] , LOW); delay(rychlostP); } }
16.12.2016 v 22:30 #9593BlindP
ÚčastníkCykly a podmínky jsou základ každého programovacího jazyka, doporučuji se je naučit. 😉 Pro začátek tady – https://bastlirna.hwkitchen.cz/seriova-komunikace-a-cykly/ A nebo si pod stromeček naděl „Průvodce světem arduina“ – jde stáhnout i jako pdf. 😀 Hodně štěští. BP
16.12.2016 v 23:54 #9596Jerry
ÚčastníkTak přátelé znalci trochu jste mě jako začátečníka potrápili za což i díky kopírovat kódy jdou jednoduše. Tak že co třeba takhle ? Pokud to jde ještě jednodušeji pište. Díky.
int timer = 40;
int timer1 = 60;
void setup() {
for (int thisPin = 2; thisPin < 12; thisPin++) {
pinMode(thisPin, OUTPUT);}}
void loop() {
for (int thisPin = 2; thisPin < 12; thisPin++) {
digitalWrite(thisPin, HIGH);
delay(timer);}
for (int thisPin = 2; thisPin < 12; thisPin++) {
digitalWrite(thisPin, LOW);
delay(timer);}
for (int thisPin = 12; thisPin >= 2; thisPin–) {
digitalWrite(thisPin, HIGH);
delay(timer1);}
for (int thisPin = 12; thisPin >= 2; thisPin–) {
digitalWrite(thisPin, LOW);
delay(timer1);}
}16.12.2016 v 23:56 #9597Jerry
Účastník17.12.2016 v 0:34 #9598Jerry
ÚčastníkPro začátečníky kteří tápou asi jako já, posílám trochu počeštěno protože na Googlu je v některých kódech už taková jazyková bramboračka, že člověk někdy neví jestli je to španělsky nebo tatarsky a není hned poznat jestli je to programový příkaz nebo jenom název proměnné.
int prodleva = 40;
int prodleva1 = 60;void setup() {
for (int ledPin = 2; ledPin < 12; ledPin++) {
pinMode(ledPin, OUTPUT);}}void loop() {
for (int ledPin = 2; ledPin < 12; ledPin++) {
digitalWrite(ledPin, HIGH);
delay(prodleva);}
for (int ledPin = 2; ledPin < 12; ledPin++) {
digitalWrite(ledPin, LOW);
delay(prodleva);}
for (int ledPin = 12; ledPin >= 2; ledPin–) {
digitalWrite(ledPin, HIGH);
delay(prodleva1);}
for (int ledPin = 12; ledPin >= 2; ledPin–) {
digitalWrite(ledPin, LOW);
delay(prodleva1);}
}17.12.2016 v 10:50 #9600BlindP
ÚčastníkPro vkládání kódu doporučuji používat značky CODE:
for(int i = 2; i < 12; i++) { digitalWrite(i, HIGH); delay(prodleva); }
lépe se to čte. Můžes si i napsat vlastní funkci a zpoždění jí předávat jako parametr – https://bastlirna.hwkitchen.cz/uzivatelsky-definovane-funkce-2/ U ledPin- Ti chybí jedno mínus ledPin– – https://www.arduino.cc/en/Reference/Increment BP
EDIT: Ne máš to správně, jen tenhle font to zobrazuje dohromady, další důvod pro používání značek CODE. 🙂
17.12.2016 v 12:37 #9608posjirka
Účastníkto jerry:
měníš zadání … jendou pracuješ s polem, pak chceš přímo řešit piny, je to trochu zmatek. Mám k tomu pár připomínek:
– používat pole jako zadání použitých pinů je velmi vhodné, pokud nepoužíváš čistou řadu čisel, ael třeba některé vynechávaš, nebo jsou na přeskáčku.
– určitě pro vkládání kúodu používej CODE jinak jak píše BlindP budou v tom zmatky. Bohužel je fórum nastaveno trochu neš´tastně a nejde třeba vkládát kod přímo z Arduino IDE „copy for forum“,
– doporučuju používat verzování jednotlivých programů a stejně tak i nauč se popisovat jednotlivé části. Teď ti to možná příjde jako ztráta času. Až budeš mít delší kod a budeš se čas od času k němu vracet budou ti ty komentáře scházet.
– já jsem se vceku brzy naučil používat odsazení vnořených procesů (for(…){}) i když tady to bude určitě z důvodu nepoužití CODE ale hlavně když uzavíráš složené závorky tak je uzavírej né na konci řádku, ale na další řádku ve vzdálenosti od okraje kde je počátek funkce od této závorky (podívej se jak mám uzavřené (for{}). Usnadní to přehled. Sice máš při kliku na závorku podbarvenou i její protikus, ale text je text.18.12.2016 v 22:53 #9640Jerry
ÚčastníkTakhle mi to funguje
int prodleva = 40;
int prodleva1 = 80;void setup() {
for (int ledPin = 2; ledPin < 12; ledPin++) {
pinMode(ledPin, OUTPUT);}}void loop() {
// rozsvítí postupně led 1-10
for (int ledPin = 2; ledPin < 12; ledPin++) {
digitalWrite(ledPin, HIGH);
delay(prodleva);
}
// zhasne postupně led 1-10
for (int ledPin = 2; ledPin < 12; ledPin++) {
digitalWrite(ledPin, LOW);
delay(prodleva);
}
// rozsvítí postupně led 10-1
for (int ledPin = 12; ledPin >=2; ledPin–) {
digitalWrite(ledPin, HIGH);
delay(prodleva1);
}
// zhasne postupně led 10-1
for (int ledPin = 12; ledPin >=2; ledPin–) {
digitalWrite(ledPin, LOW);
delay(prodleva1);
}
}18.12.2016 v 23:22 #9643posjirka
Účastníkuuuauauauauau …. nepoučitelnej.
Nepoužíváš párové značky CODE, takže ten tvůj kod je pro všechny ostatní nepoužitelněj (ztracené — atd.)
Navíc , nevadí ti, že první směr adresuje 10 (2-11, protože máš < 12)pinů a opačný směr 11 (12 – 2 protože máš >=2)
Původní „krása“ řešení přes pole je pryč a pomocí 2 cmosů bych to udělal jednodušeji.
Jde ti o to něco se naučit, nebo jen rozblikat pár ledek ? píšu to proto, že tvoje aktuální řešní je pro jakékoliv změny strašně těžkopádné. Pro začátek dobrý. Pro další vývoj 3- .18.12.2016 v 23:51 #9645Jerry
ÚčastníkKdyž zadám počet pinů 11 tak mi to nekomunikuje s poslední led.
19.12.2016 v 0:01 #9646posjirka
Účastník????????????????:
for (int ledPin = 2; ledPin < 12; ledPin++) {
ledPin = 2, 3, 4, 5, 6, 7, 8, 9, 10, 11for (int ledPin = 12; ledPin >=2; ledPin–) {
ledPin = 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2už chápeš ten rozdíl? ten první příklad ti nevolá pin č. 12 …
Správně by měl být:
for (int ledPin = 2; ledPin <= 12; ledPin++) {
ledPin = 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1219.12.2016 v 0:22 #9648Jerry
Účastníkint prodleva = 40;
int prodleva1 = 80;void setup() {
// nastavení pinů pro led jako OUTPUT
for (int i = 2; i <= 11; i++) {
pinMode(i, OUTPUT);}}void loop() {
// rozsvítí postupně led 1-10
for (int i = 2; i <= 11; i++) {
digitalWrite(i, HIGH);
delay(prodleva);
}
// zhasne postupně led 1-10
for (int i = 2; i <= 11; i++) {
digitalWrite(i, LOW);
delay(prodleva);
}
// rozsvítí postupně led 10-1
for (int i = 11; i >=2; i–) {
digitalWrite(i, HIGH);
delay(prodleva1);
}
// zhasne postupně led 10-1
for (int i = 11; i >=2; i–) {
digitalWrite(i, LOW);
delay(prodleva1);
}
}19.12.2016 v 0:29 #9649Jerry
ÚčastníkNevím jak to sem dát aby to bylo skutečně to co je v kódu. Při kopírování si to dělá co chce po editu taky a po odeslání to napíše nesmysly.
19.12.2016 v 11:19 #9651posjirka
Účastníkje to jednuduché. Když píšeš odpověd tak nad tectovým polem, kde píšeš je sada tlačítek:
B – tučné písmo
/ – kurzíva
lINK – vkladani HTML odkazu
…
…
CODE – pro vložení kódu
UZAVRIT ZNACKY – uzavře párové značky.Funguje to tka, že píšeš normální text: sdfaergasdcargascfWG
Pak chceš vložit kód tak klikneš na CODE (vloží se apostrof), vložíš kod a buď dáš znovu CODE nebo UZAVŘÍT ZNAČKY. Opět se vloží apostrof a kod se ti dá do toho rámčeku a v původním formátu.19.12.2016 v 13:05 #9653Jerry
ÚčastníkDíky moc to mě netrklo. Njn tak příště už to bude snad lepší.
19.12.2016 v 22:12 #9675Jerry
ÚčastníkTak snad už to bude lepší. Dotaz .. v tomhle kódu nepůjde kombinovat výstupy D a A. Jak by to šlo vyřešit ?
int prodleva = 40; int prodleva1 = 80; int prodleva2 = 200; void setup() { // nastavení pinů pro led jako OUTPUT for (int i = 2; i <= 11; i++) { pinMode(i, OUTPUT);} } void loop() { // rozsvítí postupně led 1-10 for (int i = 2; i <= 11; i++) { digitalWrite(i, HIGH); delay(prodleva); } // zhasne postupně led 1-10 for (int i = 2; i <= 11; i++) { digitalWrite(i, LOW); delay(prodleva); } delay(prodleva2); // rozsvítí postupně led 10-1 for (int i = 11; i >=2; i--) { digitalWrite(i, HIGH); delay(prodleva1); } // zhasne postupně led 10-1 for (int i = 11; i >=2; i--) { digitalWrite(i, LOW); delay(prodleva1); } delay(prodleva2); }
19.12.2016 v 23:10 #9676posjirka
Účastníkkod je vložen správně … gratulace. No te´d jsi se dostal do stavu, kdy to takto jednoduše nepůjde. Tak „zpátky na stromy“ a podívej se na ten můj původní kod polem. Analogové piny mají při úpoužití jako digitální čísla 14 (A0) až 19 – (A5).
tady je velmi vhodné použít pole. nemusel bys překopávat počítadlo for, ale stačilo by upravit seznam použitých pinů. Navíc bys jej mohl libovolně rozšiřovat/zužovat bez výrzné změny kodu (prostě bys jen změnil počet hodnot v poli) …19.12.2016 v 23:16 #9677Jerry
ÚčastníkProsím nakopnout víc 🙁 Tady se nějak ztrácím to už jsem zkoušel ale nevím jak definovat OUTPUT ve void setup … myslím pole
19.12.2016 v 23:26 #9679Jerry
ÚčastníkJinak díky za podporu a gratulaci že jsem konečně něco udělal dobře.. zítra to bude cca 20 dní co jsem poprvé viděl ardo.
20.12.2016 v 9:32 #9682BlindP
ÚčastníkSmyčka for – https://www.arduino.cc/en/Reference/For
Kompletní kód – https://www.arduino.cc/en/Tutorial/KnightRider
Jirka už Ti přece ten kód tady napsal.
BP20.12.2016 v 20:14 #9685Jerry
ÚčastníkJá ale teď potřebuji zkombinovat D a A výstupy
20.12.2016 v 20:41 #9686posjirka
Účastníkchlape, chybí ti základy. opravdu je nutné si nejdřív něco nastudovat a pak začít experimenovat. kdybyte led[] = {2,3,4,5,6,7,8,9,10,11}; //piny s LED diodamioužil ten můj kod a upravil :
byte led[] = {2,3,4,5,6,7,8,9,10,11}; //piny s LED diodami
na třeba
byte led[] = {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19}; //piny s LED diodami
tak je to hotové. opravdu ale je třeba vyzkoušet examply a tutoriály než začneš vymýšlet svoje řešení, bez hlubšího pochopení souvislosti to prostě nejde. -
AutorPříspěvky
- Pro reakci na toto téma se musíte přihlásit.