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 10 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. -
AutorPříspěvky
- Pro reakci na toto téma se musíte přihlásit.