Stránka 2 z 27
					
				Re: Mini CNC osa Z
				Napsal: 19 kvě 2019, 20:06
				od kiRRow
				LEDse ti nerozsvítí, protože neukládáš do proměnné, kterou testuješ, aktuální pozici motoru.
			 
			
					
				Re: Mini CNC osa Z
				Napsal: 19 kvě 2019, 20:14
				od Hanz
				aktuální pozice motoru      int pos = 0;           //proměnná obsahující pozici motoru (úhel natočení) 
je to tak ?
			 
			
					
				Re: Mini CNC osa Z
				Napsal: 19 kvě 2019, 22:27
				od gilhad
				Neni. Podívej se, co tam skutečně děláš:
Do pos pri deklaraci priřadíš nulu, potom v loopu (aniž bys ji jakkoli měnil) ji porovnáš s nulou (a překvapivě je ta nula v ní menší, nebo rovná) a pak ji porovnáš se 180 (a zase je ta nula v ní menší, nebo rovná). Nikde ji neměníš, takže je pořád nula, bez ohledu na cokoli dalšího.
do proměnné led1 přiřadíš 13, v setupu pomocí ní nastavíš pin 13 jako OUTPUT, pak do ní v loop dvakrát přiřadíš true (což je tuším 1) protože pos je pořád nula a tak vždy proběhne stejnou cestou v ifu.
Pin 13 (často má připojenou led na Arduinu) v setupu nastavíš na OUTPUT (hodnotu mu nezadáš, ale defaultně to je 0) a dál už ho neměníš. Protože bez dalšího nastavování je na něm 0, tak připojená LEDka pochopitelně nesvítí.
Pin 12 přesně to samé.
v loop do serva vložíš nulu (myservo.write(0) ) a po 1.25s do něj zapíšeš 180 a po 1s to zase zopakuješ a tak pořád dokola. Nikde nezjišťuješ, v jaké je pozici, ale můžeš si být celkem jistý, že minimálně v druhém a všech dalších průchodech loop při vyhodnocování prvního ifu NENÍ v nule a při vyhodnocování druhého NENÍ ve 180 (protože Arduino udělá 16 000 000 instrukcí za sekundu a servo se z jedné pozice do druhé přesouvá docela dlouho).
Takže když to shrnu 
 - pos nijak nesouvisí s pozicí serva a celou dobu je nula a nemění se
- led1 z 13 rychle změníš na 1, ale ta hodnota nijak nesouvisí s žádnou ledkou, to samé led2
- servu posíláš nějaké příkazy, ale jak na ně reaguje nijak nezjišťuješ
- piny 13 a 12 nastavíš jako výstupní, ale neposíláš na ně nikdy nikde žádnou hodnotu, nemají tedy důvod se nějak měnit a pokud na ně připojíš svítivé diody proti zemi, tak nemají důvod se rozsvěcet
 
			
					
				Re: Mini CNC osa Z
				Napsal: 20 kvě 2019, 11:38
				od kiRRow
				Zastav se a popřemýšlej nad tím. Začal bych tímhle :
Jak se arduino vůbec dozví, že servo reaguje na jeho příkazy a že se natočilo do požadované pozice ?
Chci aby arduino vědělo v jaké přesně pozici je servo, nebo mi stačí vědět jestli je na jednom konci, nebo na druhém ?
			 
			
					
				Re: Mini CNC osa Z
				Napsal: 20 kvě 2019, 18:23
				od Hanz
				trochu jsem nad tím přemýšlel a díky za vaše nakopávání, začal jsem od začátku  jen s jednou led ať svítí  od polohy 0 do polohy 10. Povedlo se sketch je tady :
Kód: Vybrat vše
#include <Servo.h> //zahrnutí knihovny pro ovládání servo motoru
Servo myservo; //každý motor má svou instanci třídy Servo
int pos = 0; //proměnná obsahující pozici motoru (úhel natočení)
int led1 = 11; //první dioda
void setup()
{
myservo.attach(9); //tento motor je připojen na pin 9
pinMode(led1, OUTPUT); //nastavení funkce led1
}
void loop()
{
  for(pos = 0; pos <= 180; pos += 1) //je od úhlu 0 do úhlu 180
  {
    myservo.write(pos);  //natočení motoru na aktuální úhel
    delay(10);           //chvilka čekání než se motor natočí
  
    if (pos>5)
    digitalWrite(led1,LOW);
    if(pos<5)
    digitalWrite(led1, HIGH);
 
  } 
  for(pos = 180; pos >= 0; pos -= 1) //je od úhlu 180 zpět do úhlu 0
  {
    myservo.write(pos);  //natočení motoru na aktuální úhel
    delay(10);           //chvilka čekání než se motor natočí
  }
  }
teď vyzkouším ať se rozsvítí i led2, kterou přidám doufám, že se mi to podaří !!! mám velkou radost
 
			
					
				Re: Mini CNC osa Z
				Napsal: 20 kvě 2019, 18:58
				od gilhad
				Ještě dávej kód do tagů code (to je takový to </> tlačítko nahoře) a bude to rázem líp čitelné 
 
(by 
admin kódy jsem do těch tagů přidal 

)
 
			
					
				Re: Mini CNC osa Z
				Napsal: 20 kvě 2019, 19:17
				od Hanz
				přiřadil jsem i led2 a povedlo se, sic po pár pokusech, ale funguje to ! je to bomba !!! tohle mě vážně vzalo, maličkosti, ale potěší !!! Díky všem co jste mi radili jak dosáhnou cíle. Avšak, je tento sketch tak, jak má být napsaný ? nebo jde něco upravit ? a jak ? Díky Hanz
Kód: Vybrat vše
#include <Servo.h> //zahrnutí knihovny pro ovládání servo motoru
Servo myservo; //každý motor má svou instanci třídy Servo
int pos = 0; //proměnná obsahující pozici motoru (úhel natočení)
int led1 = 11; //první červená led
int led2 = 10; //druhá zelená led
void setup()
{
myservo.attach(9); //tento motor je připojen na pin 9
pinMode(led1, OUTPUT); //nastavení funkce led1
pinMode(led2, OUTPUT); //nastavení funkce led2
}
void loop()
{
  for(pos = 0; pos <= 180; pos += 1) //je od úhlu 0 do úhlu 180
  {
  myservo.write(pos);  //natočení motoru na aktuální úhel
    delay(15);           //chvilka čekání než se motor natočí
  
  if (pos>5)
    digitalWrite(led1,LOW);
  if(pos<5)
    digitalWrite(led1,HIGH);
  } 
  
  for(pos = 180; pos >= 0; pos -= 1) //je od úhlu 180 zpět do úhlu 0
  {
  myservo.write(pos);  //natočení motoru na aktuální úhel
    delay(15);           //chvilka čekání než se motor natočí
    
  if (pos<175)
    digitalWrite(led2,LOW);
  if(pos>175)
    digitalWrite(led2,HIGH);  
  }
  }
 
			
					
				Re: Mini CNC osa Z
				Napsal: 21 kvě 2019, 01:23
				od gilhad
				Používej ten CODE tag, ať se to dá číst
- Pokud dělá co má, tak je asi napsaný "dost dobře" na to aby šel použít
- Cokoli jde upravit, nebo napsat líp - může to být kratší, rychlejší, univerzálnější, lépe využívat použitý HW, být přenositelnější, lépe komentované, méně přeplácané, ... - akorát to nikdy nebude všechno z toho naráz, protože některé ty požadavky jdou proti sobě, takže záleží na volbě kritérií - a vždy si můžeš zvolit (a odůvodnit), jinou sadu kritérií a podle ní to upravit a "vylepšit"
Pravda je, že tady je ke zlepšování prostoru ještě dost a taky že záleží na tom, zda a na jaké úrovni to chápeš a co například je pro tebe "přehledné  a jasné" a co naopak "příliš ukecané a rozplizlé" ....
Já bych rozhodně nepsal konstrukce typu
Kód: Vybrat vše
  if (pos<175)
      digitalWrite(led2,LOW);
  if(pos>175)
      digitalWrite(led2,HIGH); 
// a když je to přesně 175, tak to necháme v předchozím stavu
ale spíš
Kód: Vybrat vše
  if (pos<175) {
      digitalWrite(led2,LOW);
  } else {
      digitalWrite(led2,HIGH); 
   };
a nebo kratší
stejně jako dávám přednost zápisu
Kód: Vybrat vše
  for (pos = 180; pos >= 0; pos--) {  //je od úhlu 180 zpět do úhlu 0
      .....
   };
před 
Kód: Vybrat vše
for(pos = 180; pos >= 0; pos -= 1) //je od úhlu 180 zpět do úhlu 0
{
....
};
Pokud to jen natáčí to servo a svítí těma diodama, tak to takhle třeba funguje, ale pokud bych do toho chtěl nějak zasahovat, tak bych se rozhodně vyhnul loop() trvající řadu sekund a blokující pomocí delay() a dal bych přednost neblokující loop() trvající pár milisekund max, aby to mohlo reagovat i na nějaké řízení třeba, nebo obecně dělat něco jiného užitečného. Například něco ve smyslu:
Kód: Vybrat vše
#include <Servo.h> //zahrnutí knihovny pro ovládání servo motoru
Servo myservo; //každý motor má svou instanci třídy Servo
int pos = 0; //proměnná obsahující pozici motoru (úhel natočení)
int led1 = 11; //první červená led
int led2 = 10; //druhá zelená led
unsigned long currentMillis, lastPosMillis;
int smer; // +1 dopředu, -1 dozadu
void setup(){
    myservo.attach(9); //tento motor je připojen na pin 9
    pinMode(led1, OUTPUT); //nastavení funkce led1
    pinMode(led2, OUTPUT); //nastavení funkce led2
    pos = 0;
    smer = 1;
    currentMillis=millis();
    lastPosMillis=currentMillis;
    digitalWrite(led1, pos<5);
    digitalWrite(led2, pos>175);
    myservo.write(pos);
}
void loop() {
    currentMillis=millis();
    //  tady můžu řešit třeba čtení tlačítek, nebo další zajímavé věci, co se dějí průběžně
    
    if (currentMillis - lastPosMillis >= 15 ) {
        lastPosMillis=currentMillis;
        pos += smer; // další krok serva správným směrem
        if (pos <1 ) {
           smer = 1;
           pos=0;  // pro jistotu, ale ono to není nutné, pokud s pos nehýbu i jinde
         };
         if (pos > 179 ) {
             smer = -1;
             pos=180;  // pro jistotu, ale ono to není nutné, pokud s pos nehýbu i jinde
         };
        digitalWrite(led1, pos<5);
        digitalWrite(led2, pos>175);
        myservo.write(pos);
    }; // if ( currentMillis - lastPosMillis >= 15 )
    
    //  a tady taky můžu řešit co chci
}
 
			
					
				Re: Mini CNC osa Z
				Napsal: 22 kvě 2019, 19:47
				od Hanz
				natočil jsem jak ledky blikají v koncových polohách, tak se mrkněte.
odkaz : 
https://www.youtube.com/watch?v=pI9DIUj ... e=youtu.be
nápad s tlačítkem se mi líbí, něco bych se zase naučil a použít tlačítko jako "start/stop" je pro mě výzva ! díky
 
			
					
				Re: Mini CNC osa Z
				Napsal: 28 kvě 2019, 19:40
				od Hanz
				vrátil jsem se k původnímu dotazu, tedy zobrazování polohy serva osy Z u mini cnc pomocí led. A nalezl odkaz na sketch, který jsem aplikoval a který funguje. Jenom jsem musel použít druhém Arduino, protože nevím jak sketch přidat do původního ?! odkaz zde : 
https://randomnerdtutorials.com/monitor ... d-arduino/. Vyzkoušel jsem taky variantu pomocí spínače / v mém případě kontaktu ze staré dvd mechaniky /, který jsem umístil na osu Z. Kontakt spíná napájení pro 5V relátko M4-5H a s pomocí jeho kontaktů se led rožínají - zhasínají tak, jak má napájení cívka.Taky funguje - odkaz na video : 
https://www.youtube.com/watch?v=Oi70rBmHqx4&t=50s
No a program,který je na prvním videu je fajn po úpravě od gilhada, ale bohužel zatím taky nevím, jak ho napasovat do sketche, aby to běželo. Díky za nápovědu