Konverze do jazyka Arduina

Raspberry, Arduino, Mini-PC a další

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
elnovy
Příspěvky: 769
Registrován: 04 črc 2010, 02:00
Bydliště: ČR - JČ
Kontaktovat uživatele:

Konverze do jazyka Arduina

#1 Příspěvek 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
Přílohy
PROGRAM PRACUJE.png
el.návrhář HW a SW a DPS

Uživatelský avatar
wirerobot
Příspěvky: 13
Registrován: 12 čer 2019, 02:00

#2 Příspěvek 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);
}

Uživatelský avatar
elnovy
Příspěvky: 769
Registrován: 04 črc 2010, 02:00
Bydliště: ČR - JČ
Kontaktovat uživatele:

#3 Příspěvek 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
el.návrhář HW a SW a DPS

Uživatelský avatar
FHonza
Příspěvky: 1443
Registrován: 20 lis 2012, 01:00
Bydliště: Praha

#4 Příspěvek 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)

Uživatelský avatar
wirerobot
Příspěvky: 13
Registrován: 12 čer 2019, 02:00

#5 Příspěvek 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;   
    }
  }
} 


Uživatelský avatar
elnovy
Příspěvky: 769
Registrován: 04 črc 2010, 02:00
Bydliště: ČR - JČ
Kontaktovat uživatele:

#6 Příspěvek 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 !!!
el.návrhář HW a SW a DPS

Uživatelský avatar
misocko
Příspěvky: 1250
Registrován: 26 čer 2009, 02:00
Bydliště: Hlohovec (Sk)

#7 Příspěvek 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
Naposledy upravil(a) misocko dne 30 srp 2019, 12:06, celkem upraveno 1 x.

Uživatelský avatar
mhepp
Příspěvky: 30
Registrován: 16 srp 2017, 02:00

#8 Příspěvek 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]

Uživatelský avatar
elnovy
Příspěvky: 769
Registrován: 04 črc 2010, 02:00
Bydliště: ČR - JČ
Kontaktovat uživatele:

#9 Příspěvek 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
el.návrhář HW a SW a DPS

Uživatelský avatar
elnovy
Příspěvky: 769
Registrován: 04 črc 2010, 02:00
Bydliště: ČR - JČ
Kontaktovat uživatele:

#10 Příspěvek 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
el.návrhář HW a SW a DPS

Uživatelský avatar
elnovy
Příspěvky: 769
Registrován: 04 črc 2010, 02:00
Bydliště: ČR - JČ
Kontaktovat uživatele:

#11 Příspěvek 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í
Přílohy
ZAPOJENI ESP 12 and ADC.png
el.návrhář HW a SW a DPS

Uživatelský avatar
rnbw
Příspěvky: 32312
Registrován: 21 bře 2006, 01:00
Bydliště: Bratislava

#12 Příspěvek od rnbw »

Kolko si za to potom vypytas od nejakeho chudaka zakaznika, co naletel na tvoju uzasnu ponuku?

Uživatelský avatar
elnovy
Příspěvky: 769
Registrován: 04 črc 2010, 02:00
Bydliště: ČR - JČ
Kontaktovat uživatele:

#13 Příspěvek 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
el.návrhář HW a SW a DPS

Uživatelský avatar
mhepp
Příspěvky: 30
Registrován: 16 srp 2017, 02:00

#14 Příspěvek 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.

Uživatelský avatar
ZdenekHQ
Administrátor
Administrátor
Příspěvky: 25593
Registrován: 21 črc 2006, 02:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#15 Příspěvek 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ů...
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[?
]

Odpovědět

Zpět na „Miniaturní počítače (Arduino, Raspberry a další)“