Strana 3 z 3

Re: Program pre Arduino

Napísané: 25 Aug 2022, 09:19
od používateľa maskrtnik01
Matematika je ešte ten lepší príklad (ak sa bavíme o +-*/). Vie tu niekto napísať v assembleri konverziu int/float na textovú reprezentáciu? Neviem ani či to chcem vidieť :D

Je to pravda, niektoré veci sa človek rýchlejšie dozvie na fóre. Na druhú stranu jedna zo základných zručností vývojára je aj vedieť si nájsť veci na internete - nikto nevie všetko.

Re: Program pre Arduino

Napísané: 25 Aug 2022, 10:42
od používateľa pocitujlasku
nikto ti nezakazuje pisat if then else
ja som ale tvor lenivy a tak radsej pouzivam skrateny zapis (ak je to vhodne). sprehladnuje a skracuje to kod. To, ze existuje viac moznosti zapisu, mne to nevadi, ved o tom programovanie je. Roznymi moznostami dosiahnut ten isty vysledok. a ked na nieco nezname v cudzom kode narazim, tak si proste vyhladam co to je. A velakrat mi taketo finty dost pomohli.
ked ti vyhovuje asm, tak si programuj v nom. mne zas vyhovuje, ked mam na vyber.

Re: Program pre Arduino

Napísané: 26 Aug 2022, 08:58
od používateľa McSmekac
maskrtnik01 napísal:
25 Aug 2022, 09:19
Matematika je ešte ten lepší príklad (ak sa bavíme o +-*/). Vie tu niekto napísať v assembleri konverziu int/float na textovú reprezentáciu? Neviem ani či to chcem vidieť :D

Je to pravda, niektoré veci sa človek rýchlejšie dozvie na fóre. Na druhú stranu jedna zo základných zručností vývojára je aj vedieť si nájsť veci na internete - nikto nevie všetko.
ja som ale vývojar není.....som elektrikár aktuálne pracujem na meraní a regulacií kde sa dostávam aj k ochranám na VN,VVN zariadeniam. A kedže sa stále zdokonalujem a chcem vedieť viac tak som sa dal aj okrem toho a programovanie. Keď mám čas tak skúšam. Toto je taký moj projektík na doma detektor LPG a CO2. Neskor pojdem do niečoho viac.

Re: Program pre Arduino

Napísané: 05 Sep 2022, 09:34
od používateľa McSmekac
takze zase sa vraciam k arduinu a bádam ako spravit funckiu return ked pri zmacknuti tlacidla chcem poslat program na zaciatok. Ide o to ze senzor pisti a chcem ho vyresetovat napriklad na 5 minut tlacidlom.

Re: Program pre Arduino

Napísané: 05 Sep 2022, 09:50
od používateľa Mek
V loop() metode kde kontrolujes stav tlacidla, ak bolo stlacene, si odlozis do premennej momentalny cas cez funkciu millis().
V casti, kde ma byt vyvolane pipanie, das if, kde porovnas, ci ubehlo viac ako 5 minut od posledneho casu, ktory si si odlozil.

Re: Program pre Arduino

Napísané: 05 Sep 2022, 10:12
od používateľa misocko
McSmekac, reset tlacitko už arduino obsahuje. Navrat na zaciatok programu nieje riesenim toho co potrebujes. Mal by si si na zaciatok uvedomit ze program v arduine (to co je v loope) bezi stale dookola. Tam sa proste musis vysantit s casmy a ifmy a pomocnymi premennymi. Popis co presne ocakavas a niekto ti mozno poradi ako co najlahsie na to. Ciest bude urcite viacero ale urcite nie navrat na zaciatok programu.

Re: Program pre Arduino

Napísané: 05 Sep 2022, 10:25
od používateľa McSmekac
Viem ze arduino ma reset tlacidlo ale ja chcem dalsie tlacidlo pretoze to bude ulozene v krabicke. Ocakavam od toho to ze LPG,CO2 senzor vyssie co je program ak sa aktivuje a bude pipat tak ked dobehnem a odstranim poruchu chcem aktivovanim tlacidla napriklad vratit program na zaciatok kde by bol cas poviem priklad 10 minut a po tich 10 minut by zase snimal zo senzorov.

Re: Program pre Arduino

Napísané: 05 Sep 2022, 10:33
od používateľa misocko
Kazdy tu prilozeny kod automaticky vypne hukanie ked senzor zaznamena nizsiu hodnotu -ked odstranis poruchu
Este raz, program beha stale dookola, ked zisti co2 huka, ked nie nehuka

Re: Program pre Arduino

Napísané: 05 Sep 2022, 12:46
od používateľa McSmekac
to viem ale ja chcem napriklad po zatlaceni tlacidla aby nabehol cas cca 10 minut kedy ignoruje hukanie

skusil som to nejak takto

if (tlacidlo=digitalRead(2)){
noTone(buzzer);
delay(10000);
return 1;

}
else {
return 0;

Re: Program pre Arduino

Napísané: 05 Sep 2022, 13:14
od používateľa maskrtnik01
Stará známa cesta do pekiel - delay.

Nie je to celé zle, ale treba si zvyknúť nepoužívať delay. Správny postup je používať millis, a premennú kde si zaznačím čas dôležitej udalosti - napríklad stlačenie tlačidla. Ak už ubehlo 10 minút, pozriem či je dôvod húkať, a prípadne húkam. Ak neubehlo, nehúkam.

Dôvod? Ak chceme od MCU jednu jedinú primitívnu vec, možno žiaden. Skoro vždy ale nakoniec chceme viacero vecí. A keď jedno vykonanie loop trvá vďaka delayom sekundy, alebo aj minúty. Tak sa stane, že potom človek nechápe, prečo to na stlačenie tlačidla reaguje iba vo veľmi špecifickom čase. Práve preto, že procesor zabíja čas v delayi, a nemôže riešiť zvyšok loop-u.

Re: Program pre Arduino

Napísané: 05 Sep 2022, 15:47
od používateľa miso156
Tu je riesenie cez jeden pomocny flag sensor_run.
Hned na zaciatku v setupe zapnes senzor a takztiez si do sensor_run poznacis, ze si ho zapol.
Ak senzor zahlasi chybu (alebo aj nemusi) a ty stlacis tlacitko, vypne senzor, poznaci si do sensor_run=false, taktiez si poznaci aktualny cas do premnnej button_press_time a tym opusti if(digitalRead(2) == HIGH) zatvorky.

Hned potom, kedze si dal do senzor_run = false, program zacne neustale skakat do if(senzor_run == false) casti, a teda zacne kontrolovat rozdiel medzi akt. casom a casom ktory si si poznacil. Ak je viac nez 600000ms tak opat zapne senzor a taktiez si poznaci sensor_run = true (senzor beziaci).
Potom uz do if(senzor_run == false) program skakat nebude, teda kym znova nestlacis tlacitko.

Pozn: Funkciu zapni_senzor() a vypni_senzor() si musis spravit, alebo ju uz mas spravenu.
Pozn: Neskusal som to, ale pride mi to ciste riesenie.

Kód: Vybrať všetko


unsigned long button_press_time;
bool sensor_run;

setup() {
  zapni_senzor();
  sensor_run = true;  //nastav flag na senzor zapnuty
}

void loop() {
  
  if(digitalRead(2) == HIGH) {     // ak je tlacitko ON (LOW/HIGH zmen podla zapojenia tlacitka)
    noTone(buzzer);   
    vypni_senzor(); 
    sensor_run = false;     //zmen flag na senzor vypnuty
    button_press_time = millis();    //zapamataj si cas zatlacenia tlacitka
  } 

  if(senzor_run == false)  {  //kontroluj cas (10min interval) len ak je senzor vypnuty
    if( (millis() - button_press_time) > 600000)  {  //ak ubehlo 10min zapni znovu senzor
      zapni_senzor();
      sensor_run = true;  //nastav flag na senzor zapnuty
    } 
  }

}


Re: Program pre Arduino

Napísané: 05 Sep 2022, 19:53
od používateľa pocitujlasku

Kód: Vybrať všetko

unsigned long button_press_time=0;


void loop() {
// tu si mozes dat veci, ktore musia fungovat stale

  if (button_press_time<=millis() {
    continue;
  } 
  // ak je cas mensi ako v premenbej, tak konci a nic za tymto sa nevykona
  
  if(digitalRead(2) == LOW) { 
    noTone(buzzer);   
    button_press_time=millis()+pocet_sekund;
  } // toto mozes dat aj vyssie a kazdym stlacenim predlzis interval o pocet sekund
  
 // a tu si uz das svoj kod, ktory sa vykona az po tom urcenom case
 
pisem z mobilu, tak tam mozu byt nejake tie preklepy :-)

Re: Program pre Arduino

Napísané: 06 Dec 2022, 08:44
od používateľa McSmekac
Zdar chalani vedel by mi niekto poradit ako dostanem program do aplikacie blynk? skúšam všetko a furt nejde. Ide o obyčajnú led zpnutím virtuálneho tlačidla.

#include <OneWire.h>
#include <BlynkSimpleEsp8266.h>
#include <dummy.h>

#define ONE_WIRE_BUS 2

#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPLTli-yrNP"
#define BLYNK_DEVICE_NAME "Ledka"
#define BLYNK_AUTH_TOKEN "GnZFgbsHDS-x1tuARO8birwyzpCmwzHl"

// You should get Auth Token in the Blynk App.

// Go to the Project Settings (nut icon).

char auth[] = "GnZFgbsHDS-x1tuARO8birwyzpCmwzHl";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "AP 2.4 G";
char pass[] = "A123B1234C";

void setup()
{
// Debug console
Serial.begin(9600);
pinMode(2, OUTPUT);
Blynk.begin(auth, ssid, pass);

}

void loop()
{
Blynk.run();

}

// This function will be called every time button Widget
// in Blynk app writes values to the Virtual Pin V3
BLYNK_WRITE(V5) {
int pinValue = param.asInt(); // Assigning incoming value from pin V3 to a variable
if (pinValue == 1) {
digitalWrite(2, HIGH); // Turn LED on.
} else {
digitalWrite(2, LOW); // Turn LED off.
}
}


a vipisuje mi toto

add if0
scandone
state: 0 -> 2 (b0)
state: 2 -> 3 (0)
state: 3 -> 5 (10)
add 0
aid 2
cnt

connected with AP 2.4 G, channel 11
dhcp client start...
ip:192.168.100.72,mask:255.255.255.0,gw:192.168.100.1
pm open,type:2 0

Re: Program pre Arduino

Napísané: 07 Dec 2022, 08:47
od používateľa balu
1. vůbec by nebylo od věci kód vložit takhle :

Kód: Vybrať všetko

#include <OneWire.h>
#include <BlynkSimpleEsp8266.h>
#include <dummy.h>

#define ONE_WIRE_BUS 2

#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPLTli-yrNP"
#define BLYNK_DEVICE_NAME "Ledka"
#define BLYNK_AUTH_TOKEN "GnZFgbsHDS-x1tuARO8birwyzpCmwzHl"

// You should get Auth Token in the Blynk App.

// Go to the Project Settings (nut icon).

char auth[] = "GnZFgbsHDS-x1tuARO8birwyzpCmwzHl";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "AP 2.4 G";
char pass[] = "A123B1234C";

void setup()
{
// Debug console
Serial.begin(9600);
pinMode(2, OUTPUT);
Blynk.begin(auth, ssid, pass);

}

void loop()
{
Blynk.run();

}

// This function will be called every time button Widget
// in Blynk app writes values to the Virtual Pin V3
BLYNK_WRITE(V5) {
int pinValue = param.asInt(); // Assigning incoming value from pin V3 to a variable
if (pinValue == 1) {
digitalWrite(2, HIGH); // Turn LED on.
} else {
digitalWrite(2, LOW); // Turn LED off.
}
}
2. Ideálně nepsat kód jako prase a používat odsazení :

Kód: Vybrať všetko

#include <OneWire.h>
#include <BlynkSimpleEsp8266.h>
#include <dummy.h>

#define ONE_WIRE_BUS 2

#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPLTli-yrNP"
#define BLYNK_DEVICE_NAME "Ledka"
#define BLYNK_AUTH_TOKEN "GnZFgbsHDS-x1tuARO8birwyzpCmwzHl"

// You should get Auth Token in the Blynk App.

// Go to the Project Settings (nut icon).

char auth[] = "GnZFgbsHDS-x1tuARO8birwyzpCmwzHl";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "AP 2.4 G";
char pass[] = "A123B1234C";

void setup()
{
    // Debug console
    Serial.begin(9600);
    pinMode(2, OUTPUT);
    Blynk.begin(auth, ssid, pass);
}

void loop()
{
    Blynk.run();
}

// This function will be called every time button Widget
// in Blynk app writes values to the Virtual Pin V3
BLYNK_WRITE(V5) 
{
    int pinValue = param.asInt(); // Assigning incoming value from pin V3 to a variable
    if (pinValue == 1) 
    {
        digitalWrite(2, HIGH); // Turn LED on.
    }
    else
    {
        digitalWrite(2, LOW); // Turn LED off.
    }
}
Podle výpisu
McSmekac napísal: add if0
scandone
state: 0 -> 2 (b0)
state: 2 -> 3 (0)
state: 3 -> 5 (10)
add 0
aid 2
cnt

connected with AP 2.4 G, channel 11
dhcp client start...
ip:192.168.100.72,mask:255.255.255.0,gw:192.168.100.1
pm open,type:2 0
se program zapsal a funguje, protože konzole vypisuje, co má a BLYNK se k SSID připojil.

A teď důležité otázky :
  • kde se volá BLYNK_WRITE(V5) ?
  • Blynk neznám, ale nemáš náhodou renonc ve V3, V5 ?

Re: Program pre Arduino

Napísané: 07 Dec 2022, 10:55
od používateľa McSmekac
Ahoj blynk je platforma cez ktoru si dokážem zariadenie ako wemos d1 s čipom esp8266 napríklad merať teplotu cez telefón. https://blynk.io/
Ide o to že mám od kolegu aj iný program (meranie teploty) ktorý je na 100% overený a u neho funguje ale mne vipisuje to isté. V aplikácií blynk mi stále ukazuje offline.
Ešte to musím vyskúšať doma lebo neviem či v práci nemáme nejaký firewall na takéto zariadenia.