vidlak
Vytvořené odpovědi
-
AutorPříspěvky
-
JardaL
ÚčastníkPoužívám tento program. Ping funguje ale modbus neodpovídá
*/
#include <EtherCard.h>
#include <Modbus.h>
#include <ModbusIP_ENC28J60.h>//Modbus Registers Offsets (0-9999)
const int SENSOR_IREG = 0;
//Used Pins
const int sensorPin = A0;//ModbusIP object
ModbusIP mb;long ts;
void setup() {
// The media access control (ethernet hardware) address for the shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// The IP address for the shield
byte ip[] = { 192, 168, 80, 10 };
//Config Modbus IP
mb.config(mac, ip);// Add SENSOR_IREG register – Use addIreg() for analog Inputs
mb.addIreg(SENSOR_IREG);ts = millis();
}void loop() {
//Call once inside loop() – all magic here
mb.task();//Read each two seconds
if (millis() > ts + 2000) {
ts = millis();
//Setting raw value (0-1024)
mb.Ireg(SENSOR_IREG, analogRead(sensorPin));
}
}BlindP
ÚčastníkCykly a podmínky jsou základ každého programovacího jazyka, doporučuji se je naučit. 😉 Pro začátek tady – https://bastlirna.hwkitchen.cz/seriova-komunikace-a-cykly/ A nebo si pod stromeček naděl „Průvodce světem arduina“ – jde stáhnout i jako pdf. 😀 Hodně štěští. BP
posjirka
Účastníkco je na tom těžkého 🙂 … dělám si srandu každej něják začínal:
/* BARGRAF V1 BY J.POSPISIL 12/2016 */ // promenne byte led[] = {2,3,4,5,6,7,8,9,10,11}; //piny s LED diodami // byte pocet = 10; //počet diod int rychlostP = 70; int rychlostL = 70; void setup(){ // nastaveni vystupu for (int a=0; a <= sizeof(led)-1; a++){ pinMode(led[a], OUTPUT); digitalWrite( led[a] , LOW ); } } void loop(){ // postupne rozsvit 2 - 11 for (int a=0; a <= sizeof(led)-1; a++){ digitalWrite( led[a] , HIGH); delay(rychlostP); } // postupne zhasni 2 - 11 for (int a=0; a <= sizeof(led)-1; a++){ digitalWrite( led[a] , LOW); delay(rychlostP); } // postupne rozsvit 11 - 2 for (int a=sizeof(led)-1; a >= 0; a--){ digitalWrite( led[a] , HIGH); delay(rychlostP); } // postupne zhasni 11 - 2 for (int a=sizeof(led)-1; a >= 0; a--){ digitalWrite( led[a] , LOW); delay(rychlostP); } }
Jerry
ÚčastníkTak přátelé znalci troch jste mě jako začátečníka potrápili za což i díky kopírovat kódy jdou jednoduše. Tak že co třeba takhle ? Pokud to jde ještě jednodušeji pište. Díky.
int timer = 40;
int timer1 = 60;
void setup() {
for (int thisPin = 2; thisPin < 12; thisPin++) {
pinMode(thisPin, OUTPUT);}}
void loop() {
for (int thisPin = 2; thisPin < 12; thisPin++) {
digitalWrite(thisPin, HIGH);
delay(timer);}
for (int thisPin = 2; thisPin < 12; thisPin++) {
digitalWrite(thisPin, LOW);
delay(timer);}
for (int thisPin = 12; thisPin >= 2; thisPin–) {
digitalWrite(thisPin, HIGH);
delay(timer1);}
for (int thisPin = 12; thisPin >= 2; thisPin–) {
digitalWrite(thisPin, LOW);
delay(timer1);}
}posjirka
Účastníkto bude tím, že cela zprava konci bitem 1. potom ve smycce se to už nenuluje.
zkus použít zpravu = „2“fidos
Účastníkjeste mi neni jasna jedna vec, a to ze, po prvnim signalu na reciever se zapne ledka na pinu 13 a sviti porad, i kdyz se ir led vypne. Pak se pri pohybu zase ir ledka zapne a vypne atd. Ale na pinu 13 ledka sviti porad, od prvniho prijmuti signalu…
posjirka
Účastníkví bůh … já tam radši odpor aspo¨n 100R dávám…
fidos
Účastníkon tam ale na instrucables odpor nema, myslis ze bych moh tim odpalit nejake obvody na vysilaci? Ir ledka ale blika – i kdyz nevim ,jestli blika tak jak ma no.
Aleš
ÚčastníkDivím se, že u tohoto:
http://arduino-shop.cz/arduino/1005-arduino-bluetooth-modul-hc-05-1427822941.html
také nenapsal, že je to WiFi, když to běží na 2,4GHz 🙁ArduXPP
ÚčastníkNení to wifi karta, ale zařízení které umožňuje komunikaci přes 2.4 GHz.
Jedná se o nRF24L01 a nechápu proč to tam prodejce nenapíše.
Na vlastních stránkách má http://navody.arduino-shop.cz/navody-k-produktum/arduino-wifi-modul-nrf24l01.html a píše tam, že “ Je ale nutné zdůraznit, že není možné se pomocí modulu nRF24L01 připojit na domácí síť WiFi“ .Jestli znamena Wifi ještě něco jiného než jen název pro technologii wifi, tak pak by měl prodejce upozornit co myslí, ale v popisu píše, že se jedná o nRF24L01.
posjirka
Účastníkvezmu to od konce.
Test LCD funguje tak, že že ho nahraješ do arduina, otevřeš si v Arduino IDE serial monitor a píšeš, co chceš aby se ti zobrazilo na LCD.
Občas tam bývá chyba bu´d ve špatně nsatvené rychlosti komunikace, nebo nemáš zapnuté „new line“ a program ti nedetekuje správně to co jsi psal.K tomu hlavnímu programu.ukážu ti část programu a musí ti to být jasné:
// nastaveni pinu displeje LiquidCrystal lcd(8, 9, 4, 5, 6, 7); #define davkovaniPelet 2 //davkovani pelet snek #define spirala 3 //zapalovaci spirala #define ventilator 5 //ventilator #define alarm 6 //signalizace poruchy #define kotlovyTermostat 8 //kotlovy termostat
používáš ty samé piny jak pro relé tak pro komuniakce i s LCD. to nejde. musíš použít každý zvláš´t. Mě to trklo až když si napsal, že ti cvakají relátka 🙂
johnyhol
ÚčastníkTo posjirka: po připojení relé jsem zjistil, že mi to při jakýmkoliv zápisu(LCD) do smyčky hází poruchu a relé cvakají jako o život. Takže tam je asi problém. Jinak odpověď na otázku: `předpokládám, že se ti ve smyčce nic nezobrazuje a zobrazí se tit o až op sepnutí termostatu. („FOTOBUNKA“).
Vidím tu problém ten, že ve smyčce LOOP() není žádná prodleva pro LCD a tak když se nic nedej neustále se maže a zobrazuje LCD.`
je, že to nikdy nic nezobrazilo, jenom hodnotu ze setupu: „NAST.VSTUPY/VYST“.Ještě mě napadlo udělat to zobrazování pomocí funkce „SerialDisplay“ z příkladů v Arduino IDE. (tzn. zobrazovat už vytvořený popisy jednotlivých stavů ze seriový linky) Zkoušel jsem to tedy zakompilovat do kódu, ale to taky nic nedělalo. (nezobrazovalo) Pak jsem tedy zkusil udělat test přímo v příkladu z IDE, ale tam to taky nefunguje. Nechápu to! Máte s tím někdo zkušenosti?
Tady je ta zkouška:// include the library code: #include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(8, 9, 4, 5, 6, 7); void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); // initialize the serial communications: Serial.begin(9600); } void loop() { Serial.println("TEST ZOBRAZENI"); // when characters arrive over the serial port... if (Serial.available()) { // wait a bit for the entire message to arrive delay(100); // clear the screen lcd.clear(); // read all the available characters while (Serial.available() > 0) { //lcd.setCursor(0, 0); // display each character to the LCD lcd.write(Serial.read()); } } }
Díky všem za reakce!
posjirka
Účastníkotázka jak dlouhé záznamy a kolik záznamů chceš používat.
Pokud to bude 1-2 do 10-20s tak se to dá vyřešit jinak než přes arduino:
https://www.postavrobota.cz/Modul-nahravani-zvuku-ISD1820-10s-reproduktor-d88.htm
pro spuštění můžeš místo RFID čtečky použít konektor. Vem si konektor třeba 9pinový cannon.
1.pin bude zem a máš možnosti spínat nezávisle 8 modulu (co pin to PLAY 1 modulu)Dřív jsem dělali takový věci jako audio pamě´t s EEPROM. Ve výsledku šlo o scilátor, posuvný registr, pamě´t a ADC/DAC převodík (většinou 4 bitový). ten modul nohoře to ale už umí a nestojí moc.
Při tomhle řešení ušetříš programování arduina, komunikaci s RFID, moduly MP3, SD kartu atd.
Pokud budeš chtít jít do arduina tak počítej s:
– Arduino (100-500 kč podle typu a místa nákupu)
– mp3 modul (250 kč– sd karta (asi nějákou doma najdeš ale jinak 100-200 kč)
– čtečka RFID ( 150 – 200 kč)
– tokeny (kus 10-15 kč)
– zesilovač + repro (cca 100 kč)
– zdroj, atd bude podobné pro jaké koliv řešení
k tomu hodiny hledání po internetu, dotazy, programování ,….steebe
ÚčastníkDobrý den – již je vyřešeno. Děkuji.
posjirka
Účastníkmáš pravdu … tech vlastních znamků je max 8 (0-7).
Delay taky nemám rád, ale tady mi přišel jako vhodný, protože celý kod je vlastně jen odkrokovaná smyčka s krokem po jednotlivých funkcích. Tady by se změna detekovala celkem neprakticky. Jedině stejně jako je chybový registr tak zavést stavový, ten měnit a regaovat na něj při zobrazení.
ve výsledku bys v každémkroku (někdy i vícekrát) volal pod funkci na změnu zobrazení.
Osobně bych šel do vlastních znaků. 8 ikon v pohodě stačí. Zobrazoval by se jen stav jaký je požadován + některé hodnoty proměnných .
rozhodnutí ale nechávám na johnyhola .. přeji jen je to jeho zařízení.bcsedlon
Účastníkzdravim, je-li nabidka stale platna ozvete se na bcsedlon@gmail.com
bcsedlon
Účastníkzdravim, je-li nabidka stale platna ozvete se na bcsedlon@gmail.com
Luke_CZ
Účastník1, a co raději vyhodnocovat, zda ke změně stavu došlo? Tedy jednoduše dát globální boolean proměnnou (výchozí FALSE), pokud dojde ke změně stavu, pak nastavit tuto proměnnou na TRUE (přímo ve proceduře). V případě, že je proměnná TRUE tak změnit text na LCD a nastavit proměnnou zpět na FALSE, pokud je FALSE, tak nic na displeji neměnit.
Tedy přepisovat jen tehdy, kdy je potřeba a co je potřeba.
Delay je sice řešení, ale takové kostrbaté, navíc delay v tomto případě jen brzdí běh programu.
2, lze jen souhlasit, navíc jde, pokud použiješ char jako pole, krásně text zarovnat na střed displeje, je to opticky mnohem výraznější, než vše psát od kraje.
Jen malé doporučení: Texty vypisuj na LCD přes makro F(), ušetříš si SRAM
3, na LCD lze udělat pouze 8 vlastních znaků pro jedno zobrazení(TO posjirka: ty umíš víc?). Nic proti ikonám, ale na rastru 5×7 moc zázraků nepředvedeš.L.
posjirka
Účastníkpředpokládám, že se ti ve smyčce nic nezobrazuje a zobrazí se tit o až op sepnutí termostatu. („FOTOBUNKA“).
Vidím tu problém ten, že ve smyčce LOOP() není žádná prodleva pro LCD a tak když se nic nedej neustále se maže a zobrazuje LCD.
Vidím 3 řešení:
1, misto
lcd.print("FOTOBUNKA");
dejlcd.print("FOTOBUNKA"); delay(500);
2, nedavej lcd.clear() ale zapisuj texty tak dlouhe aby přepsal všechny znaky v řádku
3, místo sáhodlouhých popisků procesu použij ikony. Může na LCD uědlat až 15 vlastních znaků. ty můžeš dát jako reakce na nějákou funkci. Příklad 1. ikona bude plamen. dáme jí pozici 0,1. Když bude fotobuńka vidět plamen zobrazí v té pozici 1. ikonu, když né zapíše do této pozice mezeru. Cílem je nemazat LCD, ale neustále jej přepisovat. pro pozici 0,3 dámetřeba hvězdičku (nemusíš psát, máš již ve znakové sadě). Když bude zapalovat pelety, objeví se v této pozioci hvězdička jinak mezera ,….
jak s tím začít by to moholo pomoci toto:
https://omerk.github.io/lcdchargen/nechám výběr na tobě … .
johnyhol
ÚčastníkTak tady:
// REGULACE PELETKOVEHO KOTLE // author. Johnyhol & by JP // v 13_12_2016 // changelog // v 13_12_2016 // testovani displeje // v 13_11_2016 // zrusena reakce na prostorovy termostat -> není potreba, reseno jiz v kotli // v 10_11_2016 // uprava seriove komunikace -> pridani casovacu jednotlivych funkci // v 5_11_2016 // zmena casu - upraveno pro realny provoz // v 4_11_2016 // zmena vsech vystupu na rele // v 14_5_2016 // precislovani pinu // zmena funkce fotobunky z digitalu na analog // dolpneni seriove komunikace o hodnotu fotobunky // v 30_3_2016 // oprava funkce tlacitka kvitace poruchy -> HIGH->LOW // umazani parametru "long cas=13000;" -> jiz neni potreba // umazani parametru "//delay(84000); //pockej 84s" u funkce dohoreni -> jiz neni potreba // umazani parametru "//delay(12000); //po dobu 12s" u funkce davkovani zapalovaci davky pelet -> jiz neni potreba // umazani parametru "//if(digitalRead(prostorovyTermostat) == LOW || digitalRead(kotlovyTermostat) == LOW){ // prostorovy nebo kotlovy termostat vypne" u funkce zapaleni // drobne upravy textu/popisu jednotlivych parametru/funkci // v 27_3_2016 // uprava procesu zapalovani - nebude reagovat na prostorovy termostat // uprava dlouhych delayu na smycky, pro vyuziti watchdogu - autoreset pri zaseknuti procesou - doba nez se resetuje = 8s // nastaveni definice poruch pro pozdejsi vyuziti // v22_3_2016 // uprava ladicich textu pro termostaty // v21_3_2016 // presunuti testuPlamene pouze do smycky udrzuj horeni // doplneni textu do testu horeni // oprava textu zprav // zruseni diakritiky // zapnuti alarmu pri vyskytu poruchy // v20_3_2016 // slouceni podminenych funkci // vypnuti zhaveni pri rozepnuti termostatu (kotlovy nebo prostorovy) // rozdeleni funkci do vlastnich funkcnich bloku // zapojeni seriove komunikace pro odladeni funkci // v16_3_2016 // uprava podminky smycek (zruseno =) // posun zpozdeni 5s z procesu zapaleni na jeho konec // doplnena podminka reakce na termostaty (kotlovy/prostorovy) v procesu zapaleni // upravena doba na 1 zapalovaci proces - nastavitelna trimrem na analog.vstupu A0. v rozsahu 60 - 600 s = 1 - 10 min. - nastaveni pouze v dobe necinosti kotle // nastaveni poruchy a jeji kvitance tlacitkem na pinu 9 // definice poruch // bit funkce // 0 prehrati kotle pri zapalovani // 1 ztrata plamene pri horeni // 2 volne // 3 volne // 4 volne // 5 volne // 6 volne // 7 volne // knihovna watchdogu #include <avr/wdt.h> // knihovna displeje #include <LiquidCrystal.h> // nastaveni pinu displeje LiquidCrystal lcd(8, 9, 4, 5, 6, 7); #define davkovaniPelet 2 //davkovani pelet snek #define spirala 3 //zapalovaci spirala #define ventilator 5 //ventilator #define alarm 6 //signalizace poruchy #define kotlovyTermostat 8 //kotlovy termostat #define fotobunka 15 //fotobunka pro kontrolu plamene DI15 = A1 pro arduino UNO #define trimr1 14 // nastaveni doby zapaleni DI14 = A0 pro arduino UNO #define tlacitkoKvitance 9 // pin tlacitka kvitance poruchy int smycka1 = 0; // pomocna smycka - zapaleni int smycka1max = 600; // max.pomocne smycky - ted jiz nastavitelne trimrem na A0 60-600s int smycka2 = 0; // pomocna smycka - udrzeni horeni int smycka2max = 2; // max.pomocne smycky int smycka3 = 0; // pomocna smycka - pocet pokusu o zapaleni int smycka3max = 2; // max.pomocne smycky int smycka4 = 0; // pomocna smycka - davkovani zapalne davky pelet int smycka4max = 10; // max.pomocne smycky int smycka5 = 0; // pomocna smycka - rozhoreni int smycka5max = 5; // max.pomocne smycky int smycka6 = 0; // pomocna smycka - dohoreni int smycka6max = 84; // max.pomocne smycky byte porucha = 0; // promenna pro zaznam poruchy int ldr = 1; //analogovy pin kde je pripojen fotorezistor int ldr_value = 0; //promenna pro zaznam hodnot z fotorezistoru void setup() { // nastav seriovou komunikaci na rychlost 9600 bd Serial.begin(9600); Serial.println("Nastavuji vstupy/vystupy"); // ladici seriova komunikace // nastaveni displeje lcd.begin(16, 2); // zobrazeni na displeji lcd.print("NAST.VSTUPY/VYST"); //delay (5000); // smaze displej pred dalsi smyckou //lcd.clear(); pinMode(davkovaniPelet, OUTPUT); pinMode(spirala, OUTPUT); pinMode(ventilator, OUTPUT); pinMode(alarm, OUTPUT); pinMode(kotlovyTermostat, INPUT); pinMode(fotobunka, INPUT); pinMode(trimr1, INPUT); pinMode(tlacitkoKvitance, INPUT); // vsechno vypni vypniVse(); // nastav watchdog na 8s wdt_enable(WDTO_8S); } void loop() { wdt_reset(); // resetuj watchdog ldr_value = analogRead(ldr); //čte hodnoty LDR Serial.print("HODNOTA FOTOBUNKY = "); Serial.println(ldr_value); //zobrazí hodnoty LDR na seriove lince // smaze displej pred dalsi smyckou lcd.clear(); // (poznamka: oznaceni 1 je druhy radek, prvni radek je 0): lcd.setCursor(0, 1); // zobrazeni na displeji lcd.print("FOTOBUNKA"); Serial.println("Cekam na sepnuti termostatu ..."); // ladici seriova komunikace smycka1max = map(analogRead(trimr1), 0, 1024, 60, 600); // nastaveni doby zapaleni trimrem na A0 if(digitalRead(kotlovyTermostat) == HIGH){ // kotlovy termostat je zapnuty Serial.println("Kotlovy termostat zapnut"); // ladici seriova komunikace // startovaci davka pelet //------------------------ zapalovaciDavkaPelet(); // proces zapaleni //---------------- zapaleni(); // test poruchy // ----------------- //testPlamene(); // udrzeni horeni //-------------- udrzujHoreni(); // dohoreni //--------- dohoreni(); } else { Serial.println("Kotlovy/Prostorovy termostat vypnut"); // ladici seriova komunikace } // kvitence pripadne poruchy //------------------------------- kvitancePoruchy(); } void vypniVse() { // funkce vypni vse Serial.println("Vypinam vsechny rele ..."); // ladici seriova komunikace // smaze displej pred dalsi smyckou lcd.clear(); // (poznamka: oznaceni 1 je druhy radek, prvni radek je 0): lcd.setCursor(0, 1); // zobrazeni na displeji lcd.print("VYPINAM VS. RELE"); digitalWrite(davkovaniPelet, HIGH); //vypni davkovani digitalWrite(spirala, HIGH); //vypni zhaveni digitalWrite(ventilator, HIGH); //vypni ventilator } void zapalovaciDavkaPelet() { // prvotni davkovani pelet pro zapaleni Serial.println("Davkuji pelety pro zapaleni ... 110s"); // ladici seriova komunikace digitalWrite(davkovaniPelet, LOW); //davkuj pelety for (smycka4 = 0; smycka4 < smycka4max; smycka4 ++){ delay(1000); wdt_reset(); // resetuj watchdog Serial.print("Stav: "); Serial.print(smycka4); Serial.print("s/"); Serial.print(smycka4max); Serial.println("s "); } digitalWrite(davkovaniPelet, HIGH); //potom vypni davkovani digitalWrite(ventilator, LOW); //zapni ventilator digitalWrite(spirala, LOW); //zapni zhaveni } void zapaleni() { // funkce zapaleni pelet // 2 pokusy o zapaleni Serial.println("Spoustim zapaleni ..."); // ladici seriova komunikace for (smycka3 = 0; smycka3 < smycka3max; smycka3 ++){ // smycka "1-10" minut zapalovani for (smycka1 = 0; smycka1 < smycka1max; smycka1 ++){ wdt_reset(); // resetuj watchdog Serial.print("Pokus o zapaleni "); // ladici seriova komunikace Serial.print(smycka3); // ladici seriova komunikace Serial.print("/"); // ladici seriova komunikace Serial.println(smycka3max); // ladici seriova komunikace Serial.print("Stav: "); // ladici seriova komunikace Serial.print(smycka1); // ladici seriova komunikace Serial.print("s/"); // ladici seriova komunikace Serial.print(smycka1max); // ladici seriova komunikace Serial.println("s "); // ladici seriova komunikace if(digitalRead(kotlovyTermostat) == LOW){ // kotlovy termostat vypne digitalWrite(spirala, HIGH); //vypni zhaveni smycka1 = smycka1max; // ukonci smycku1 smycka3 = smycka3max; // ukonci smycku3 Serial.println("Rozepnuti termostatu ..."); // ladici seriova komunikace bitSet(porucha,0); // nastav poruchu bit c.0 na "1" } if(analogRead(fotobunka) <= 500){ //pokud fotobunka vidi plamen digitalWrite(spirala, HIGH); //vypni zhaveni smycka1 = smycka1max; // ukonci smycku1 smycka3 = smycka3max; // ukonci smycku3 Serial.println(" hori ..."); // ladici seriova komunikace Serial.println("Rozhoreni ... 50s "); } else { Serial.println(" nehori ..."); // ladici seriova komunikace } delay(1000); } for (smycka5 = 0; smycka5 < smycka5max; smycka5 ++){ delay(1000); wdt_reset(); // resetuj watchdog Serial.print("Stav: "); Serial.print(smycka5); Serial.print("s/"); Serial.print(smycka5max); Serial.println("s "); } //delay(5000); //cekej 5s } } void udrzujHoreni() { // funkce udrzeni horeni ldr_value = analogRead(ldr); //čte hodnoty LDR Serial.print("HODNOTA FOTOBUNKY = "); Serial.println(ldr_value); //zobrazí hodnoty LDR na seriove lince Serial.println("Udrzeni horeni ..."); // ladici seriova komunikace for (smycka2 = 0; smycka2 < smycka2max; smycka2 ++){ wdt_reset(); // resetuj watchdog smycka2 = 0; // vynuluj smycku if(digitalRead(kotlovyTermostat) == HIGH){ // kotlovy termostat je zapnuty if(analogRead(fotobunka) <= 500){ //pokud fotobunka vidi plamen Serial.println("Test plamene ... hori"); // ladici seriova komunikace Serial.println("Davkuji pelety ... "); digitalWrite(davkovaniPelet, LOW); //davkuj pelety delay(4000); //pockej 4s wdt_reset(); // resetuj watchdog delay(4000); //pockej 4s wdt_reset(); // resetuj watchdog //Serial.print("s/"); //Serial.print(davkovaniPelet, LOW); //Serial.print("s "); Serial.println("Pauza ... "); digitalWrite(davkovaniPelet, HIGH); //vypni davkovani delay(5000); //pockej 5s wdt_reset(); // resetuj watchdog delay(5000); //pockej 5s wdt_reset(); // resetuj watchdog } else { delay(1000); // pocekej jeste 1s a zkus to znovu if(analogRead(fotobunka) >= 500){ //pokud fotobunka nevidi plamen Serial.println("Test plamene ... porucha"); // ladici seriova komunikace smycka2 = smycka2max; // ukonci smycku //porucha = 1; // nastav poruchu bitSet(porucha,1); // nastav poruchu bit c.1 na "1" digitalWrite(alarm, LOW); // zapni alarm } } } else { smycka2 = smycka2max; // ukonci smycku } } } void dohoreni() { // funkce dohoreni Serial.println("Dohoreni ... 840s "); // ladici seriova komunikace digitalWrite(davkovaniPelet, HIGH); //vypni davkovani pelet digitalWrite(spirala, HIGH); //vypni zhaveni - pro jistotu for (smycka6 = 0; smycka6 < smycka6max; smycka6 ++){ Serial.print("Stav: "); Serial.print(smycka6); Serial.print("s/"); Serial.print(smycka6max); Serial.println("s "); delay(1000); wdt_reset(); // resetuj watchdog } digitalWrite(ventilator, HIGH); //vypni ventilator } void kvitancePoruchy() { // funkce kvitance poruchy if(porucha > 0 ){ // kdyz je porucha aktivni Serial.println("Kvitance poruchy ..."); // ladici seriova komunikace // vypni vse vypniVse(); while (digitalRead(tlacitkoKvitance) == LOW) { // zapni alarm a cekej na stisk tlacitka digitalWrite(alarm, LOW); // zapni alarm Serial.println("Porucha ... cekam na kvitanci"); // ladici seriova komunikace wdt_reset(); // resetuj watchdog } Serial.println("Porucha kvitovana ..."); // ladici seriova komunikace digitalWrite(alarm, HIGH); // vypni alarm porucha = 0; // vynuluj poruchu } else { // jinak Serial.println("Zadna porucha ..."); // ladici seriova komunikace digitalWrite(alarm, HIGH); // vypni alarm } }
posjirka
Účastníkhod sem poslední kod včetně tech uprav lcd odemně
Vojtěch Vosáhlo
ÚčastníkZkuste použít inquiry. Mělo by to snad fungovat. Zde je docu: https://www.itead.cc/wiki/BTBee_Pro#28._Inquiry_Bluetooth_Device
johnyhol
ÚčastníkAhoj, díky za rychlou reakci. Zkoušel jsem to jak radíš, ale stejně to nic nezobrazí, pořád funguje jenom „nastavuji vstupy/vystupy“ a pak už nic. Když to zkusím v extra projektu (jenom displej bez ostatních funkcí) tak to funguje. Ještě musí bejt někde něco.
posjirka
Účastníkahoj,
chybka je jasná:
– nejdřív musíš smazat LCD
– pak nastavit kurzor
– nakonec vypsat textteď to máš takto:
lcd.setCursor(0, 1); // zobrazeni na displeji lcd.print("FOTOBUNKA"); // smaze displej pred dalsi smyckou lcd.clear();
správně to má být takto:
// smaze displej lcd.clear(); // nastaveni kurzoru lcd.setCursor(0, 1); // zobrazeni na displeji lcd.print("FOTOBUNKA");
johnyhol
ÚčastníkAhoj, tak jsem se pustil do toho dipleje, něco jsem naštudoval, něco vyzkoušel. Teď se to snažím nacpat do mýho projektu, ale nějak se mi to nedaří. Zkusíš mi na to prosím kouknout? Zatím jsem jenom nastavil do setupu hlášku „nastavuji vstupy/vystupy“ (to funguje) a pak jsem zkoušel dát do loopu fotobuňku a do vypniVse „vypinam vsechny rele“, ale tam už se mi to nedaří.
Tady je aktuálmí kód:// REGULACE PELETKOVEHO KOTLE // author. Johnyhol & by JP // v 13_12_2016 // changelog // v 13_12_2016 // testovani displeje // v 13_11_2016 // zrusena reakce na prostorovy termostat -> není potreba, reseno jiz v kotli // v 10_11_2016 // uprava seriove komunikace -> pridani casovacu jednotlivych funkci // v 5_11_2016 // zmena casu - upraveno pro realny provoz // v 4_11_2016 // zmena vsech vystupu na rele // v 14_5_2016 // precislovani pinu // zmena funkce fotobunky z digitalu na analog // dolpneni seriove komunikace o hodnotu fotobunky // v 30_3_2016 // oprava funkce tlacitka kvitace poruchy -> HIGH->LOW // umazani parametru "long cas=13000;" -> jiz neni potreba // umazani parametru "//delay(84000); //pockej 84s" u funkce dohoreni -> jiz neni potreba // umazani parametru "//delay(12000); //po dobu 12s" u funkce davkovani zapalovaci davky pelet -> jiz neni potreba // umazani parametru "//if(digitalRead(prostorovyTermostat) == LOW || digitalRead(kotlovyTermostat) == LOW){ // prostorovy nebo kotlovy termostat vypne" u funkce zapaleni // drobne upravy textu/popisu jednotlivych parametru/funkci // v 27_3_2016 // uprava procesu zapalovani - nebude reagovat na prostorovy termostat // uprava dlouhych delayu na smycky, pro vyuziti watchdogu - autoreset pri zaseknuti procesou - doba nez se resetuje = 8s // nastaveni definice poruch pro pozdejsi vyuziti // v22_3_2016 // uprava ladicich textu pro termostaty // v21_3_2016 // presunuti testuPlamene pouze do smycky udrzuj horeni // doplneni textu do testu horeni // oprava textu zprav // zruseni diakritiky // zapnuti alarmu pri vyskytu poruchy // v20_3_2016 // slouceni podminenych funkci // vypnuti zhaveni pri rozepnuti termostatu (kotlovy nebo prostorovy) // rozdeleni funkci do vlastnich funkcnich bloku // zapojeni seriove komunikace pro odladeni funkci // v16_3_2016 // uprava podminky smycek (zruseno =) // posun zpozdeni 5s z procesu zapaleni na jeho konec // doplnena podminka reakce na termostaty (kotlovy/prostorovy) v procesu zapaleni // upravena doba na 1 zapalovaci proces - nastavitelna trimrem na analog.vstupu A0. v rozsahu 60 - 600 s = 1 - 10 min. - nastaveni pouze v dobe necinosti kotle // nastaveni poruchy a jeji kvitance tlacitkem na pinu 9 // definice poruch // bit funkce // 0 prehrati kotle pri zapalovani // 1 ztrata plamene pri horeni // 2 volne // 3 volne // 4 volne // 5 volne // 6 volne // 7 volne // knihovna watchdogu #include <avr/wdt.h> // knihovna displeje #include <LiquidCrystal.h> // nastaveni pinu displeje LiquidCrystal lcd(8, 9, 4, 5, 6, 7); #define davkovaniPelet 2 //davkovani pelet snek #define spirala 3 //zapalovaci spirala #define ventilator 5 //ventilator #define alarm 6 //signalizace poruchy #define kotlovyTermostat 8 //kotlovy termostat #define fotobunka 15 //fotobunka pro kontrolu plamene DI15 = A1 pro arduino UNO #define trimr1 14 // nastaveni doby zapaleni DI14 = A0 pro arduino UNO #define tlacitkoKvitance 9 // pin tlacitka kvitance poruchy int smycka1 = 0; // pomocna smycka - zapaleni int smycka1max = 600; // max.pomocne smycky - ted jiz nastavitelne trimrem na A0 60-600s int smycka2 = 0; // pomocna smycka - udrzeni horeni int smycka2max = 2; // max.pomocne smycky int smycka3 = 0; // pomocna smycka - pocet pokusu o zapaleni int smycka3max = 2; // max.pomocne smycky int smycka4 = 0; // pomocna smycka - davkovani zapalne davky pelet int smycka4max = 10; // max.pomocne smycky int smycka5 = 0; // pomocna smycka - rozhoreni int smycka5max = 5; // max.pomocne smycky int smycka6 = 0; // pomocna smycka - dohoreni int smycka6max = 84; // max.pomocne smycky byte porucha = 0; // promenna pro zaznam poruchy int ldr = 1; //analogovy pin kde je pripojen fotorezistor int ldr_value = 0; //promenna pro zaznam hodnot z fotorezistoru void setup() { // nastav seriovou komunikaci na rychlost 9600 bd Serial.begin(9600); Serial.println("Nastavuji vstupy/vystupy"); // ladici seriova komunikace // nastaveni displeje lcd.begin(16, 2); // zobrazeni na displeji lcd.print("NAST.VSTUPY/VYST"); delay (5000); // smaze displej pred dalsi smyckou lcd.clear(); pinMode(davkovaniPelet, OUTPUT); pinMode(spirala, OUTPUT); pinMode(ventilator, OUTPUT); pinMode(alarm, OUTPUT); pinMode(kotlovyTermostat, INPUT); pinMode(fotobunka, INPUT); pinMode(trimr1, INPUT); pinMode(tlacitkoKvitance, INPUT); // vsechno vypni vypniVse(); // nastav watchdog na 8s wdt_enable(WDTO_8S); } void loop() { wdt_reset(); // resetuj watchdog ldr_value = analogRead(ldr); //čte hodnoty LDR Serial.print("HODNOTA FOTOBUNKY = "); Serial.println(ldr_value); //zobrazí hodnoty LDR na seriove lince // (poznamka: oznaceni 1 je druhy radek, prvni radek je 0): lcd.setCursor(0, 1); // zobrazeni na displeji lcd.print("FOTOBUNKA"); // smaze displej pred dalsi smyckou lcd.clear(); Serial.println("Cekam na sepnuti termostatu ..."); // ladici seriova komunikace smycka1max = map(analogRead(trimr1), 0, 1024, 60, 600); // nastaveni doby zapaleni trimrem na A0 if(digitalRead(kotlovyTermostat) == HIGH){ // kotlovy termostat je zapnuty Serial.println("Kotlovy termostat zapnut"); // ladici seriova komunikace // startovaci davka pelet //------------------------ zapalovaciDavkaPelet(); // proces zapaleni //---------------- zapaleni(); // test poruchy // ----------------- //testPlamene(); // udrzeni horeni //-------------- udrzujHoreni(); // dohoreni //--------- dohoreni(); } else { Serial.println("Kotlovy/Prostorovy termostat vypnut"); // ladici seriova komunikace } // kvitence pripadne poruchy //------------------------------- kvitancePoruchy(); } void vypniVse() { // funkce vypni vse Serial.println("Vypinam vsechny rele ..."); // ladici seriova komunikace // (poznamka: oznaceni 1 je druhy radek, prvni radek je 0): lcd.setCursor(0, 1); // zobrazeni na displeji lcd.print("VYPINAM VS. RELE"); // smaze displej pred dalsi smyckou lcd.clear(); digitalWrite(davkovaniPelet, HIGH); //vypni davkovani digitalWrite(spirala, HIGH); //vypni zhaveni digitalWrite(ventilator, HIGH); //vypni ventilator } void zapalovaciDavkaPelet() { // prvotni davkovani pelet pro zapaleni Serial.println("Davkuji pelety pro zapaleni ... 110s"); // ladici seriova komunikace digitalWrite(davkovaniPelet, LOW); //davkuj pelety for (smycka4 = 0; smycka4 < smycka4max; smycka4 ++){ delay(1000); wdt_reset(); // resetuj watchdog Serial.print("Stav: "); Serial.print(smycka4); Serial.print("s/"); Serial.print(smycka4max); Serial.println("s "); } digitalWrite(davkovaniPelet, HIGH); //potom vypni davkovani digitalWrite(ventilator, LOW); //zapni ventilator digitalWrite(spirala, LOW); //zapni zhaveni } void zapaleni() { // funkce zapaleni pelet // 2 pokusy o zapaleni Serial.println("Spoustim zapaleni ..."); // ladici seriova komunikace for (smycka3 = 0; smycka3 < smycka3max; smycka3 ++){ // smycka "1-10" minut zapalovani for (smycka1 = 0; smycka1 < smycka1max; smycka1 ++){ wdt_reset(); // resetuj watchdog Serial.print("Pokus o zapaleni "); // ladici seriova komunikace Serial.print(smycka3); // ladici seriova komunikace Serial.print("/"); // ladici seriova komunikace Serial.println(smycka3max); // ladici seriova komunikace Serial.print("Stav: "); // ladici seriova komunikace Serial.print(smycka1); // ladici seriova komunikace Serial.print("s/"); // ladici seriova komunikace Serial.print(smycka1max); // ladici seriova komunikace Serial.println("s "); // ladici seriova komunikace if(digitalRead(kotlovyTermostat) == LOW){ // kotlovy termostat vypne digitalWrite(spirala, HIGH); //vypni zhaveni smycka1 = smycka1max; // ukonci smycku1 smycka3 = smycka3max; // ukonci smycku3 Serial.println("Rozepnuti termostatu ..."); // ladici seriova komunikace bitSet(porucha,0); // nastav poruchu bit c.0 na "1" } if(analogRead(fotobunka) <= 500){ //pokud fotobunka vidi plamen digitalWrite(spirala, HIGH); //vypni zhaveni smycka1 = smycka1max; // ukonci smycku1 smycka3 = smycka3max; // ukonci smycku3 Serial.println(" hori ..."); // ladici seriova komunikace Serial.println("Rozhoreni ... 50s "); } else { Serial.println(" nehori ..."); // ladici seriova komunikace } delay(1000); } for (smycka5 = 0; smycka5 < smycka5max; smycka5 ++){ delay(1000); wdt_reset(); // resetuj watchdog Serial.print("Stav: "); Serial.print(smycka5); Serial.print("s/"); Serial.print(smycka5max); Serial.println("s "); } //delay(5000); //cekej 5s } } void udrzujHoreni() { // funkce udrzeni horeni ldr_value = analogRead(ldr); //čte hodnoty LDR Serial.print("HODNOTA FOTOBUNKY = "); Serial.println(ldr_value); //zobrazí hodnoty LDR na seriove lince Serial.println("Udrzeni horeni ..."); // ladici seriova komunikace for (smycka2 = 0; smycka2 < smycka2max; smycka2 ++){ wdt_reset(); // resetuj watchdog smycka2 = 0; // vynuluj smycku if(digitalRead(kotlovyTermostat) == HIGH){ // kotlovy termostat je zapnuty if(analogRead(fotobunka) <= 500){ //pokud fotobunka vidi plamen Serial.println("Test plamene ... hori"); // ladici seriova komunikace Serial.println("Davkuji pelety ... "); digitalWrite(davkovaniPelet, LOW); //davkuj pelety delay(4000); //pockej 4s wdt_reset(); // resetuj watchdog delay(4000); //pockej 4s wdt_reset(); // resetuj watchdog //Serial.print("s/"); //Serial.print(davkovaniPelet, LOW); //Serial.print("s "); Serial.println("Pauza ... "); digitalWrite(davkovaniPelet, HIGH); //vypni davkovani delay(5000); //pockej 5s wdt_reset(); // resetuj watchdog delay(5000); //pockej 5s wdt_reset(); // resetuj watchdog } else { delay(1000); // pocekej jeste 1s a zkus to znovu if(analogRead(fotobunka) >= 500){ //pokud fotobunka nevidi plamen Serial.println("Test plamene ... porucha"); // ladici seriova komunikace smycka2 = smycka2max; // ukonci smycku //porucha = 1; // nastav poruchu bitSet(porucha,1); // nastav poruchu bit c.1 na "1" digitalWrite(alarm, LOW); // zapni alarm } } } else { smycka2 = smycka2max; // ukonci smycku } } } void dohoreni() { // funkce dohoreni Serial.println("Dohoreni ... 840s "); // ladici seriova komunikace digitalWrite(davkovaniPelet, HIGH); //vypni davkovani pelet digitalWrite(spirala, HIGH); //vypni zhaveni - pro jistotu for (smycka6 = 0; smycka6 < smycka6max; smycka6 ++){ Serial.print("Stav: "); Serial.print(smycka6); Serial.print("s/"); Serial.print(smycka6max); Serial.println("s "); delay(1000); wdt_reset(); // resetuj watchdog } digitalWrite(ventilator, HIGH); //vypni ventilator } void kvitancePoruchy() { // funkce kvitance poruchy if(porucha > 0 ){ // kdyz je porucha aktivni Serial.println("Kvitance poruchy ..."); // ladici seriova komunikace // vypni vse vypniVse(); while (digitalRead(tlacitkoKvitance) == LOW) { // zapni alarm a cekej na stisk tlacitka digitalWrite(alarm, LOW); // zapni alarm Serial.println("Porucha ... cekam na kvitanci"); // ladici seriova komunikace wdt_reset(); // resetuj watchdog } Serial.println("Porucha kvitovana ..."); // ladici seriova komunikace digitalWrite(alarm, HIGH); // vypni alarm porucha = 0; // vynuluj poruchu } else { // jinak Serial.println("Zadna porucha ..."); // ladici seriova komunikace digitalWrite(alarm, HIGH); // vypni alarm } }
Díky moc!
ArduXPP
ÚčastníkUkazuje to, že je to třeba uložené na poště atd. A pak asi po 8 hodině ranní to ukáže, že zásilka bude ten den doručována. Když balík dorazí do ČR dostane jiné číslo balíku, které je ukázané na stránkách pošty a podle toho čísla jde dál sledovat zásilku v ČR.
Vojtěch Vosáhlo
ÚčastníkPokud vím tak žádný levnější arduino to neumí, pokud potřebujete zvuk jiný než jen nějakou frekvenci, např hlas, zkuste použít jeden z těch „levných“ audio modulů pro arduino. Kdyby šlo o malý kód, použil bych třeba nějaké levné attiny místo arduina. Šetřit kde se dá… ?
Vojtěch Vosáhlo
ÚčastníkTo ano, a sledovat je můžu např pře 17track. Spíš mi šlo o to jestli jde nějak zjistit poloha v ČR. Např celnice/lokální pošta… Pokud vím tak by tohle mělo fungovat u EMS ale ani to mi nejde 🙁 Asi si holt počkám
ArduXPP
ÚčastníkU zboží je možné si vybrat způsob dopravy a je tam i informace, že jestli jde sledovat v cílené zemi balíček „Tracking Information – Not available NE – Available ANO“ , pak ještě záleží jak to doopravdy obchodník pošle, už jse mi stalo, že to poslal jinak než píše u objednávky „Logistics Information:“ . Tedy, že napsal číslo ale poslal to pod jiným číslem 🙂
Vojtěch Vosáhlo
ÚčastníkMimochodem T&T české pošty.
-
AutorPříspěvky