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í
:roll:

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ů...