Arduino uno v3 + servo

Odpovědět
davo
Příspěvky: 2
Registrován: 15 srp 2017, 13:11
Reputation: 0

Arduino uno v3 + servo

Příspěvek od davo » 15 srp 2017, 13:17

zdravym vas

potreboval by som poradit.....
snažim sa vytvorit zariadenie ktore obsahuje arduino nano v3, servo motor a tlačitko.
na stranke arduino.cz som našiel priklad na ošetrenie tlačitka debounce. trochu som ho prerobil a vzniklo to že ak je stlačene tlačitko servo sa pohne do druhej polohy ak nie, vrati sa do prvej polohy. vyzera to takto :

Kód: Vybrat vše

/*
Debounce
Pokaždé, když se vstupní pin změní z LOW na HIGH 
(například kvůli stlačení tlačítka), 
výstupní pin je přepnut z LOW na HIGH nebo naopak.
Mezi přepnutími je minimální prodleva, 
která slouží pro ošetření zákmitů (debouncing) obvodu.

Obvod:
* LED připojena od pinu 13 k zemi 
* tlačítko připojené od pinu 2 k +5V
* 10 kΩ rezistor připojen od pinu 2 k zemi

* Poznámka: Na většině Arduin je LED
k pinu 13 již připojena, takže k tomuto příkladu už další 
komponenty nebudete potřebovat.

vytvořeno 21. listopadu 2006
autorem David A. Mellis
upraveno 30. srpna 2011
Limor Fried
upraveno 28. prosince 2012
Mike Walters

Příklad tohoto kódu je veřejnou doménou.

http://www.arduino.cc/en/Tutorial/Debounce
*/
#include <Servo.h> 
 Servo myservo;  // create servo object to control a servo 
// konstanty použité k nastavení čísel pinů se nezmění:
const int buttonPin = 11; // číslo pinu tlačítka
// const int ledPin = 13; // číslo pinu LED
 int pos = 0;    // variable to store the servo position 
// Proměnné se změní:
// int ledState = HIGH; // současný stav výstupního pinu
int buttonState; //nejnovější hodnota načtená ze vstupního pinu
int lastButtonState = HIGH; // předchozí hodnota načtení ze vstupního pinu

// Následné proměnné jsou typu long, jelikož čas měřený v milisekundách se 
//rychle změní na větší číslo, jež nemůže být uloženo v int
long lastDebounceTime = 0; // čas posledního změny výstupního pinu
long debounceDelay = 50; // čas debounce prodlevy; pokud výstup bliká, 
                                            //je potřeba čas „zvětšit“

void setup() 
{
   myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
  
  pinMode(buttonPin, INPUT); 
  
   Serial.begin(9600);
}
void loop() {
                                                                                                         // Stav spínače přiřaďte do místní proměnné:
    int reading = digitalRead(buttonPin);
    
                                                                                                         // Zkontroluje, zda-li jste stlačili tlačítko
                                                                                                   // (tj. že vstup se z LOW změnil na HIGH), a od posledního zmáčknutí jste čekali
                                                                                                    // dostatečně dlouho na to, aby byl veškerý šum ignorován:
    
                                                                                                // Pokud se spínač změnil kvůli šumu nebo stlačení:
    if (reading != lastButtonState) {
                                                                                                // upravte proměnou lastDebounceTime
        lastDebounceTime = millis();
    }
    
    if ((millis() - lastDebounceTime) > debounceDelay) {
                                                                                               // Ať už je načtená hodnota jakákoliv, byla tam déle než debounce prodleva, 
                                                                                               // berme ji tedy jako aktuální stav:
        
                                                                                               // Pokud se stav tlačítka změnil:
        if (reading != buttonState) {
            buttonState = reading;
          
                                                                      
            if (buttonState == HIGH) {
                 myservo.write(92);
            }
              if (buttonState == LOW) {
                 myservo.write(150);
            }
        }
    }
    
  

    
                                                                                                // načtené hodnoty uložte. V příští smyčce bude označeno jako lastButtonState:
    lastButtonState = reading;
}
potreboval by som, aby po stlačeni tlačitka servo prešlo z prvej polohy do druhej polohy a ostalo tam. dalšie stlačenie ho vrati do prvej polohy a ostane tam a takto dookola
mohol by mi niekto prosim poradit?


dakujem s pozdravom Dávid

petan
Příspěvky: 358
Registrován: 23 črc 2017, 10:19
Reputation: 0
Kontaktovat uživatele:

Re: Arduino uno v3 + servo

Příspěvek od petan » 15 srp 2017, 19:39

Tento kód:

Kód: Vybrat vše

if (buttonState == HIGH) {
 myservo.write(92);
}
if (buttonState == LOW) {
myservo.write(150);
}

...nahraď tímto:

Kód: Vybrat vše

if (buttonState == HIGH) {
//náběžná hrana - stisknuto tlačítko
 if (pos== 92) {
 //pokud je v pozici 92, tak nastav 150
  pos=150;
 }
 else{
 //pokud je v jiné pozici než 92, tak nastav 92
  pos=92;
 }
}

myservo.write(pos);	//nastav servo

Doporučuji mrknout na článek Kusy kódu k Arduinu, kde se dozvíš, jak funguje sledování náběžné hrany i debouncer.

davo
Příspěvky: 2
Registrován: 15 srp 2017, 13:11
Reputation: 0

Re: Arduino uno v3 + servo

Příspěvek od davo » 16 srp 2017, 18:38

funguje to...
zistil som že ľudia ako ja máju svoj názov "lepič kódu" :D
Ďakujem pekne za pomoc :)

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 6 hostů