GabrielM
Vytvořené odpovědi
-
AutorPříspěvky
-
Dupla
ÚčastníkAno, s přerušením souhlasím. Také jsem ho vyzkoušel pomocí funkce attachInterrupt(); na pinech 4 a 5, které přerušení neobsahují, ale bez výsledku. Na piny 2 a 3 jsem to nezkoušel, protože přerušení obsahují.
Zpoždění zde mám z důvodu, protože chci, aby ventil zůstal vysunutý po nějakou dobu. Funkci millis() jsem také zkoušel a bez výsledku.
Zkoušel jsem to i rozepsat stylem: pokud jeden snímač je zhasnutý, tak vysuň ventil, až se rozsvítí, tak ho zasuň…taky to moc nefungovalo.Lorant
ÚčastníkSom z toho blbý, ale funguje to!!!!!!!!!!!
Rozbalil som to a dal som do knižnice ručne. Idú mi aj examples, takže všetko ok!
Len nechápem prečo, čo som mohol mať zle. Predsa tie isté súbory som mal na tom istom mieste a skúšal som to už všeliak….. Nevadí, hlavne že to ide!
Vďaka pekne za ochotu a čas!
… a ked sme už tu… potreboval by som s arduinom riešiť generátor ttl alebo pílu, ale problém je, že potrebujem od -2,5 do +2,5V (6-70Hz). Má niekto nejaký nápad, alebo schému? Hladal som aj na nete, ale našiel som len 0 +5V.
Momentálne mám po ruke NEI555 alebo ICL8038. Už som to aj riešil, len zatial od 0v do +5v, neviem ako by sa dalo ísť jednoducho aj do mínusu…. (finančne viem chodiť do mínusu, elektronicky sa mi nedarí 🙂 )
DíkyArduXPP
ÚčastníkAno soubor zip je potřeba rozbalit a pak postupovat dle co jsem psal.
Zbyšek Voda
ÚčastníkProblém bude v nesprávné interpretaci „přerušení“ 🙂
K přerušení dojde, když program v reakci na nějakou událost „odskočí“ na chvilku ze standardního běhu a rychle se provede něco jiného. Přerušení může být vyvolané například vnitřním časovačem, nebo také změnou napětí na pinu – to vás asi zmátlo. Obsloužení přerušení probíhá tak, že pomocí funkce attachInterrupt() řeknete, co se má stát v reakci na jakou událost. Více o přerušeních na https://www.arduino.cc/en/Reference/AttachInterrupt a https://www.arduino.cc/en/Reference/Interrupts.Vy ale vlastně ani přerušení nepotřebujete. Problém v programu je ten, že pokud použijete funkci delay(), dojde k čekání programu po určitou dobu. V té době program nereaguje na koncové spínače, ani neobsluhuje posun motorů.
Navrhuji místo tohoto „pasivního“ čekání použít funkci millis(), která vrací dobu v milisekundách od začátku běhu programu. Tento problém je popsaný v https://bastlirna.hwkitchen.cz/arduino-zaklady-blikani-bez-funkce-delay/.
Jestli to dobře chápu, používáte delay kvůli tomu, že ventil musí určitou dobu běžet, než je zasunutý/vysunutý. Pokud ale stačí pro každý ventil mít jenom dva stavy – vysunutý/zasunutý a nepotřebujete nic mezi, to čekání vlastně vůbec nepotřebujete.
Stačí vytvořit podmínku ve stylu: pokud je koncový vypínač 1 rozepnutý, nech ventil zapnutý, jakmile se k. vypínač sepne, vypni ventil. Chápeme se? 🙂Lorant
Účastníkani mi nedalo do libaries:
Arduino: 1.6.11 (Windows 8.1), Vývojová doska:“Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)“Špecifikovaný adresár/zip súbor neobsahuje správnu knižnicu
Táto správa by mala mať viac informácií v
„Zobrazenie podrobného výstupu pri kompilácii“
podľa zapnutá voľba v Súbor -> Nastavenia.
Skúsim rozbaliť a tak….ArduXPP
ÚčastníkPosílám zip soubor, ten se otevře a složka LCD_2000_9225 se celá zkopíruje do libraries . Pak jsem tam dal soubor megaLCD.ino ten se otevře v arduino ide a otestuje.
Attachments:
Lorant
Účastník… to už som včera tiež skúšal, ale vyskúšal som ešte raz, vymazal som všetky ostatné súbory, ostali mi v adresári už len :
LCD_2000_9225.h
LCD_2000_9225.cpp
utility – celý adresár s príkladmichyba:
Arduino: 1.6.11 (Windows 8.1), Vývojová doska:“Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)“In file included from C:\Users\lorena\Documents\Arduino\_9225_demo\_9225_demo.ino:1:0:
C:\Users\lorena\Documents\Arduino\libraries\LCD_2000_9225/LCD_2000_9225.h:10:34: fatal error: utility/Adafruit_GFX.h: No such file or directory
#include „utility/Adafruit_GFX.h“
^
compilation terminated.
exit status 1
Nastala chyba pri kompilácii pre dosku Arduino/Genuino Mega or Mega 2560.Táto správa by mala mať viac informácií v
„Zobrazenie podrobného výstupu pri kompilácii“
podľa zapnutá voľba v Súbor -> Nastavenia.Neviem čo chce s tým adafruit gfx, to mám nainštalované…. Totálne som blbý z toho…
Ináč díky za ochotu a pomoc!Ja viem, že to bude veľa miesta, ale takto vyzerá kód, čo mu dávam zožrať:
#include <LCD_2000_9225.h>
// pin definition for the Mega2560
#define cs 40
#define wr 39
#define rs 38
#define rst 41
#define le 42#define D0 37
#define D1 36
#define D2 35
#define D3 34
#define D4 33
#define D5 32
#define D6 31
#define D7 30// create an instance of the library
LCD_2000_9225 TFTscreen(cs,wr,rs,rst,le);// char array to print to the screen
char sensorPrintout[4];void setup() {
// Put this line at the beginning of every sketch that uses the GLCD:
TFTscreen.setdatapin(D0,D1,D2,D3,D4,D5,D6,D7);
TFTscreen.begin();// clear the screen with a black background
TFTscreen.background(0, 0, 0);// write the static text to the screen
// set the font color to white
TFTscreen.stroke(255,255,255);
// set the font size
TFTscreen.setTextSize(2);
// write the text to the top left corner of the screen
TFTscreen.text(„Sensor Value :\n „,0,0);
// ste the font size very large for the loop
TFTscreen.setTextSize(5);
}void loop() {
// Read the value of the sensor on A0
String sensorVal = String(analogRead(A0));// convert the reading to a char array
sensorVal.toCharArray(sensorPrintout, 4);// set the font color
TFTscreen.stroke(255,255,255);
// print the sensor value
TFTscreen.text(sensorPrintout, 0, 20);
// wait for a moment
delay(250);
// erase the text you just wrote
TFTscreen.stroke(0,0,0);
TFTscreen.text(sensorPrintout, 0, 20);
}ArduXPP
ÚčastníkKoukal jsem se na to, a testoval jsem jen kod .
Obsah který se nachází ve složce LCD_2000_9225 je potřeba ve složce libraries udělat prázdnou složku třeba LCD_2000_9225 , a obsah co je ve složce LCD_2000_9225 vzít src ale jen ten obsah, a zkopírovat do složky libraries/LCD_2000_9225 , jedná se o tyto soubory či složky:
LCD_2000_9225.h
LCD_2000_9225.cpp
utility – celou složkuPak to už bude fungovat.
Lorant
Účastník… ja… okrem shieldu a display-a som nedostal k tomu žiadny sample code….
Lorant
Účastník… a nič… To už musím byť poriadne blbý, alebo zúfalý… Nainštaloval som 1.6.11, Keď som pozrel do „Spravovania knižnice“ tam už bol nainšatolvaný driver pre 9225, keď som dal TFT display test, zas chyba:
Arduino: 1.6.11 (Windows 8.1), Vývojová doska:“Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)“UPOZORNENIE: Kategória “ v knižnici LCD_2000_9225 je neplatná. Nastavené na ‚Uncategorized‘
Chýbajúci ‚maintainer‘ z knižnice C:\Users\lorena\Documents\Arduino\libraries\LCD_2000_9225Nastala chyba pri kompilácii pre dosku Arduino/Genuino Mega or Mega 2560.
Táto správa by mala mať viac informácií v
„Zobrazenie podrobného výstupu pri kompilácii“
podľa zapnutá voľba v Súbor -> Nastavenia.Tak som sa nikde nedostal… skúšal som túto knižnicu nakopírovať aj do c/program file/arduino/libaries tiež nič… Mám už z toho poriadny hokej. Skúšal som na začiatku zmeniť aj #include
<LCD-2000-9225.h>
// pin definition for the Mega2560
LCD-2000-9225 TFTscreen(40,39,38,41,44,42);Chybové hlásenie:
Arduino: 1.6.11 (Windows 8.1), Vývojová doska:“Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)“UPOZORNENIE: Kategória “ v knižnici LCD_2000_9225 je neplatná. Nastavené na ‚Uncategorized‘
TFTDisplayText_Mega2560:19: error: #include expects „FILENAME“ or <FILENAME>#include
^
exit status 1
#include expects „FILENAME“ or <FILENAME>Táto správa by mala mať viac informácií v
„Zobrazenie podrobného výstupu pri kompilácii“
podľa zapnutá voľba v Súbor -> Nastavenia.Už neviem čo ďalej… to include ani neviem čo znamená, vlastne asi viem, nejaké preddefinovanie… ale nic-moc som o tom nenašiel, ako to funguje…
Dupla
ÚčastníkZde je můj kód. První dvě podmínky po zakomentování zbytku fungují správně. Když připojím třetí podmínku, tak se vše rozhodí.
// Konstanty pro pneumatické válce const int dvere = 2; const int davkovani = 3; const int lisovani = 4; const int vyhazovani = 5; // ---------------------------------------- // Konstanty pro snímače const int vyhazovaniZasunute = 6; const int vyhazovaniVysunute = 7; const int lisovaniVysunute = 8; const int lisovaniZasunute = 9; const int dvereZasunute = 10; const int dvereVysunute = 11; const int davkovaniVysunute = 12; const int davkovaniZasunute = 13; void setup() { // Pneumatické válce nastaveny jako výstupy pinMode(dvere, OUTPUT); pinMode(davkovani, OUTPUT); pinMode(lisovani, OUTPUT); pinMode(vyhazovani, OUTPUT); // Snímače nastaveny jako vstupy pinMode(vyhazovaniZasunute, INPUT); // Snímač - vyhazování zasunuté pinMode(vyhazovaniVysunute, INPUT); // Snímač - vyhazování vysunuté pinMode(lisovaniVysunute, INPUT); // Snímač - lisování vysunuté pinMode(lisovaniZasunute, INPUT); // Snímač - lisování zasunuté pinMode(dvereZasunute, INPUT); // Snímač - dveře výstup zasunuté (otevřené) pinMode(dvereVysunute, INPUT); // Snímač - dvěře výstup vysunuté (zavřené) pinMode(davkovaniVysunute, INPUT); // Snímač - dávkování vysunuté pinMode(davkovaniZasunute, INPUT); // Snímač - dávkování zasunuté // Nastavení pneumatických válců do výchozí polohy - vše zasunuto digitalWrite(dvere, HIGH); digitalWrite(davkovani, HIGH); digitalWrite(lisovani, HIGH); digitalWrite(vyhazovani, HIGH); } void loop() { if(digitalRead(dvereZasunute) == HIGH) { digitalWrite(dvere, LOW); // pokud svítí senzor, že je válec zasunutý, vysuň ho } if(digitalRead(dvereVysunute) == HIGH && digitalRead(davkovaniZasunute) == HIGH) { digitalWrite(davkovani, LOW); // pokud svítí senzor, že jsou dveře zasunuté a senzor dávkování svítí pro zasunutí, vysuň dávkování, počkej delay(4000); digitalWrite(davkovani, HIGH); // a pak ho zase zasuň } // po sem kód funguje, pokud připojím následující, tak se to celé rozhodí if(digitalRead(dvereVysunute) == HIGH && digitalRead(davkovaniZasunute) == HIGH && digitalRead(lisovaniZasunute) == HIGH) { digitalWrite(lisovani, LOW); delay(3000); digitalWrite(lisovani, HIGH); } if(digitalRead(dvereVysunute) == HIGH && digitalRead(davkovaniZasunute) == HIGH && digitalRead(lisovaniZasunute) == HIGH) { digitalWrite(dvere, HIGH); } if(digitalRead(dvereZasunute) == HIGH && digitalRead(davkovaniZasunute) == HIGH && digitalRead(lisovaniZasunute) == HIGH && digitalRead(vyhazovaniZasunute) == HIGH) { digitalWrite(vyhazovani, LOW); } if(digitalRead(dvereZasunute) == HIGH && digitalRead(davkovaniZasunute) == HIGH && digitalRead(lisovaniZasunute) == HIGH&& digitalRead(vyhazovaniVysunute) == HIGH) { digitalWrite(vyhazovani, HIGH); } // snímače - HIGH - svítí, LOW - nesvítí, // pneumatické válce - HIGH - zasunutý, LOW - vysunutý. }
jodynek
ÚčastníkJo, tak téhle „vyfikundace“ už jsem si všimnul 🙂 Celkem mě to napoprvé zarazilo 🙂
Zbyšek Voda
ÚčastníkDobrý den, můžete sem prosím nasdílet váš program? Děkuji
Matěj Suchánek
ÚčastníkA ještě bacha na to, že modul pracuje s obrácenou logikou 😉
Attachments:
jodynek
ÚčastníkVčera jsem to vyzkoušel a opravdu to funguje.
Takže resumé: stačí propojit GND arduina s GND napájecího adaptéru pro relé shield.Děkuji Vám za dobrou radu.
Lorant
ÚčastníkJa som Library nahral pre 9225,lenže do arduina ver. 1.0.5, nechcel som novšiu, lebo som na dovolenke a môj tablet, switch má dosť málo miesta. Ale asi to bude problém. Zajtra skúsim 1.6.3. Ináč vďaka za ochotu, zajtra sa ozvem, keď sa vrátim z plavby…
ArduXPP
ÚčastníkJeště dodám, že driver se určuje dle typu LCD, když bude na přední straně displeje třeba nápis LCD-2000-9225 , tak sample code + potřební driver je na Library for Arduino-Update with Arduino IDE 1.6.3\LCD_2000_9225 , kod se nejprve nahraje do složky libraries , tam se nahraje složka LCD_2000_9225 a pak se ze složky veme examples – třeba TFTDisplayText_Mega2560 a to se zkopíruje do arduino ide a nahraje do arduino mega.
ArduXPP
ÚčastníkPodle toho odkazu jste měl dostat toto:
We provided development kit include:1, All chip’s datasheet
2, Arduino driver and sample code
3, Application notes for Arduino UNO and Arduino Mega2560
4, Source code for STM32
5, Schematic
Hned 4 je driver a určitě se najde i sample code .
Na stránce inhaos jsem našel PDF kde je jak zapojení tak i ukázka kodu pro mega – Jedná se o tento PDF http://www.inhaos.com/downcount.php?download_id=133 , víc k tomu není potřeba, je tam vše.
ArduXPP
ÚčastníkTak jak jsem to psal, mě to funguje. Já jsem třeba nemohl nahrát do chipu právě žádný kod, dokud jsem tam nedal tlačítko, ale to nebylo automatické. Tak jsem použil keramický kondenzátor a ten nahradil tlačítko. U arduino uno není tlačítko potřeba, to tlačítko nebo pro automatický je keramický kondenzátor, je jen pro usb převodník.
Nebo mám poslat schéma jak mě to funguje ?
jodynek
ÚčastníkDěkuji za odpovědi, pokusím se to dnes vyzkoušet a dám vědět.
Vojtěch Vosáhlo
ÚčastníkJo, to je dost možné. Nenašel jsem mocinformací takže jsem spíš tipoval…
darira
ÚčastníkZapoj na VCC externí zdroj +5V. Na GND připoj GND externího zdroje a Arduina. Stejný modul akorát 8x a 2x jsem takto používal a nebyl problém. Kvůli hluku a rychlosti spínání doporučuji spíše SSR relé. Jumper je pro optické oddělení vstupu, pokud se nepletu. Něco o tom se dá přečíst na této stránce.
Zbyšek Voda
ÚčastníkKdybyste pole naplnil pomocí cyklu, místo memset, jak to dopadne?
Vojtěch Vosáhlo
ÚčastníkDobrý den,
moc dokumentace u toho není ale zkuste odstranit ten jumper a pak to napájet externě.schamann
Účastník‚0‘ jsem tam mel uplne na zacatku, bylo to uplne stejne… podle dostupnych informaci tam muze byt to pole naplnene uplne libovolnym znakem. Prazdna hodnota mi vyhovuje protoze nevim presne kolik znaku mi prijde z modemu jako odpoved na AT. Navic jsem to presne takhle videl ve vice projektech, ktere se komunikaci s AT prikazy zabyvaji a je to v te konstrukci uplne bezne.
posjirka
Účastníkobávám se, že to bude tím /0 … Arduino potřebuje mít zadanou hodnotu. Empty je pro něj hazardní. Zkus mu dát hodnotu 0 nebo „“… Jestli budu mít zítra čas podívam se na to a vyzkouším to na UNO.
schamann
ÚčastníkCo není jasne ? Pole je prázdné… a kdyby v něm něco bylo tak ho pomocí memset smazu.Jde čistě jen o to že memset mi změní obsah jiné promenne se kterou nijak nesouvisí. Tak patram po duvodu. Ty poznámky vsetluji co se děje, nikoli co chci aby se dělo. Co chci je jasne z kódu.
posjirka
Účastníksice mám IQ 156, ale z tvého popisu opravdu nejsem moudrý 🙂
Není jasné co vlastně zapisuješ za pole, resp jaké hodnoty/typy hodnot tam vkládáš.
to pole musí být 1 typu proměnných. pokud tam vkládáš unsig long a char tak ti to nepůjde, resp bude ti to vyhazovat blbosti.
Buď vše převe´d na max. možný typ proměnné, nebo holt musíš pracovat s pamětí po jednotlivých byte.Vojtěch Vosáhlo
ÚčastníkJak jsem již psal, tahle chyba je normální, pojistka se zapíše jen se nepřečte zpět ve správném tvaru… USBasp vám asi na ser. komunikaci stejně nepomůže 😉
-
AutorPříspěvky