Prosba o pomoc.

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
IkaSGC
Příspěvky: 4
Registrován: 23 srp 2017, 12:14

Prosba o pomoc.

Příspěvek od IkaSGC » 23 srp 2017, 12:18

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.

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

Re: Prosba o pomoc.

Příspěvek od petan » 23 srp 2017, 18:47

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.

IkaSGC
Příspěvky: 4
Registrován: 23 srp 2017, 12:14

Re: Prosba o pomoc.

Příspěvek od IkaSGC » 23 srp 2017, 19:11

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ží. :(

IkaSGC
Příspěvky: 4
Registrován: 23 srp 2017, 12:14

Re: Prosba o pomoc.

Příspěvek od IkaSGC » 23 srp 2017, 19:13

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() {



}

zbysek
Site Admin
Příspěvky: 125
Registrován: 22 úno 2017, 15:18

Re: Prosba o pomoc.

Příspěvek od zbysek » 23 srp 2017, 19:53

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ší.

IkaSGC
Příspěvky: 4
Registrován: 23 srp 2017, 12:14

Re: Prosba o pomoc.

Příspěvek od IkaSGC » 24 srp 2017, 13:57

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. :)

zbysek
Site Admin
Příspěvky: 125
Registrován: 22 úno 2017, 15:18

Re: Prosba o pomoc.

Příspěvek od zbysek » 24 srp 2017, 14:00

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 :)

Pepino
Příspěvky: 3
Registrován: 24 srp 2017, 16:07

Re: Prosba o pomoc.

Příspěvek od Pepino » 24 srp 2017, 16:13

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);
}
}

zbysek
Site Admin
Příspěvky: 125
Registrován: 22 úno 2017, 15:18

Re: Prosba o pomoc.

Příspěvek od zbysek » 24 srp 2017, 16:39

Protože posilate znak '1' a ne hodnotu 1.
A znak '1' má v ASCII tabulce hodnotu 49 :)

Pepino
Příspěvky: 3
Registrován: 24 srp 2017, 16:07

Re: Prosba o pomoc.

Příspěvek od Pepino » 24 srp 2017, 16:41

A mohu se jeste zeptat jak poslat hodnotu?

Děkuji

Odpovědět

Kdo je online

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