Stránka 2 z 3

Napsal: 16 lis 2017, 23:27
od jura80
To asi bude povícero překvapení.

Dneska jsem zkusil světelný řetízek s potenciometrem regulovatelnou rychlostí...

int del=A0;
const int de=A0;
byte a=2;
int b=3;
int c=4;
int d=5;
int e=6;
int f=7;
int g=8;
int h=9;
int i=10;
int j=11;
int k=12;
int l=13;

void setup()
{
pinMode(a, OUTPUT);
pinMode (b, OUTPUT);
pinMode(c, OUTPUT);
pinMode (d, OUTPUT);
pinMode(e, OUTPUT);
pinMode (f, OUTPUT);
pinMode(g, OUTPUT);
pinMode (h, OUTPUT);
pinMode(i, OUTPUT);
pinMode (j, OUTPUT);
pinMode(k, OUTPUT);
pinMode (l, OUTPUT);

del=0;

Serial.begin(9600);
}

void loop()
{
del=analogRead (de);
del=del/4;

Serial.print("prodleva = " );
Serial.print(del);
Serial.println();

//delay(1000);

digitalWrite(a, HIGH);
delay (del);

digitalWrite(a, LOW);
digitalWrite (b, HIGH);
delay (del);


digitalWrite (b, LOW);
digitalWrite (c, HIGH);
delay (del);

del=analogRead (de);
del=del/4;

digitalWrite (c, LOW);
digitalWrite (d, HIGH);
delay (del);

digitalWrite (d, LOW);
digitalWrite (e, HIGH);
delay (del);

digitalWrite (e, LOW);
digitalWrite (f, HIGH);
delay (del);

del=analogRead (de);
del=del/4;

digitalWrite (f, LOW);
digitalWrite (g, HIGH);
delay (del);

digitalWrite (g, LOW);
digitalWrite (h, HIGH);
delay (del);

del=analogRead (de);
del=del/4;

digitalWrite (h, LOW);
digitalWrite (i, HIGH);
delay (del);

digitalWrite (i, LOW);
digitalWrite (j, HIGH);
delay (del);

del=analogRead (de);
del=del/4;

digitalWrite (j, LOW);
digitalWrite (k, HIGH);
delay (del);

digitalWrite (k, LOW);
digitalWrite (l, HIGH);
delay (del);

digitalWrite (l, LOW);
}

Napsal: 17 lis 2017, 10:58
od LukinoOl
A to jsi psal celý dobrovolně, nebo tě k tomu někdo, pod pohrůžkou násilí, přinutil? :lol:

Napsal: 17 lis 2017, 14:11
od p32
Taky jsem si říkal proč nepoužije možnosti kratších klepanců do klávesnice, např. použít smyčku od - do apod. :wink:

Napsal: 17 lis 2017, 21:42
od Cowley
A podprogramy :)

Ale je to jeho radost a ja mu fandim.

Napsal: 21 lis 2017, 14:07
od ZdenekHQ
mtajovsky píše:

Kód: Vybrat vše

#define PI 3.14         // OK
int muj_index;           // OK
float getValue(void);    // tohle je taky OK
char* Hnusny_Nazev_Pro_Retezec;  // tohle není OK
char pekny_nazev_pro_retezec[20]; // tohle už je lepší
Já jsem zvyklý na Pekny_nazev_pro_retezec, nějak ze zvyku dávám první písmeno velký, v asm to nevadí. Nakonec moje programy většinou nejsou veřejný, tak je to čistě moje věc.

Jenže pak přijde někdo, kdo chce PeknyNazevProRetezec a já jsem v háji, pořád se mně tam pletou ty podtržítka...

Napsal: 21 lis 2017, 16:19
od p32
ta podtržítka :wink:

Napsal: 21 lis 2017, 16:51
od mtajovsky
ZdenekHQ << pokud jsou vaše programy jen vaše, je to (možná) jedno. Pokud na projektu pracuje více vývojářů, je třeba dohodnout kódovací pravidla a ta dodržovat. Jde zejména o přehlednost s snadnost čtení a taky, pokud se čte cizí kód, tak aby se člověk cítil jako doma. Omezuje to chyby z přehlédnutí a nepozornosti. Za sebe musím říct, že míchání kombinace velkých a malých písmen s podtržítky mi dost vadí - až z toho bolí oči a je to velice náchylné na chyby. Když už camel, tak by se velká písmena v názvu měla používat ne jako první písmeno - to nemá opodstatnění, ale jako oddělovač slov, nejčastěji podstatného jména, slovesa a případně přídavného jména, číslovky atd., která jsou složena do jednoho názvu. Sloveso činnosti se obvykle dává na začátek s malým písmenem. Jistě se čte snadněji camel

Kód: Vybrat vše

getFirstItem
než

Kód: Vybrat vše

Getfirstitem
To stejné platí o používání podržítek. A proto je kombinace camel s podtžítky špatná, přináší zbytečně mnoho oddělovacích markerů v názvu a to snižuje čitelnost.

P.S.: existuje jistě mnoho pravidel pro psaní názvů proměnných tak, aby samotný název co nejvíce řekl o co jde. U nás ve firmě, například, dáváme za každý název fyzikální veličiny důsledně suffix, který říká jednotku. Například:

Kód: Vybrat vše

distance_m
velocity_kmph
a podobně. Jeden by nevěřil, co to ušetří koukání do dokumentace a případných chyb a nedorozumění na interfacech modulů.

Napsal: 21 lis 2017, 18:24
od ZdenekHQ
Tak to my se zatím spíš rozcházíme, ale na daleko vyšší úrovni. Teď třeba místo master a slave zavedli duck a duckling či jak to napsali, to je pak teprve mazec...

Asi dost dělají závorky, v asm se nepoužívají vůbec, takže to i jinak vypadá.

Kód: Vybrat vše

	
        mov	 a,P_cyklu
        cjne   a,#Wt_start,Sm_star2          	
Sm_star2:
        jnc	 Sm_star3			;--> prechod do dalsiho MODE

Napsal: 21 lis 2017, 20:59
od FHonza
U nás jsme si kdysi nastavili svůj standard a ten přísně dodržujeme. Kromě "camel" názvů je to i způsob pojmenování lokálních proměnných, formátování (dvě mezery), pojmenování typů a pod. A to ve všech jazycích, ve kterých píšeme (assembler mezi nimi už dlouho není).

Teda kromě lokálních i,j to zůstalo jako památka na Fortran :)

Napsal: 22 lis 2017, 00:23
od ZdenekHQ
Z "ijklmn" mám kopřivku, protože si někteří nějak neuvědomují, že v asm (JSA pro šťouraly) nejsou lokální proměnné. Teda kromě registrů bank, a to velmi omezeně. Já ty procesory obecně beru jako BIOS pro navržené HW, bohužel někdo na tom chce stavět orloj...

Znám vyšší programovací jazyky a třeba oblíbený cyklus typu "for i", ale když mně někdo řekne, že zná 8051, dělal na něm hromadu let a přitom požaduje lokální proměnnou, tak si bohužel myslím svoje...

Napsal: 22 lis 2017, 10:02
od JiriTom
Jak to tady čtu, možná si pohraju taky :) . Asi začít tímhle ?. Nebo doporučíte něco lepšího, nebo z jiného e-shopu ? Díky...

EDIT: hrál jsem si s odkazem, proto tolik úprav... :)

Napsal: 22 lis 2017, 10:29
od FHonza
Jestli ti nevadí čekat, tak to kup na eBay. Je to totéž, ale výrazně levnější. Např. zde

Napsal: 22 lis 2017, 16:47
od mtajovsky
JiriTom << kupte si variantu s paticí a ATmega328 v DIL pouzdře. Má to výhodu přinejmenším v opravitelnosti.
ZdenekHQ píše: ...Asi dost dělají závorky, v asm se nepoužívají vůbec ...
Ony závorky v C jsou velmi podstatným prvkem, který není kvůli čitelnosti, ale jsou integrální součástí syntaxe. Nejen, že mění prioritu operací - to je obvyklé, také určují, co je všechno argumentem funkce, a také někdy říkají, co je daný indetifikátor zač. Jestliže máme funkci s deklarací

void f(void);

tak zápisem f() se ta funkce vyvolá, kdežto samotné f znamená pointer na tu funkci, čili adresu, na které ta funkce začíná. Tento pointer je regulérním pointerem, který lze předat například argumentem jako call-back funkci do jiné funkce.

Rovněž tak:

int *f(char c); je deklarace funkce odevzdávající pointer na int, ale:

typedef int (*F)(char c); je definice nového typu - a sice typu "pointer na funkci, která bere jako argument char a vrací int. Pak:
F f; je alokace pointeru datového typu F v paměti pod názvem f.

A to nemluvím o závorkách deklarovaných jako operátor pro třídu, čímž dostáváme funkční objekt (více nějaká učebnice C++ :) )

Proto úsměvy nad C++ jako jazykem, který to se závorkami nadbytečně přehání, opravdu nejsou na místě.

Napsal: 22 lis 2017, 18:00
od ZdenekHQ
Já naštěstí úsměvem nad závorkama netrpím, nakonec znám třeba Pascal či částečně php, ale na druhou stranu "céčkovský" zápis pro požadovaný asm kód taky může skončit pěkným nedorozuměním. Mám s tím zajímavý zkušenosti...

Napsal: 22 lis 2017, 18:54
od lesana87
ZdenekHQ píše:Asi dost dělají závorky, v asm se nepoužívají vůbec
Jak to, že se nepoužívají vůbec? Znáš vůbec něco jiného než 8051?
AVR:

Kód: Vybrat vše

	ldi R16,(1<<CLKPS2)|(1<<CLKPS1)
Z80:

Kód: Vybrat vše

	and A,#~((mask >> 7) + (mask << 1))
x86:

Kód: Vybrat vše

	mov AX,((XRAMSA * 64) AND 0FE00h) + RAMWS
	mov DL,low(KEYB + 4)
	mov EDX,[TempWins + ECX * 4]
ARM:

Kód: Vybrat vše

	push {R0 - R3}
	ldr R0,=(1<<20)|(1<<19)|(1<<16)|(1<<7)|(1<<8)
	str R0,[R2,#(AIC_SMR + (ID_SYS<<2))]