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 7 roky a 11 měsíci.
-
AutorPříspěvky
-
9.12.2016 v 22:46 #9451JerryÚčastník
Zdraví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.