Pulec
Vytvořené odpovědi
-
AutorPříspěvky
-
Radar_1967
ÚčastníkDíky moc!!!
DunoCZ
ÚčastníkMoc díky☺
Odesláno z mého Z520 pomocí Tapatalk
BlindP
ÚčastníkAhoj, tady najdeš odpověď.
http://www.instructables.com/id/Play-Music-on-Arduino-and-TFT-Touch-Screen/
BPBlindP
ÚčastníkAhoj, české znaky si budeš muset „nakreslit“ pomocí jedniček a nul.
B01010000, //č B00100000, B01110000, B10001000, B10000000, B10001000, B01110000, 6,
http://tronixstuff.com/2013/10/11/tutorial-arduino-max7219-led-display-driver-ic/ BP
9.7.2016 v 0:15 odpověď na: Jak po stisku tlačítka zapsat a odentrovat hodnotu do serial boxu. #7581BlindP
ÚčastníkTaky to nechápu, Serial.print(„X100“) odešle DO PC X100. Pro odeslání Z PC do arduina použij ten serial monitor.
Nepotřebuješ spíš tohle?if (digitalRead(11) == LOW){ pocetPulsu = 100; }
BP
8.7.2016 v 22:49 odpověď na: Jak po stisku tlačítka zapsat a odentrovat hodnotu do serial boxu. #7579feropero
Účastníkmám toto
void process_line() {
char cmd = Serial.read();
case ‚X‘: pocetPulsu =Serial.parseInt();po zadání např X200 a enter do serial boxu jedu a funguji
ale pokud chci na zadání použít tlačítko
a dám navrhované
if (digitalRead(11) == LOW){
Serial.println(„X100“);
}
nebo
Serial.print(„X“);Serial.println(„100“);//coz by melo byt stejné
nebo
Serial.print(„X“);Serial.print(„100“);Serial.print(‚\r‘);Serial.print(‚\n‘);nic se neděje jen se to vypíše do serial okna
ArduXPP
ÚčastníkAno už jsem se jednou ptal, šlo o rx a tx , nešlo o analog pin a4 a a5 u UNO .
Zbyšek Voda
ÚčastníkUž jsem to jednou k vašemu příspěvku psal Aleši, ale napíšu to znovu.
Logické úrovně 5V a 3.3V (a další) není dobré míchat dohromady. Některé piny mohou být tolerantní, ale může se také stát, že najednou zapojení přestane fungovat, protože to daný pin už prostě nevydrží a dá docela práci odhalit, že nějaký pin odešel.
Takže ano, zapojení většinou funguje, ale není to dobrá praktika…7.7.2016 v 22:09 odpověď na: Jak po stisku tlačítka zapsat a odentrovat hodnotu do serial boxu. #7575Zbyšek Voda
ÚčastníkDobrý den,
moc nerozumím vašemu popisu.
Jestli chcete odeslat „X100“, za kterým následuje nový řádek, tak stačí napsat:
Serial.println("X100");
Když to dáte dohromady s tím tlačítkem, v nejjednodušším případě vypadá kód takto:if (digitalRead(11) == LOW){ Serial.println("X100"); }
Aleš
ÚčastníkNapřímo. Alespoň já to tak zapojuju, a přes rok to běží bez problému 🙂
Zbyšek Voda
ÚčastníkDobrý den, tento problém je trochu zapeklitý.
Hlavní příčinou problému je to, že funkce, kterou připojujete pomocí
attachInterrupt()
nesmí mít žádný parametr. Vaše funkcevoid mmT25::_irqHandler();
sice viditelně žádný parametr nemá, ale jelikož je metodou objektu, je jí automaticky předávám parametr, který je instancí objektu, ke kterému náleží.Odtud pochází také error, který při kompilaci váš kód hlásí:
cannot convert ‚mmT25::_irqHandler‘ from type ‚void (mmT25::)()‘ to type ‚void (*)()‘
neboli nemůžu překonvertovat funkci, která má jeden parametr – instanci objektu mmT25 – na funkci, která nemá žádný parametr.Přiznám se, že neznám řešení vašeho problému, ale na tomto fóru: https://forum.arduino.cc/index.php?topic=41713.0 problém řeší a zjevně i úspěšně 🙂
Vojtěch Vosáhlo
ÚčastníkAhoj,
pokud vím tak by to mělo být přes arduino možné ale musíš mít esp v programing modu. To se dělá tak že dáš reset a GPIO0 na zem a poté odpojíš reset a po chvíli GPIO0 (nejsem si 100% jistý že můžeš piny jen odpojit, bylo by lepší dát je přes pullup na 3.3V) to by mělo fungovat. Pokud si na tom dobře s AJ tak jsem našel článek, http://whatimade.today/esp8266-easiest-way-to-program-so-far/ , který to výborně popisuje, je tam i obvod který můžeš dát dohromady abys to měl jednodušší.
Hodně štěstí.Nacelnik
ÚčastníkAhoj, je tam delay 750 ms mezi jednotlivými měření.
S ěma statusama mi to přijde jako dobrý nápad.
Pak tedy vyhodnocení bude takové:if ((A&&B&&C) = 1)
?vladik
Účastníkpotřeboval bych vyřešit podobný problém, sledovat 4 teploty termočlánek K + otáčky a zaznamenávat. Hledám někoho kdo mi to vyrobí. napište mi hejna@ausys.cz. Díky.
posjirka
Účastníkněják tam nevidím to zpoždění 750ms mezi měřením …
ověřil sis hodnotu „hyst“-ereze jak se ti v daném čas mění,
Zkusil bych rozdělit program na měření, vyhodnocení s podmíněnou reakcí.
Abych to upřesnil:
měření máš vyřešené, ale v podstatě ti přímo ovlivňuje výsledek (sepnutí relé).
Já bych to vzal formou statusu. Použij proměnou stav a když bude měření vycházet na sepnutí dej mu honotu 1, jinak 0
Vyhodnocení – tady si teprve řekni zda ty statusy jsou v kombinaci vhodné pro pokračování sepnutí rele nebo ne. Navíc bych to řešil formou podmínky, že např, relé musí být sepnuté po min.3 cykly smyčky loop. Zave´d si proměnnou „pocitadlo“ a když je požadavek na sepnutí dej mu hodnotu např.“3″.
Když je požadavek na vypnutí sniž hodnotu o „-1“
Když je „pocitadlo = 0“ vypni rele jinak rele zapni.Mám správný směr myšlenek s tím co potřebuješ nebo jsem to špatně pochopil?
Zbyšek Voda
ÚčastníkTo vytvoření pole přes
Bounce bouncer[5];
jsem také zkoušel, ale nějak to kompilátor nebral. Přitom by to takto mělo C++ podporovat.
Proto jsem šel tou cestou přes malloc().BorgMcz
ÚčastníkNo zkoušel jsem co se dalo, ale výsledek mám stále s nějakou chybou.
Nemohl bych to poslat s mailem, kde bych vyznačil problémová místa.
můj mail mm.svet(za.vi.nac)centrum.czopravdu díky za pomoc
posjirka
Účastníksouhlasím se Zbyškem. Asi jedinou variantou je udělat pole objektu (nikoliv proměnných …), které se nadefinuje jako rozěmr pole a poté se pro každý záznam/buňku pole vytvoří instance objektu. Vcelku hezká diskuze a vysvětlení je třeba tu:
https://forum.arduino.cc/index.php?topic=80913.0Zbyšek to napsal velmi správně jen je to v tom textu těžko čitelné.
v podstatě tě zajímá pouze tato část:int BUTTON[] = {2,3,4,5,6}; //button pins const int numButtons = 5; Bounce bouncer[5]; for( int i = 0; i < numButtons; i++){ Bounce bouncer[i] = (BUTTON[i], 5); }
Jinak doporučuju použít standardní řadu proměnných, už jen z důvodu omezené kapacity paměti RAM. Například v C# bych si toto dovolil a použil spíš kolekci než pole pro lepší manipulaci se záznamy. V poli musíš nadefinovat jak bude veliké a v případě zmany velikosti provést „přenesní hodnot“. s kolekcí můžeš dělat co chceš. Je však náročná na paměť a Arduino jinepodporuje. Chci tím říst, že stejně na začátku budeš muset nadefinovat kolik těch objektů budeš chtít vytvořt a ověřit si že máš dostatek volných prostředků. Navíc se budeš odkazovat na objekty jako na realtivní adresy, … Prostě mi to trochu v hlavě nabourává tu jednoduchost řešení případů, pro kterou bylo arduino navrženo…. tyto procesy bych spíš řešil na raspberry pi.
Zbyšek Voda
ÚčastníkDobrý den, pošlu vám celý kód určený pro LEDky ze článku.
class LED{ private: int pin; boolean stav = LOW; //výchozí stav LED je vypnuto void nastav(boolean); public: LED(int); void zapni(); void vypni(); void prepni(); boolean vratStav(); }; LED::LED(int p){ pin = p; pinMode(pin, OUTPUT); digitalWrite(pin, stav); } void LED::zapni(){ nastav(HIGH); } void LED::vypni(){ nastav(LOW); } void LED::prepni(){ nastav(!stav); //nastaví LED na obrácenou hodnotu (0->1, 1->0) } void LED::nastav(boolean s){ stav = s; Serial.print("Nastavuji "); Serial.print(stav); Serial.print(" na pinu "); Serial.println(pin); digitalWrite(pin, stav); } boolean LED::vratStav(){ return stav; } #define NO_OBJECTS 6 LED *LEDS = (LED*)malloc(NO_OBJECTS * sizeof(LED)); void setup() { Serial.begin(9600); for(int i = 0; i < NO_OBJECTS; i++){ LEDS[i] = LED(i); } for(int i = 0; i <= 10; i++){ LEDS[2].prepni(); delay(500); } } void loop() { }
Důležité části jsou:
#define NO_OBJECTS 6
Řekne programu, že bude celkem 6 LEDEK/TLAČÍTEK…LED *LEDS = (LED*)malloc(NO_OBJECTS * sizeof(LED));
Vytvoří se ukazatel na datový typ LED. Funkce malloc alokuje v paměti prostor pro budoucí pole – potřebuje vědět, jak bude velké. Proto se jí jako parametr předá velikost jednoho objektu LED (sizeof) ponásobená počtem objektů v poli. Funkce malloc vrací datový typ void*, takže je potřeba ho ještě před uložením do LEDS přetypovat na LED*. Dále už se dá s LEDS pracovat jako s normálním polem.Nevím, jestli je toto nejjednodušší cesta, ale nenapadla mě jednodušší.
for(int i = 0; i < NO_OBJECTS; i++){ LEDS[i] = LED(i); }
Do pole LEDS poukládá objekty LED na daných pinech.
for(int i = 0; i <= 10; i++){ LEDS[2].prepni(); delay(500); }
Postupně bliká ledkami.
Snad to je pochopitelné. Kód by měl jednoduše jít předělat pro vaše potřeby. Pole by mohlo vypadat takto:
RBD::Button *pole = (RBD::Button*)malloc(NO_OBJECTS * sizeof(RBD::Button));
Jeho naplnění potom:
for(...){ pole[i] = RBD::Button(i); }
posjirka
Účastníkotočení klíče do 2. polohy je nejjednodušší varianta a v podstatě je tam to arduino už zbytečné. jak jsem ti posílal odkaz tak to je analogová konstrukce za pár korun a bez programování. Jen pro pořádek dobrá rada: používej autorelé na 12V. Jsou veliké ale budou spolehlivé.
rumy
Účastníkjedna sa o hondu accord rocnik 2005
ten druhy bod by mala byt ta filtracia pri to meracom bode?
ale aj tak snazim sa to spavit co najmensie tak uvazujem nad tym ze by som to jednoducho tak spravil ze ked sa zapne arduino tak cca za 5s sa zapnu svetla.. lebo arduino zapinam tak ze otocim kluc do polohy II a arduino sa zapne..posjirka
Účastníktady je spoustu faktoru, které to můžou ovlivňovat:
– rušení od řídících jednotek
– načnutý alternátor
– špatná zem
– ….
Máš 2 možnosti:
1, neuvádíš jaký je to auto. Postaru se to řešilo tak, že místo sledování baterie se sledovalo zde je napětí za ořechem (spínací skříňka), která zapíná třeba autorádio atd. Pak bys nemusel sledovat nic analogového jen je/není napětí. jednoduchá konstrukce je třeba tady:
http://paja-trb.cz/konstrukce/aut_svetla.html
2, musíš to napětí , které přivádíš nejdřív oddělit (diodou) a pak vyfiltrovat (kondenzátor 100n + 470u proti zemi).ArduXPP
ÚčastníkVím na co se ptám, chtěl jsem FT232RL FTDI Basic USB, který umožňuje přes ISP6PIN nahrát bootloader. Když mi to nešlo tak jsem automaticky využil možnost Arduino Uno za pomoci kodu ArduinoISP . A pak jsem napsal dotaz jak nahrát bootloader přes FT232RL FTDI Basic USB . Sám FT232RL FTDI Basic USB dělá i to co popisuji v dalším příspěvku .
A taky by mě zajímalo, jestli jde u toho čipu Atmel ATMega328P-PU změnit z 5V na 3.3V logiku, jako je to u Arduino Pro Mini ATMega328P 3.3V, když bych využil samotný čip.
V odpovědi nebylo řečeno, že to jde jen přes ICSP
posjirka
Účastníkvíš vubec na co se ptáš?
Na začátku řešíš nahrání bootloaderu … to jde jedině přes ICSP.
Když ti dám alternativní návod tak píšeš že je na jiný čip a ve výsledku zjistím, že řešíš komunikaci přes UART …ArduXPP
ÚčastníkTen návod je na jiný typ chipu.
Samotný čip jsem zprovoznil rychle přes ArduinoISP . U FT232RL FTDI Basic USB
mi to ukazovalo chybu, když jsem dal DTR na reset docházelo k chybě, když jsem odpojil DTR tak docházelo k chybě no a poslední co jsem vyzkoušel bylo prostě přes jumper dat DTR a připojit na volný nevyužitý místo na nepájivé kontaktní pole tak najednou se kod nahrál a led svítila . Mám ještě převodník CP2102 , a tam to funguje bez problému nahrávání. Tak nevím proč u FT232RL FTDI Basic USB jde nahrát kod jen když se dá na volné pole . Tohle dělá jen u samotnýho čipu, který jsem dal dohromady podle návodu. U ostatných zařízení jako esp8266 to chybu nevykazuje a nemusím DTR dávat na volné pole.posjirka
Účastník1. nejspíš nemáš nainstalovaný ovladač pro FT232
2. zkontroluj si zda máš správný port COMxx
3. zkontroluj si typ programátoru
4. zkontroluj si výběr správné desky arduino
5. nevím jestli arduino podporuje FT232 jako ISP programator
6. pokud sis tam (do atmegy) zkoušel něco nahrávat mohl jsi nastavit špatné pojistky
7. zkus jiné arduino.
8. zkus jiný programátor – můžeš využit i jiné arduino s programem Aruino as ISP promammer a dáš kondenzátro 10uF mez reset a zem …Use Arduino as an ISP programmer to program non-Arduino AVR microcontrollers
havala4
ÚčastníkDíky za radu vše funguje jak má.
Aleš
ÚčastníkOtočit trimrem nepomůže?
havala4
Účastník//Please download the Arduino library!
//The link:http://www.dfrobot.com/image/data/DFR0154/LiquidCrystal_I2Cv1-1.rar
//DFRobot.com
//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include <Wire.h>
#include <LiquidCrystal_I2C.h>#if defined(ARDUINO) && ARDUINO >= 100
#define printByte(args) write(args);
#else
#define printByte(args) print(args,BYTE);
#endifuint8_t bell[8] = {0x4,0xe,0xe,0xe,0x1f,0x0,0x4};
uint8_t note[8] = {0x2,0x3,0x2,0xe,0x1e,0xc,0x0};
uint8_t clock[8] = {0x0,0xe,0x15,0x17,0x11,0xe,0x0};
uint8_t heart[8] = {0x0,0xa,0x1f,0x1f,0xe,0x4,0x0};
uint8_t duck[8] = {0x0,0xc,0x1d,0xf,0xf,0x6,0x0};
uint8_t check[8] = {0x0,0x1,0x3,0x16,0x1c,0x8,0x0};
uint8_t cross[8] = {0x0,0x1b,0xe,0x4,0xe,0x1b,0x0};
uint8_t retarrow[8] = { 0x1,0x1,0x5,0x9,0x1f,0x8,0x4};LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 20 chars and 4 line display(All jumpers should be connected!)
void setup()
{
// Serial.begin(57600);
lcd.init(); // initialize the lcd
lcd.backlight();lcd.createChar(0, bell);
lcd.createChar(1, note);
lcd.createChar(2, clock);
lcd.createChar(3, heart);
lcd.createChar(4, duck);
lcd.createChar(5, check);
lcd.createChar(6, cross);
lcd.createChar(7, retarrow);
lcd.home();lcd.setCursor(0, 0);
for(int i = 0;i < 20; i++) lcd.printByte(6);
lcd.setCursor(0, 1);
lcd.printByte(6);
lcd.print(“ Hello world „);
lcd.printByte(6);
lcd.setCursor(0, 2);
lcd.printByte(6);
lcd.print(“ i „);
lcd.printByte(3);
lcd.print(“ arduinos! „);
lcd.printByte(6);
lcd.setCursor(0, 3);
for(int i = 0;i < 20; i++) lcd.printByte(6);
// lcd.clear();}
void loop()
{}
letakp
ÚčastníkDíky psjirko za upozornění, já si to bral jako překlad z ArduinoIDE Kopírovat pro použití ve fóru a ono to dělá toto.
Správná varianta je:#include <Wire.h> #define DS3231_I2C_ADDRESS 0x68 // Convert normal decimal numbers to binary coded decimal byte decToBcd(byte val) { return( (val/10*16) + (val%10) ); } // Convert binary coded decimal to normal decimal numbers byte bcdToDec(byte val) { return( (val/16*10) + (val%16) ); } int svetlo1 = 9; int sviti = 0; int den = 0; int jas = 0; byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; void setup() { Wire.begin(); Serial.begin(9600); // set the initial time here: // DS3231 seconds, minutes, hours, day, date, month, year //setDS3231time(00,59,18,7,05,06,16); } void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year) { // sets time and date data to DS3231 Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // set next input to start at the seconds register Wire.write(decToBcd(second)); // set seconds Wire.write(decToBcd(minute)); // set minutes Wire.write(decToBcd(hour)); // set hours Wire.write(decToBcd(dayOfWeek)); // set day of week (1=pondeli, 7=nedele) Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31) Wire.write(decToBcd(month)); // set month Wire.write(decToBcd(year)); // set year (0 to 99) Wire.endTransmission(); } void readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // set DS3231 register pointer to 00h Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); // request seven bytes of data from DS3231 starting from register 00h *second = bcdToDec(Wire.read() & 0x7f); *minute = bcdToDec(Wire.read()); *hour = bcdToDec(Wire.read() & 0x3f); *dayOfWeek = bcdToDec(Wire.read()); *dayOfMonth = bcdToDec(Wire.read()); *month = bcdToDec(Wire.read()); *year = bcdToDec(Wire.read()); } void displayTime() { ; // retrieve data from DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // send it to the serial monitor Serial.print(hour, DEC); // convert the byte variable to a decimal number when displayed Serial.print(":"); if (minute<10) { Serial.print("0"); } Serial.print(minute, DEC); Serial.print(":"); if (second<10) { Serial.print("0"); } Serial.print(second, DEC); Serial.print(" "); Serial.print(dayOfMonth, DEC); Serial.print("/"); Serial.print(month, DEC); Serial.print("/"); Serial.print(year, DEC); Serial.print(" Den: "); switch(dayOfWeek){ case 7: Serial.println("nedele"); break; case 1: Serial.println("pondeli"); break; case 2: Serial.println("utery"); break; case 3: Serial.println("streda"); break; case 4: Serial.println("ctvrtek"); break; case 5: Serial.println("patek"); break; case 6: Serial.println("sobota"); break; } } void loop() { pinMode(svetlo1,OUTPUT); displayTime(); // display the real-time clock data on the Serial Monitor, delay(1000); // every second byte s, m, h, dvt, dvm, mesic, r; readDS3231time(&s, &m, &h, &dvt, &dvm, &mesic, &r); if (h >= 8 && h < 20) den = 1; // nastaveni intervalu sviceni else den = 0; for (byte brightness = 0; den == 1 && sviti == 0 && brightness <= 255; brightness ++) { displayTime(); // display the real-time clock data on the Serial Monitor, analogWrite(svetlo1, brightness); if(brightness == 255) sviti = 1; delay(5000); } for (byte brightness = 255; den == 0 && sviti == 1 && brightness >= 0; brightness --) { displayTime(); // display the real-time clock data on the Serial Monitor, analogWrite(svetlo1, brightness); if(brightness == 0) sviti = 0; delay(5000);} }
A zatím, co ji testuju už skoro týden, tak chodí bez problémů.
Na ty pole, jak jsi mi nastínil se moc necítím. Trochu jsem to četl, ale asi jsem už starší a pomaleji chápu, tak radši budu mít tuto jistotu. Ale i tak díky za popostrčení, bylo to velmi užitečné, myslím i pro vnouzirozbijsklo. -
AutorPříspěvky