arduino
Vytvořené odpovědi
-
AutorPříspěvky
-
dehtak
Účastníku arduina mam v loop
if(Serial.available()==3){ int inData[3] = { Serial.read(), Serial.read() , Serial.read()}; // odesle odpoved zda je arduino pripojeny if (inData[2]==1){SendData[0]=1; SendData[1]=1; Serial.print(SendData); // jedna se o akci nastavit kanal odesle prijmuta data funkci setRGB if (inData[2] == 2){ setRGB(inData[0],inData[1]); //odesle TLC5940 } }
posjirka
Účastníkzáleží jaký klon máš na mysli.
Obecně jsou na originální desky použité „testované“ proesory, na klony dají co jim přijde pod ruku. navíc některé klony využívají jako převodník USB-UART čip CH340G místo původních FT232, nebo Atmega8 (s programem převodníku).Co se týká samotných procesorů, občas narazíš na téme stability klonů, šumy na analogových vstupech, ….
Já třeba používám klon SEEEDUINO V2 a jsem nadmíru spokojen. Krom toho mám jetě noname klon Arduino mini pro a pro ostatní aplikac epoužívám samotné čipy + krystal programované přes ICSP port (Arduino dělá programátor). …
Snad jsem pomohlposjirka
Účastníktady jsi ve střídavé soustavě. Jaký máš kosinus fi ?
Ten se i mění podle typu zátěže (kapaciní, indukční, …)alan
ÚčastníkZkoušel jsem také přidat další funkci níže v programu poslat. Dal jsem tam pauzu 20 vteřin než se pošle „end“. Ale mám s tím podoboný problém, Tentokrát jsem schopen odeslat čísla najednou ale celý program čeká 20s. Místo toho aby mi to nejdříve odeslalo čísla 123 a pak po 20s end, tak mi to odešle end a až pak čísla a pak znovu po 20 vteřinách end. Což nechápu, protože nedjříve volám void loop a az pak void poslat.
end
123end
void setup (){ Serial.begin(9600); Serial.flush(); digitalWrite (13, HIGH); //turn on debugging LED } void loop (){ int i=0; char commandbuffer[100]; if(Serial.available()){ delay(100); while( Serial.available() && i< 99) { commandbuffer[i++] = Serial.read(); } commandbuffer[i++]='\0'; } if(i>0) Serial.println((char*)commandbuffer); poslat(); } void poslat(){ delay(20000); Serial.println("end"); }
alan
ÚčastníkNevím proč, ale když nechám v arduinu jen `byte byteRead;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);}
void loop() {
// put your main code here, to run repeatedly:if(Serial.available( )){
byteRead = Serial.read();
Serial.write(byteRead);`
Přečte a odešle mi to jednotlivá čísla dohromady. Tudíž, když zadám třeba i posloupnost dlouhoo(123456789), zobrazí se to i ve stejném pořadí. Když jsem zkoušel upravit kod v arduinu podle vašich rad, tak už v sériovém monitoru mi to ukazovalo ty prázdné znaky postupně „1 2 3 4“. Takže i kdyby se mi to povedlo úspěšně načíst v matlabu, tak by to odeslalo dřív další posloupnost než je potřeba. Myslím si, že je problém jen v arduinu, tam prostě potřebuji přijat ty čísla dohromady, pak je i dohromady odeslat. Počkat chvíli a odeslat nějaký indikátor, který budu schopný v matlabu načíst, když ho načtu, tak azdám další posloupnost čísel z klávesnice.
Dám sem ještě originální kód, který používám v matlabu, ještě bez toho kroku kde má porovnat string nebo netisknutelný znak.clear all; clc; b=Bluetooth('HC-05', 1); %vytvoreni bluetooth objektu i = input('Zadej posloupnost: ','s'); % Zadávání číselné posloupnosti z klávesnice fopen(b); %otevreni komunikace fwrite(b,i); %zapis ciselne posloupnosti d = fscanf(b, '%s'); % oskenovani prijatych dat disp('Zadana posloupnost: '); %vypise na monitor disp(d); fclose(b);
Zbyšek Voda
ÚčastníkTakže to bude spíš něco jako:
if(Serial.available()){ prijato = Serial.read(); if(prijato == start){ prijato = Serial.read(); while(prijato != stop){ prijato = Serial.read(); //zpracování přijatých dat } } }
posjirka
Účastníkto je přesně ono …
a na druhé straně čekáš na přijem znaku „start“, pak budeš číst všechno ve smyčce dokud nepřijmeš znak „stop“alan
ÚčastníkAbych byl upřímný, tak úplně nevím co máte namysli nebo jak to mám zakomponovat do programu. Měl bych tedy na začátku programu vytvořit, ty proměnné
char start = char(1); char stop = char(2);
A poté upravit to přijímání a odesílání?
if(Serial.available( )){ byteRead = Serial.read(); Serial.write(start); Serial.write(byteRead); Serial.write(stop); delay(20000); Serial.write("e");
Zbyšek Voda
ÚčastníkŘekl bych, že tím Posjirka myslel to, že si vyberete dva znaky, které budou ohlašovat začátek a konec posílaného řetězce – ty budou vždy stejné, ať budete posílat cokoliv.
Aby nemohlo dojít k tomu, že budete posílat data, která by mohla obsahovat počáteční, či koncový znak, navrhuje použít netisknutelné znaky – například ty, které mají v ASCII tabulce hodnotu 1 a 2. char(1) a char(2) tedy reprezeentují dva znaky s touto hodnotou.
Mějme tedy dva znaky:
char start = char(1); char stop = char(2);
Obě strany pak budou vědět, že to, co přijaly mezi znaky 1 a 2 je požadovaná zpráva.
Tedy pošlete start data stop.Lepší? 🙂
alan
ÚčastníkJde o to, že ta posloupnost čísel bude vždy jiná. Takže nemůžu nastavit natvrdo o bude začátek a co konec komunikace. Jinak nevím co jste tím myslel.
posjirka
ÚčastníkNavrhni si komunikační portokol.
asi bych šel cestou netisknutených znaků.
Postě jeden znak bude označovat začátek komunikace, druhý konec komunikace.
Třeba Char(1) bude začátek, char(2) bude konec. Vše mezi tím je string.alan
ÚčastníkJeště pro vysvětlení by to mělo být takhle
1. nejdříve odeslat 123 z amtlabu do arduina a ihned zpátky do maltabu
2. spoté poslat string „e“ z arduina do matlabu
3. tento string porovnám v matlabu a odešlu další čísla do arduinatribal.cz
Účastníktento problém jsem měl také a řešení je prakticky na facku kterou jsem si chtěl dát když se mi poprvé podařilo nahrát program. Pokud máš vše nainstalované podle toho http://digistump.com/wiki/digispark/tutorials/connecting. Tak dále postupuj následovně z příkladu vyber například blink. Poté bez zapojené desky do pc dej náhrat program. Ve stavovém řádku se ti zobrazí tato informace:
Projekt zabírá 718 bytů (11%) úložného místa pro program. Maximum je 6 012 bytů.
Globalní proměnné využívají 9 bytů dynamické paměti.
Running Digispark Uploader…
Plug in device now… (will timeout in 60 seconds)Nyní máš 1 minutu na připojení digisparku po jeho zapojení se vše nahraje a bude fungovat. Na linuxu je to trochu složitější je potřeba doinstalovat nějaké utilitky.
Je to řešené takto protože digispark využívá jako uploader micronucleus. Nikoliv standartní arduino nástroje
posjirka
Účastníkmáš 5 variant:
1, použij jiný připojovací bod napíjení. Na Arduinu máš vstup Vin a to je to samé jako napájecí konektor.
2, jdi cestou vlastního zdroje : stabilizátor 7805 + pořádné kondenzátory na vstupu.
Pak to přivedeš na +5V a je hotov.
3, Použij napájení přes USB. Prost2 nabije4ku na mobil p5es redukci na velke USB.
4, Bateriové napájení
5, na vstup připájej superkondenzátor o kapacitě třeba 1 až 10F. Ten je malý a je schopný ti překlenout tuto kolizní dobu. Pozor na velikost napětí ! Nejspíš budeš muset dát 2 do serie.Simakai
ÚčastníkAhoj všem,
narazil jsem na problém s napájením. Natočil jsem krátké video, kde je to ukázané
Jde o to, že když zahýbu s napájecím kabelem, tak se megaduino resetne, vypne, protože mu vypadne „šťáva“. Koncovka adaptéru se v „zástrčce“ trochu hýbe.
Jak se to dá řešit?
Problém je, že deska je součástí krabice, ke které je připojených několik termočlánků, a loguje z nich teploty. Krabice by právě měla být napájená z adaptéru. Ale pokud do ní někdo drbne, což se „v provozu“ může stát, tak se megaduino resetne a je to v čudu.
TomasN
ÚčastníkDíky za odpověď. Je rozdíl, když použiji 7805 s kondíky a budu Arduino napájet přes USB port? Tak jsem to taky zkoušel a neuspěl jsem….
posjirka
Účastníkjojo zdroje. Já používám Arduino jako vývojový kit a pro reálný výrobek používám samotný čip AT Mega 328 + krystal a stadardní zdroj ze 7805 a kondenzátory 1m0.
Originální Arduino má stabilizátory pro max. 150mA a kondenzátory 47u. To není nic moc.
čip programuju přes icsp rozhraní.dodo1001
ÚčastníkToto sú tie 3 cykly:
Attachments:
majkee
ÚčastníkDíky za odpoved a priklad posjirko,
zkusim tedy objednat normalni otocny vypinac typu 0->1->0 a rozchodit to s ledkou pro test.
Prislo mi akorat elegantnejsi pouzit pouze tlacitko pro kratky pulz, nez tam drzet hodnoty HIGH, LOW dle stavu vypinace, ale snad to tedy nicemu nebude vadit.
Predpokladam, ze vypinac aby se choval jako tlacitko nepredelam 😉
Michal
posjirka
Účastníktrochu nechápu požadavek = dotaz.
Potřebuješ mít vypínač/tlačítko na stěně (klasické na 230V) a porpojené s arduinem.
Když stisknu tlačítko/vypínač tak arduino něco udělá.
Resp. bude reagovat na změnu stavu tlačítka, takže ať nastane zapnutí ne bu vypnutí arduino musí udělat příslušnou akci.Zjednodušeně řečený příklad : na arduinu je LED dioda na pinu č.13.
Na pinu 2 a 3 bude po jednom vypínači.
1, Přepnu jeden vypínač = LED se rozsvítí
2, přepnu libovolný vypínač = LED zhasne.
3, přepnu libovolný vypínač = LED se rozsvítí.Chápu to správně?
Pokud ano je třeba si uvědomit, že přepnutí vypínače neznamená pevné a trvalé spojení kontaktů. Realitou je, že přepnutí doprovází spoustu hazardních impuzů, které po chvilce utichnou. Takže rychlost arduina/atmegy je spíš na škodu. Budeš muset udělat to, že uděláš tzv. „switch boucing“.
Já to třeba řeším časovou prodlevou.
Zjistím si stav tlačítek a když se změní, tak určitou dobu (cca 250ms) na další změnu nereaguji.posjirka
Účastníkpo hrubé kontrole to vypadá funkčně.
Máš tam 2x delay podle mě zbytečně.
Jen výsledný proces podmínky „if“ bych dal do složených závorek.
Napadá mě, že jestli se neresetuje sám procesor.
Bluetooth modul má celkem velkou spotřebu a po čase může zahřát a přetížit stabilizátor na desce. TO by pak znamenalo reset.
Dej si na začátek něco jako text „start“.
Když se ti objeví před změnou hodnot „start“ tak se ti resetoval čip.i tak neni nic ztraceno. můžeš si ti hodnoty zaznamenat do EEPROM a při startu si je znovu načíst. Vlastně by pokračoval tam, kde posledně skončil.
Po stisku tlačítka (nový tlačítko) + reset by si ty udaje mohl resetovat.
TO udělal tjde. jen pozor EEPRm má max.100 000 zápisu do každé buńky. Pak ta bunka není stabilní.poprad
ÚčastníkMyslel jsem si to, jen jsem se chtěl ujistit. Ale je to škoda….
Zbyšek Voda
ÚčastníkDobrý den, pokud vím, tak ne.
Musíte použít ifif(cislo > 2 && cislo < 6){...}
Popřípadě by šlo udělat
switch (Cislo) { case 3: case 4: case 5: …..; break; ….. }
Ale to asi není požadované řešení 🙂
johnyhol
ÚčastníkTak to je přesně to co bych si představoval! moc díky za tip!
Zbyšek Voda
ÚčastníkBude to jednodušší, když se s námi podělíte o kód 🙂
rakocid
ÚčastníkProblem vyrieseny. Dakujem za rady.
Hodnoty ktore som posielal boli prijate pomocou bezdrotoveho priimaca nrf24. Ked boli na väcsiu vzdialenost niektore hodnoty boli na tolko skreslene ze ich nedokazalo poslat dalej.Bohužial som sem ani tu cast programu nenapisal. Wire zbernica funguje skvele.ArduXPP
ÚčastníkUž jsem na to přišel, P0 a P1 digital a ostatní analog 🙂
Ale pořád jsem nepřišel na to proč pořád pouští proud do P5 3.3V .
posjirka
Účastníkasi bych tě odkázal na EXOSITE.
SPEKO2 to používá a nejspíš by ti dokázal poradit.
http://arduino.sk/viewtopic.php?f=6&t=250&sid=1a2a735f040bc590a27d3aba42cb4ba0johnyhol
ÚčastníkO displayi jsem už taky přemýšlel, ale nakonec jsem se rozhodl pro ethernet schield, protože bych chtěl časem sledovat stav kotle (případně i nastavovat) a taky teplotu v místnostech (nebo aspoň v obýváku) po síti a nejlépe i v mobilu s androidem. Půjde to? Úplně nejlepší by byla jednoduchá webová stránka, kde by se vypisovalo co zrovna kotel dělá a taky by tam bylo tlačítko pro zapnutí kotle na dálku v případě, že budeme někde na cestách, v baráku bude zima a budeme si chtít zatopit než přijedeme domů.
posjirka
Účastníksuper.
Jestli chceš mít na seriovem portu zprávy o počítadlech tak jen doplnň další řádky Serial.printlm();
a do závorek dej názvy proměnných.
já bych šel spíš cestou LCD displaye.
Stojí pár korun a potřebuješ na ně 6 volných pinu.
Ideální je 16×2 (16 znaku x 2 řádky).
Připojení je velmi jednoduché a pak ty zprávy co se kde děje můžeš vidět přímo na něm.
Idealni je třeba tento:
http://aukro.cz/modul-klavesice-1602-lcd-keypad-shield-arduino-i6089165384.html
Nevim jsetli se ti nebude bít s modulem RELE, protože nevím jeho zapojení.
Navic už tam máš tlačítka , takže je mužeš rovnou využít …. -
AutorPříspěvky