Picaxe a Rotary Encoder

Odpovědět
Luděk
Příspěvky: 82
Registrován: 22 úno 2016, 08:47

Picaxe a Rotary Encoder

Příspěvek od Luděk »

Zdravím a kdo ví, ať odpoví...
Vezmu jakékoli Arduino, připojím Rotary Encoder a použiji jednoduchý program a šlape jak hodinky. BEZ CHYBY
ALE :
Udělám stejný prográmek - úplně stejný co se týče významu instrukcí - pro Picaxe a on kecá a kecá a kecá,
Máte někdo nějaké vysvětlení proč to Picaxe nezvládá?
Napadla mě prasárnička - vezmu Arduino MINI a jeho výstupy pošlu do Picaxe :-) Ale to už je moc :-)
Hlavně mi neraďte, proč rovnou na celou konstrukci nepoužiju Arduino - no protože ho neumím :-)
Má aplikace je moc složitá a v Basicu to umím :-)
Ale neřešte PROČ chci Picaxe, ale spíš, proč to je tak nespolehlivé.

Když mi někdo naučíte, jak sem vložit kód obou programů, vložím je sem.
Uživatelský avatar
Dex
Administrátor
Příspěvky: 1519
Registrován: 16 úno 2013, 14:26

Re: Picaxe a Rotary Encoder

Příspěvek od Dex »

Na vložení kódu je pátá ikonka zleva nad editačním polem příspěvku ;)
"all your robots are belong to us"
robodoupe.cz
Luděk
Příspěvky: 82
Registrován: 22 úno 2016, 08:47

Re: Picaxe a Rotary Encoder

Příspěvek od Luděk »

Tak toto je kod pro Arduino :

Kód: Vybrat vše

 
 #define outputA 6
 #define outputB 7
 int counter = 0; 
 int aState;
 int aLastState;  
 void setup() { 
   pinMode (outputA,INPUT);
   pinMode (outputB,INPUT);
   
   Serial.begin (9600);
   aLastState = digitalRead(outputA);   }     //ulozi si aktualni pozici  
 
 void loop() { 
   aState = digitalRead(outputA);         	//precte "current" stav vstupu A
   if (aState != aLastState){                	//pokud se vstup A zmenil, je to pulz     
     if (digitalRead(outputB) != aState) {   	//pokud se vstup A lisi od vstupu B,
       counter ++;                           		//tocime se vpravo
     } else {  counter --;    }             		//jinak vlevo
     Serial.print("Position: ");
     Serial.println(counter); } 
   aLastState = aState;                      		//Update noveho stavu vstupu A 
 }

A toto je kod pro PICAXE :

Kód: Vybrat vše

#Picaxe 08M2
#no_data
setfreq M8

symbol LCD	=0
symbol BAUD	=N9600_8
             
symbol outA	= pinc.3
symbol outB	= pinc.4


symbol aState  = b10
symbol aLast   = b11
symbol counter = b12




INIT:		aLast = outA
		counter = 0


START:	aState = outA
		 if aState <> aLast  then 
			if outB <> aState  then inc counter
		 	else dec counter
		   	endif
		   		
	  	   serout LCD,BAUD,($FE,$80,"Counter : ", #counter,"   ")
		 endif
		
		aLast = aState	  
		
		goto START
kolbaba71
Příspěvky: 466
Registrován: 12 říj 2013, 17:35
Bydliště: Praha
Kontaktovat uživatele:

Re: Picaxe a Rotary Encoder

Příspěvek od kolbaba71 »

Má aplikace je moc složitá a v Basicu to umím
Já v Basicu taky celkem umím a tak používám Bascom, což je klon Basicu pro Atmely. A Arduino používám jako redukci na mcu.
Vladimir66
Příspěvky: 385
Registrován: 02 dub 2014, 15:30

Re: Picaxe a Rotary Encoder

Příspěvek od Vladimir66 »

Nepomohlo by Setfreq m16 nebo m32 ?
Luděk
Příspěvky: 82
Registrován: 22 úno 2016, 08:47

Re: Picaxe a Rotary Encoder

Příspěvek od Luděk »

Vladimire, měl jsi pravdu. Při 32MHz Picaxe šlape taky dobře. Díky.
Teda toto forum je moc dobrá věc...
Odpovědět