Stránka 1 z 2

Prosba o pomoc.

Napsal: 23 srp 2017, 12:18
od IkaSGC
Zdravím, jsem nováček a potřeboval bych radu. Mám Arduino NANO a s ním potřebuji spínat relé. Na 7 pinu mám Relé které potřebuji aby se hned po sepnutí napájení seplo, dále pak mám na pinu 5 přiveden 5V impuls a potřeboval bych aby arduino to relé vypnulo pokud se dostane na tento pin impuls delší jak 3s. Jak by jste to napsali ? Poradí někdo ? :) Díky.

Re: Prosba o pomoc.

Napsal: 23 srp 2017, 18:47
od petan
WTF, co je to za název vlákna?? Název je od toho, aby se alespoň z části pochopilo co bude uvnitř!

Já bych to napsal takhle: V setup nastavit výstup na zapnuto. Po stisku tlačítka ( hlídat náběžnou hranu) uložit do nějaké proměnné aktuální čas. Pod tím ve smyčce loop (pokud je tlačítko stisknuto) hlídat, jestli je aktuální čas o více než tři sekundy vyšší než uložený čas. Pokud ano, tak vypnout výstup.

Re: Prosba o pomoc.

Napsal: 23 srp 2017, 19:11
od IkaSGC
Za nadpis se omlouvám, bohužel ho již nemohu změnit. Bohužel netuším jak takový kód napsat, zatím Wiring neumím dost na to abych znal takové příkazy. Teoreticky by stačilo i porovnání pomocí nějakého pokud si pamatuji "pulseIn".

Potřeboval bych najít nějakého dobráka který by byl schopen ten kod napsat tak abych si ho zpětně mohl rozebrat a zároveň ho i použí. :(

Re: Prosba o pomoc.

Napsal: 23 srp 2017, 19:13
od IkaSGC
Dál jsem se zatím nedostal protože žádný kóód v loop mi nefungoval.


const int blinkr = 3;
const int rele = 2;

void setup() {

pinMode (blinkr, INPUT);
digitalWrite (rele, HIGH);
pinMode (rele, OUTPUT);

}

void loop() {



}

Re: Prosba o pomoc.

Napsal: 23 srp 2017, 19:53
od zbysek
Dobrý den, toto je nejprimitivnější řešení, které mě napadlo. Nezkoušel jsem ho (nemám teď na čem otestovat), ale třeba bude fungovat :)

Kód: Vybrat vše

const int blinkr = 3;
const int rele = 2;

boolean lastState = false;
unsigned long onTime = 0; // čas nástupné hrany pulzu

void setup() {
  pinMode (blinkr, INPUT); 
  pinMode (rele, OUTPUT);
   
  digitalWrite (rele, HIGH);
}

void loop() {
  boolean state = digitalRead(blinkr);

  if(state != lastState){ //došlo ke změně
    if(state == HIGH){
      onTime = millis();
    }

    lastState = state;
  }

  if(state == HIGH && millis() - onTime > 3000){
    digitalWrite(rele, LOW);
  }
}
Jistě by to šlo i jinak (přerušení, ...), ale takto je to asi nejpřímočařejší.

Re: Prosba o pomoc.

Napsal: 24 srp 2017, 13:57
od IkaSGC
Děkujíííííí funguje :D

Jestli mohu ještě poprosit trochu vysvětlit funkci boolean :) a unsignet long ..... Četl jsem si o nich ale moc mi to do hlavy neleze.

Ještě jednou Díky. :)

Re: Prosba o pomoc.

Napsal: 24 srp 2017, 14:00
od zbysek
Dobrý den, jsem rád, že funguje :)
Boolean, unsigned long, int, ... to všechno jsou datové typy.
Psal jsem o nich ve článku https://arduino.cz/zakladni-struktury-jazyka-wiring/. Pro vás zajímavá část začíná nadpisem proměnné.

Zkuste si to přečíst a kdyžtak se ptejte :)

Re: Prosba o pomoc.

Napsal: 24 srp 2017, 16:13
od Pepino
Dobrý den, také žádám o pomoc, asi je to hloupé, ale už asi 3 hodiny nemohu najít řešení.
když nahraji do Arduina následující kód a přes okno v seriové lince zadám například 1, program mi po seriové lince vypíše 49 a já nechápu proč, mám nastavenou decimální soustavu.... a stejně, dělalo to na mém programu,tak jsem zkopíroval i tento z nápovědy na arduino.cc a dělá to stále...
Moc děkuji.

int incomingByte = 0; // for incoming serial data

void setup() {
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}

void loop() {

// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();

// say what you got:
Serial.print("I received: ");
Serial.println(incomingByte, DEC);
}
}

Re: Prosba o pomoc.

Napsal: 24 srp 2017, 16:39
od zbysek
Protože posilate znak '1' a ne hodnotu 1.
A znak '1' má v ASCII tabulce hodnotu 49 :)

Re: Prosba o pomoc.

Napsal: 24 srp 2017, 16:41
od Pepino
A mohu se jeste zeptat jak poslat hodnotu?

Děkuji