Stránka 1 z 2
Konverze do jazyka Arduina
Napsal: 30 srp 2019, 01:58
od elnovy
Ahoj všem .Stále bojuji se psaním programů pro Studio Arduino 1.8.9
Velmi málo se mi daři zprovoznit .Nechci to vzdát .
Problém :
Fungující program napsaný v turbo basicu = viz obrázek
Chci napsat = modifikovat pro Arduino = konvertovat do jazyka Arduina
výpis programu :
REM:NAZEV PROGRAMU :TBASIC TRANSFER TO ARDUINO JAZYK
OPEN "COM2:9600,N,8,1,RS,CS,DS,CD,LF,PE" AS #1: REM OTEVRENI COM PORTU
FOR X=1 TO 3000 STEP 86 :REM PRACOVNÍ SMYCKA
Y=X/2.5 :REM VYPOCET
PRINT "Y=";Y :REM TISK NA OBRAZOVKU
REM POZADUJI VYSTUP Y NA SERIOVY MONITOR
REM POZADUJI VYSTUP Y NA SERIOVY PLOTER
IF Y > 400 THEN STOP
NEXT X
....
Děkuji za rady respektive napsání jednoduchého prográmku
aby fungoval v Arduinu.
....
poznámky :
Doba překladu = kompilace je dosti dlouhá
Komplikovanost jazyka C je mi záhadou
Napsal: 30 srp 2019, 08:57
od wirerobot
Možná tak?
Kód: Vybrat vše
float x, y;
void setup() {
Serial.begin(9600);
}
void loop() {
for (x=1; x<=3000; x=x+86) {
y = x/2.5;
Serial.println(y);
if (y>400) break;
}
delay(1000);
}
Napsal: 30 srp 2019, 10:12
od elnovy
Dík - funguje to s úpravou a s nežadoucím cyklováním :
float x, y;
void setup() {
Serial.begin(9600);
delay(10000); // v teto dobe spustim seriovy monitor
}
void loop() {
for (x = 1; x <= 3000; x = x + 86) {
y = x / 2.5;
Serial.println(y);
if (y > 400) break;
}
delay(1000);
}
namerene hodnoty :
10:02:15.098 -> 0.40
10:02:15.098 -> 34.80
10:02:15.098 -> 69.20
10:02:15.098 -> 103.60
10:02:15.098 -> 138.00
10:02:15.132 -> 172.40
10:02:15.132 -> 206.80
10:02:15.132 -> 241.20
10:02:15.132 -> 275.60
10:02:15.166 -> 310.00
10:02:15.166 -> 344.40
10:02:15.166 -> 378.80
10:02:15.166 -> 413.20
10:02:16.082 -> 0.40
10:02:16.082 -> 34.80
10:02:16.082 -> 69.20
10:02:16.082 -> 103.60
10:02:16.082 -> 138.00
10:02:16.116 -> 172.40
10:02:16.116 -> 206.80
10:02:16.116 -> 241.20
10:02:16.116 -> 275.60
10:02:16.150 -> 310.00
10:02:16.150 -> 344.40
10:02:16.150 -> 378.80
10:02:16.150 -> 413.20
10:02:17.101 -> 0.40
10:02:17.101 -> 34.80
10:02:17.101 -> 69.20
10:02:17.101 -> 103.60
10:02:17.101 -> 138.00
10:02:17.135 -> 172.40
10:02:17.135 -> 206.80
10:02:17.135 -> 241.20
10:02:17.135 -> 275.60
10:02:17.169 -> 310.00
10:02:17.169 -> 344.40
10:02:17.169 -> 378.80
10:02:17.169 -> 413.20
problem je ale v tom že NEREAGUJE NA
delay(1000);// NA KONCI PROGRAMU
STALE STEJNÉ CYKLOVANI PRO delay(100); AZ delay(10000);
DALSI PROBLEM ZE SE PROGRAM NEZASTAVI
PO DOSAZENI HODNOTY Y =400
JAK SEM POZADOVAL ALE FURT PRACUJE DOKOLA = cykluje
....
TO JSOU TAKOVE MALICKOSTI KTERE ODRADÍ ZACATECNIKA
PROSTE AT DAM POVEL STOP NEBO END KAMKOLIV
KOMPILATOR MI TO NEVEME
MOC DEKUJI ZA RADU
Napsal: 30 srp 2019, 10:33
od FHonza
elnovy píše:
PO DOSAZENI HODNOTY Y =400
JAK SEM POZADOVAL ALE FURT PRACUJE DOKOLA = cykluje
Je to tím, že funkce loop se volá neustále dokola. Tj. voláním
break se přeruší vykonávání cyklu
for a poté se opět volá funkce loop. Jestli chceš aby se při
(y > 400) přestal program vykonávat, tak místo
break napiš např.
while(1)
Napsal: 30 srp 2019, 11:02
od wirerobot
Delay na konec jsem dal jen pro příklad (nevíme, kdy chceš měřit) a nevím proč by nefungovalo, přesun na začátek smyčky musí fungovat. A loop běží do nekonečna, pro měření si musíš dodat podmínku a třeba interuptem si ji tlačítkem nastavit na true.
https://www.arduino.cc/reference/en/lan ... interrupt/
Kód: Vybrat vše
bool meritTed = false;
.
.
.
.
.
void loop() {
if (meritTed) {
meritTed = false;
for (x=1; x<=3000; x=x+86) {
y = x/2.5;
Serial.println(y);
if (y>400) break;
}
}
}
Napsal: 30 srp 2019, 11:05
od elnovy
Děkuji za radu ale i s upravou to cykluje
float x, y;
void setup() {
Serial.begin(9600);
delay(10000); // v teto dobe spustim seriovy monitor or ploter
}
void loop() {
for (x = 1; x <= 3000; x = x + 86) {
y = x / 2.5;
Serial.println(y);
if (y > 400) while(1);
}
delay(1000);
}
Pripravim program konkrétní / toto byl jen tréning /
a snad touto cestou to dám dohromady
....................
V assenbleru nebo TURBO basicu pišu skoro všechno
ale tento C jazyk mi nějak nesedí
Děkuji za radu !!!
Napsal: 30 srp 2019, 12:01
od misocko
mozno by bolo dobre napisat co od toho ocakavas
poznas zakladnu vlastnost MCU a to ze bezia furt? Toto je naj problem pre ludi ktory zacinaju programovat mcu, ked programujes nieco do PC, tak to skratka zbehne a stoji , mcu tocii furt. u nas maju aj servisaci proben pochopit ze nejake PLC bezi stale, tam uz ani ziaden Delay neexistuje....
tebe sa proste program ani mcu nezastavi ked Y >400 ale sa vrati na zaciatok loopu a bezi znova
ak ho chces zastavit (vykonat iba raz) daj ho do setupu
napis pls co to ma robit
Napsal: 30 srp 2019, 12:02
od mhepp
Pokud opravdu chceš, aby se cyklus pustil pouze jednou, tak kód uprav takhle:
Kód: Vybrat vše
float x, y;
void setup() {
Serial.begin(9600);
delay(10000); //Zde si nastav co potrebujes...
for (x=1; y<=400; x=x+86) { //v podmince FOR cyklu muzu kontrolovat co potrebuji, nemusi to byt ridici promenna (x), kontrolou y usetrim IF
y = x/2.5;
Serial.println(y);
}
}
void loop() {
}
Pro další běh budeš muset MCU resetovat.[/code]
Napsal: 30 srp 2019, 12:30
od elnovy
Děkuji za radu
+++
každou radu vítám
===
snad se to naučim
+++
občas budu potrebovat poradit
----
preji hezký vikend
Napsal: 30 srp 2019, 12:36
od elnovy
behem dne tedy napisu co to ma robit OK
to bude bomba spoluprace na EB
vsak se bude hodit i jinejm kutilům SW podpora z EB
Napsal: 30 srp 2019, 13:14
od elnovy
Co to má dělat = popis funkce:
1. program musí běžet rychle furt dokola
2. na pinu A0 procesoru ESP12 = viz obr. se nepřetržitě měři napětín DC s rozlišením 10bitu
tzn 0-1024 bude naměřená hodnota = X
3. transformace naměřené hodnoty dle tabulky takto :
Y= fce(x) dle tabulky : //nechci vyjádřeni nějakou funkci ale jen obecně tabulkou napŕiklad
X = 0-100 trvale Y= 0
X = 101-200 trvale Y= 3
X = 201-300 trvale Y= 6
X = 301-600 trvale Y= 9
X = 601-800 trvale Y= 15
X = 801-900 trvale Y= 18
X = 901-1300 trvale Y= 20
s možnosti rozšiření tabulky na vice hodnot !!!
hodnota Y se bude trvale odesilat na seriovy port rachlosti 9600
jedině tehdy pokud bude splněna podmínka Y je větši než 10 !!!
konec zadání verze 1
Děkuji za pomoc ...pracuji na tom ale jak se znám zase mi
Kompilace nepude = se zastaví
Napsal: 30 srp 2019, 13:18
od rnbw
Kolko si za to potom vypytas od nejakeho chudaka zakaznika, co naletel na tvoju uzasnu ponuku?
Napsal: 30 srp 2019, 13:51
od elnovy
popis co od toho ocekavam jsem poslal P. Misockovi SK
-------
Rozhodné nechci aby se to zde zase stalo vlaknem pro viti vlků
a kecani o ničem nebo o napadání prvotni myšlenky = viz nadpis
----
Konverze do jazyka Arduina
----
abych alespoň trochu uspokojij ŠTOURAVCE
pokud někdo chce mi poslat fungující program ať mi napíše na SZ kolik za to či ono chce a třeba se dohodneme
-----
Jak jsem psal se to C for arduano učim
a není to jen zde možno studovat
...
existuej i hafo tutoriálu
https://randomnerdtutorials.com/projects/
...
Skoda že se tu již nezobrazují hvězdičky hned by bylo vidět kdo klade FAKE
Napsal: 30 srp 2019, 14:20
od mhepp
Upřímně řečeno, tvé dotazy jsou velmi... začátečnické. Zvládáš něajký programovací jazyk? Zdá se mi, že nějaký dialekt Basic-u ano. Potom bych ti doporucil zadat si do oblíbeného vyhledávače něco jako „základy jazyka C“ a v prvních pěti odkazech určitě najdeš to, co potřebuješ. V jiném případě vyměň svůj oblíbený vyhledávač za schopnější.
Jakmile zvládneš základy jazyka C, můžeš se proklikat tutoriály, které jsou součástí Arduina a najdeš například
tento, který dělá půlu toho, co potřebuješ. Tu druhou půlku ti obslouží sada if-ů:
https://www.arduino.cc/en/Tutorial/ifSt ... onditional (aha, on je základ prgramování v C součást webových stránek Arduina! No to jsou mi ale věci!).
Pokud Ti toto nestačí jako správné posunutí vhodným směrem, tak se na to, prosím, vykašli. Bude to trápení pro Tebe i ty, kteří se Ti budou snažít pomoci. Tím, že Ti tu někdo postne hotový kód se mnoho nenaučíš, zvláště v situaci, kdy máš problém najít na 10 řádcích kódu chybějící středník.
Napsal: 30 srp 2019, 14:30
od ZdenekHQ
Já si to neodpustím - situace je patrně taková, že za měsíc se v jeho nabídce služeb objeví i programování v C++, aby byla lákavější. Jen se potřebuje naučit pár příkazů...