Konverze do jazyka Arduina
Moderátor: Moderátoři
Konverze do jazyka Arduina
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
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
el.návrhář HW a SW a DPS
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);
}
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
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
el.návrhář HW a SW a DPS
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)elnovy píše:
PO DOSAZENI HODNOTY Y =400
JAK SEM POZADOVAL ALE FURT PRACUJE DOKOLA = cykluje
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/
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;
}
}
}
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 !!!
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í
![Rolling Eyes :roll:](./images/smilies/icon_rolleyes.gif)
Děkuji za radu !!!
el.návrhář HW a SW a DPS
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
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
Naposledy upravil(a) misocko dne 30 srp 2019, 12:06, celkem upraveno 1 x.
Pokud opravdu chceš, aby se cyklus pustil pouze jednou, tak kód uprav takhle:
Pro další běh budeš muset MCU resetovat.[/code]
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() {
}
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í
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í
el.návrhář HW a SW a DPS
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
-------
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
el.návrhář HW a SW a DPS
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.
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.
- ZdenekHQ
- Administrátor
- Příspěvky: 25593
- Registrován: 21 črc 2006, 02:00
- Bydliště: skoro Brno
- Kontaktovat uživatele:
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ů...
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]