Close

ovládací pin

Úvodní stránka Fórum Hardware Arduino ovládací pin

  • Toto téma obsahuje celkem 4 odpovědi. Do diskuze (3 diskutující) se naposledy zapojil uživatel Profilový obrázekJumbo a poslední změna proběhla před 4 roky a 2 měsíci.
Aktuálně je na stránce zobrazeno 5 příspěvků - 1. až 5. (celkem z 5)
  • Autor
    Příspěvky
  • #7776
    Profilový obrázekJumbo
    Účastník

    Ahoj,

    hraju si s arduinem nano v3, a potřebuji na ovládacím pinu po připojení napětí 5V pracovat s progamem. Vše funguje, jen je problém, že když přiletuji nějaký vodič na pin ze kterého probíhá čtení, tak to vyhodnotí jako HIGH a pokračuje v programu. Taktéž stačí když se kontaktu jen dotknu. Zkoušel jsem i Analogový pin s tím, že nad 220 z maximálních 250 hodnot se to opakovalo. Potřebuji, aby při připojení vodiče se nic nedělo. máte někdo nějaký nápad co s tím? (je to zařízení na spínání a vypínání UPS (nechci aby dobíjela baterii protože na to mám solár a tak chci v případě obnovení napájení ze sítě byla ups vypnuta a pomocí relé se zátěž zpět připojí na síť.
    mám tento kód:

    int vstup1 = 0;
    int vystup1 = 0;
    int vystup2 = 0;
    int stavmenice = 0;

    void setup() {
    // initialize digital pins as an input/output.
    pinMode(2, INPUT);
    pinMode(3, OUTPUT);
    pinMode(4, OUTPUT);
    pinMode(5, OUTPUT);
    pinMode(6, OUTPUT); //KONTROLNÍ PIN PRO ZJIŠTĚNÍ, KDE SE PROGRAM NACHÁZÍ

    digitalWrite(3, HIGH); //POZOR! RELÁTKA SE SPÍNAJÍ HODNOTOU LOW, A ROZEPÍNAJÍ HIGH
    digitalWrite(4, HIGH); //HIGH = RELÉ VYPNUTO
    digitalWrite(5, HIGH);
    digitalWrite(6, HIGH);

    }

    // the loop function runs over and over again forever
    void loop() {
    vstup1 = digitalRead(2);

    //vystup1 = digitalWrite(2);
    //vystup2 = digitalWrite(3);

    if (vstup1 == HIGH) {

    while (stavmenice == 0)
    {

    delay(5000);
    digitalWrite(3, LOW); //na 2 vteřiny se sepne tlačítko napájení na měniči a tím ho zapne. //POZOR! RELÁTKA SE SPÍNAJÍ HODNOTOU LOW, A ROZEPÍNAJÍ HIGH
    delay(2000);
    digitalWrite(3, HIGH); //POZOR! RELÁTKA SE SPÍNAJÍ HODNOTOU LOW, A ROZEPÍNAJÍ HIGH
    stavmenice = 1;
    delay(2000);
    digitalWrite(4, LOW); //zapnutí Nuláku relé pro provoz na UPS //POZOR! RELÁTKA SE SPÍNAJÍ HODNOTOU LOW, A ROZEPÍNAJÍ HIGH
    digitalWrite(5, LOW); //zapnutí Fáze relé pro provoz na UPS

    delay(3000);}}

    else {

    while (stavmenice == 1){
    digitalWrite(4, HIGH); //odpoj zátěž od UPS a přepni na síť //POZOR! RELÁTKA SE SPÍNAJÍ HODNOTOU LOW, A ROZEPÍNAJÍ HIGH
    digitalWrite(5, HIGH); //odpoj zátěž od UPS a přepni na síť
    delay(1000);
    digitalWrite(3, LOW); //Na 2 sekundy „stiskni tlačítko napájení na měniči“ a tím ho vypneme POZOR! RELÁTKA SE SPÍNAJÍ HODNOTOU LOW, A ROZEPÍNAJÍ HIGH
    delay(2000);
    digitalWrite(3, HIGH); //POZOR! RELÁTKA SE SPÍNAJÍ HODNOTOU LOW, A ROZEPÍNAJÍ HIGH
    stavmenice = 0;
    delay(2000);
    }}
    //kontrolní 4 řádky
    // delay(3000);
    //digitalWrite(6, LOW);
    //delay(1000);
    //digitalWrite(6, HIGH);

    }

    #7777
    Profilový obrázekAleš
    Účastník

    Musíš ten vstupní pin uzemnit přes odpor 4k7-10k. To ti zaručí, že na něm bude LOW. Příchozí data teprve vyvolají HIGH úroveň.

    #7778
    BlindPBlindP
    Účastník
    #7779
    BlindPBlindP
    Účastník

    „Pokud odpojíte digitální I/O pin od všech komponentů a čtete na něm digitální hodnotu, může se stát, že bude výstup vracet náhodně LOW nebo HIGH. Může za to citlivost tohoto vstupu, který při měření detekuje i magnetický šum v jeho okolí. Této vlastnosti se občas využívá při generování náhodných hodnot, ale v našem případě je nežádoucí. Kvůli tomu zde máme pull-down rezistor, který zajistí „uzemnění“ digitálního vstupu.“

    https://bastlirna.hwkitchen.cz/arduino-zaklady-4-digital-read-serial/

    #7780
    Profilový obrázekJumbo
    Účastník

    Ok už jsem to vyřešil odporem s led diodou (aspoň vidím, kdy vypadne šťáva.

    Díky za rady :-)

Aktuálně je na stránce zobrazeno 5 příspěvků - 1. až 5. (celkem z 5)
  • Pro reakci na toto téma se musíte přihlásit.