Keresés

Részletes keresés

Vargham Creative Commons License 2015.12.14 0 0 1361

Operációs rendszer? Verzió? Nyelv? Arduino verzió? Milyen klónt vettél? Milyen az USB illesztő rajta?

Előzmény: Ryuzaki san (1360)
Ryuzaki san Creative Commons License 2015.12.13 0 0 1360

Sziasztok!

Most ismerkedtem meg az Arduinoval és eléggé az elején el is akadtam, így szeretnék segítséget kérni.

Vettem egy ATmega2560 kínai klónt, letöltöttem a drivert hozzá, illetve az Arduino programot. És program feltöltésekor a következő hibaüzenetet kapom:

"avr-g++: error: CreateProcess: No such file or directory

exit status 1
Hiba a fordítás során."

Próbáltam angol oldalakon okosságot keresni, de nem jártam sikerrel. 

Törölt nick Creative Commons License 2015.12.13 0 0 1359

Köszi, így jó lett:

 

String dataString = "";
dataString += String(LAKASFUTES);
dataString += ",";
dataString += String(fusthofok);
dataString += ",";
dataString += String(T1);
dataString += ",";
dataString += String(T2);
dataString += ",";
dataString += String(T3);
dataString += ",";
dataString += String(T4);
dataString += ",";
dataString += String(T5);
dataString += ",";
dataString += String(T6);
dataString += ",";
dataString += String(T7);
dataString += ",";
dataString += String(kW);
dataString += ",";
dataString += String(szazalek);
dataString += ",";

File dataFile = SD.open("datalog.txt", FILE_WRITE);

// if the file is available, write to it:
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
}

Törölt nick Creative Commons License 2015.12.13 0 0 1358

4.91,-10.00,-127.00,-127.00,-127.00,-127.00,0.00,0.00,0.00,-209.44,-327.26,
1.85,-10.00,-127.00,-127.00,-127.00,-127.00,0.00,0.00,0.00,-209.44,-327.26,
1.41,-10.00,-127.00,-127.00,-127.00,-127.00,0.00,0.00,0.00,-209.44,-327.26,

 

Köszi, én is kezdő vagyok a programírásban, így jó lett.

 

String dataString = "";
dataString += String(LAKASFUTES);
dataString += ",";
dataString += String(fusthofok);
dataString += ",";
dataString += String(T1);
dataString += ",";
dataString += String(T2);
dataString += ",";
dataString += String(T3);
dataString += ",";
dataString += String(T4);
dataString += ",";
dataString += String(T5);
dataString += ",";
dataString += String(T6);
dataString += ",";
dataString += String(T7);
dataString += ",";
dataString += String(kW);
dataString += ",";
dataString += String(szazalek);
dataString += ",";

File dataFile = SD.open("datalog.txt", FILE_WRITE);

// if the file is available, write to it:
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
}

Előzmény: Zizikus (1356)
Törölt nick Creative Commons License 2015.12.13 0 0 1357

Köszi, én is kezdő vagyok!

 

Így lett jó:

4.91,-10.00,-127.00,-127.00,-127.00,-127.00,0.00,0.00,0.00,-209.44,-327.26,
1.85,-10.00,-127.00,-127.00,-127.00,-127.00,0.00,0.00,0.00,-209.44,-327.26,
1.41,-10.00,-127.00,-127.00,-127.00,-127.00,0.00,0.00,0.00,-209.44,-327.26,

11 adat.

 

String dataString = "";
dataString += String(LAKASFUTES);
dataString += ",";
dataString += String(fusthofok);
dataString += ",";
dataString += String(T1);
dataString += ",";
dataString += String(T2);
dataString += ",";
dataString += String(T3);
dataString += ",";
dataString += String(T4);
dataString += ",";
dataString += String(T5);
dataString += ",";
dataString += String(T6);
dataString += ",";
dataString += String(T7);
dataString += ",";
dataString += String(kW);
dataString += ",";
dataString += String(szazalek);
dataString += ",";

File dataFile = SD.open("datalog.txt", FILE_WRITE);

// if the file is available, write to it:
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
}
// if the file isn't open, pop up an error:
else {
Serial.println("error opening datalog.txt");
}

Előzmény: Zizikus (1356)
Zizikus Creative Commons License 2015.12.13 0 0 1356

Szia!

 

Kezdő vagyok az Arduino programozásában, de szerintem az a gond, hogy nem főzöd össze a datastringet, ezért csak a legutolsó értékadást írja ki. Mindig felülírod! Ha jól látom akkor csak a százalékot írja ki nem?

 

 

if (dataFile) {
dataFile.println(dataString);  Itt csak a százalék íródik ki, mert fentebb csak ezt az értéket veszi fel
dataFile.close();
}

 

Próbáld meg:

if (dataFile) {
dataFile.println(String(LAKASFUTES));

dataFile.println(String(fusthofok));

.

.

.

 

dataFile.close();
}

 

Vagy fűzd össze egy stringbe az egészet,

 

dataString+= String(LAKASFUTES);

dataString+= String(fusthofok);

dataString+= String(T1);

.

.

.

dataString+= String(szazalek);

 

majd:

 

if (dataFile) {
dataFile.println(dataString);
dataFile.close();
}

 

Ennek az lesz a baja, hogy nem lesz elválasztó karakter közötte! Ezt kikerülheted, ha hozzáfűzöl még pl egy pontosvesszőt (rögtön csv lesz belőle, duplaklikk és máris az excel megnyitja)

 

dataString+= String(LAKASFUTES);

dataString+=";"

dataString+= String(fusthofok);

dataString+=";"

dataString+= String(T1);

dataString+=";"

.

.

dataString+= String(szazalek);

dataString+=";"

 

Nézz utána, hogy így lehet-e hozzáadni pontosvesszőt!

Előzmény: Törölt nick (1354)
John Zero Creative Commons License 2015.12.13 0 0 1355

Hmm valoban, belegondoltam, a Malna PC ide feleslegesen overkill, tul sok... Lehetne hasznalni, de tul bonyolult, es valoban nem olyan stabil mint egy egyszeru modul (amugy azert stabil).

Előzmény: Zizikus (1353)
Törölt nick Creative Commons License 2015.12.12 0 0 1354

String dataString = "";
dataString = String(LAKASFUTES);
dataString = String(fusthofok);
dataString = String(T1);
dataString = String(T2);
dataString = String(T3);
dataString = String(T4);
dataString = String(T5);
dataString = String(T6);
dataString = String(T7);
dataString = String(kW);
dataString = String(szazalek);

File dataFile = SD.open("datalog.txt", FILE_WRITE);

// if the file is available, write to it:
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
}
// if the file isn't open, pop up an error:
else {
Serial.println("error opening datalog.txt");

 

SD kártyára kellene kiírni a String(LAKASFUTES);..... String(szazalek); adatokat,

jelenleg csak mindig 1-et sikerül.

Hogyan lenne helyesen a kód?

Zizikus Creative Commons License 2015.12.12 0 0 1353

Szia!

 

Elsőként köszönöm a válaszokat mindenkinek!

 

Épp ezért nem is vágtam bele az arduinos projectnek (egyelőre), mert rögtön a sebesség problémába ütköztem. Tanulni, megérteni, eredményeket felmutatni azért azzal is lehet, mert a prototípus elkészültéig néhány biztosan megpörkölődik! :-)

 

Csak 4MHz az SPI az Arduinon? Azt hittem, hogy a beépített óra frekvenciájával képes meghajtani... Sebaj, megoldom másképpen.

 

Léteznek nagyon komoly de ennek ellenére még mindig olcsónak nevezhető AD konverterek (TI pl) amik nekem jók lennének, de azokban nincs , vagy csak kevés memória. A memória azért kellene, mert a mérés tényleg off line lenne, így sokkal gyorsabb mintavételezés érhető el, valamint nem kell annyit gondolkodni, hogy mennyi óraciklust visz el egy közbeiktatott kontroller. Ezek előnye továbbá, hogy több mintát tudok venni.

 

Az azonnali feldolgozás annyit jelent, hogy az adott számú minta után meg kell jeleníteni, FFT-vel szűrni stb a PC-n, majd ha minden ok, akkor mehet a következő mérés. Itt jön a képbe az idő...

 

"Ha feltétlen fontos az azonnali feldolgozás, akkor a legkézenfekvőbb valamilyen automatizmus futtatása a PC-n, egy külön USB port, aztán hajrá! Kis ügyekedéssel megoldható, hogy a mentett 256 kB-os csomag mass storage eszközként egyszerűen (és automatikusan) áthúzható legyen a PC-re."

 

Ez már tetszik!!!! :-)

 

Az egész ARDUINO ott jött csak a képbe, hogy az adatokat a PC felé annak segítségével küldeném, de ha nem szükséges, az még jobb!

 

Már sokat segítettetek! Köszönöm! Ha van még javaslatotok, akkor ne kíméljetek! :-)

 

Málna PC-azért nem szimpi eddig, mert ott meg Linux fut, nem tudom mennyire gyorsan boot-ol, mennyire stabil, stb.

 

Azonban, ha megoldható egy cél gép megalkotása, akkor ok! :-)

Előzmény: Prof (1352)
Prof Creative Commons License 2015.12.12 0 0 1352

Szia,

Oké, vegyük az „alját”, 10 kHz-en mintavételezel 24 biten egy analóg jelet. Ezt oldd meg azzal, ami bevált, a végén alighanem valami átmeneti tárba kiírja ezt a 256K-t, amit te onnan ki szeretnél olvasni és automatikusan egy PC-re írni.

Mindenekelőtt én megnézném, hogy van-e erre kész eszköz (szinte mindenre van). Ha nincs, akkor kell tovább agyalni.

Ha az egész projektből SEMMI nincs meg, akkor -- szerintem -- nagyjából most lenne érdemes felhagyni vele, mert nagyon-nagyon mélyre kell ásni a mérnöki tudományokban, hogy működő, megbízható és többé-kevésbé (az elvárásoknak megfelelően) hiteles méréseid legyenek (egyébként nem sok értelme van).

A nagyon nagy kérdés, hogy neked mennyi idő a „MINÉL gyorsabban”? Ha a mérés lehet off-line is, akkor én egyszerűen betennék egy nagyobb (2 GB) memóriakártyát, hogy írja arra. Ez pont 8000 méresre elég, ha jól számolom (de lehet hogy nem, ez esetben bocsánatot kérek). Mindegyik külön címkézett fájlba.

Ha feltétlen fontos az azonnali feldolgozás, akkor a legkézenfekvőbb valamilyen automatizmus futtatása a PC-n, egy külön USB port, aztán hajrá! Kis ügyekedéssel megoldható, hogy a mentett 256 kB-os csomag mass storage eszközként egyszerűen (és automatikusan) áthúzható legyen a PC-re. Ez gyakorlatilag 1-2 másodperc maximum.

Az SPI erre (elvben) alkalmas, de a végponti eszközök (master és slave) minőségén, felépítésén, tulajdonságain és a megírt szoftveren múlik, hogy végül működik-e (és elég gyorsan). Az Arduino maximum SPI sebessége viszont gyászos 4 MHz-es órajelen mehet csak, amiből jó esetben a fele hasznos. Ezzel még nincs veszve minden fejsze, de én inkább felfelé kacsintgatnék (ARM mbed), a nagyon gyors Arduinok esetében több lesz a szívás szerintem.

Túrj külföldi fórumokat a kulcsszavakat (24 bit 10 kHz AD logger windows stb.) keresve.

Előzmény: Zizikus (1350)
John Zero Creative Commons License 2015.12.12 0 0 1351

Szerintem ehhez kevés egy Arduino. És a Raspberry PI pl? Annak is van rengeteg GPIO-ja, I2C, stb.

Előzmény: Zizikus (1350)
Zizikus Creative Commons License 2015.12.11 0 0 1350

Szia!

 

Egyelőre csak tervezgetek, nem állt össze semmi, mert ha az ARDUINO nem elég a tervemhez, akkor más kell. Keresgéltem és láttam, hogy van olyan ARDUINO ami 72 vagy 84MHz órajellel megy.

 

A terv az lenne, hogy egy AD (24bit 10-20KHz Sample rate) konverter adatait küldeném egy Flash memóriába (256K) egy triggerrel (Itt nem lenne az Arduino, mert ahhoz lassú), majd ha a mérés lement akkor az adatokat elküldeném a pc-re feldolgozásra. Az Arduino épp arra kellene, hogy adjon órajelet az AD konverternek és a memóriának (Persze lehetne külső, stabil órát is rákötni később), valamint az Ethernet Shield segítségével elérném az adatokat a memóriában, valamint az AD konvertert is ezen keresztöl érném el(programozható Gain, stb). Természetesen itt kellene az SPI, mert az gyorsabb mint az i2C. Arduino SPI-n keresztül kapcsolatba lép a memóriával, átküldi az ethernetre stb.

Az Arduinonak annyi lenne a dolga, hogy mikor lezajlott a mérés akkor ezt a 256K adatot tolja a PC felé, de MINÉL gyorsabban. Erre a serial nem elég 9600baud siralmasan kevés, a többi meg csak vakítás, de még azok is kevésnek bizonyulnak.

 

Ha jobb ötletetek van, azt is szívesen venném! Lehet nem is kellene ide ARDUINO, de nem értek annyira ehhez.

 

Annyit kibogarásztam, hogy ha Dual Quad módon van összekötve a két eszköz,  akkor pár bájt ide oda tologatása után szinte egy bit per óraciklus.(nagy adatoknál), De nem vagyok benne biztos, éppen ezt szeretném tisztázni.

 

 

Előzmény: Prof (1349)
Prof Creative Commons License 2015.12.10 0 0 1349

Szia!

Milyen memóriát? Milyen adatokkal? Hogy jön a képbe a PC?

A Shield vezérlője (W5100) tudja, de ez csak az alap átviteli sebesség, a szűk keresztmetszetet az fogja adni, hogy az Arduino hogyan tudja kezelni az adatcsomagokat (és elég  lassan, legalábbis ehhez képest).

Előzmény: Zizikus (1348)
Zizikus Creative Commons License 2015.12.08 0 0 1348

Sziasztok!

 

Teljesen új vagyok itt, remélem tudtok segíteni.

 

Azt tervezem, hogy az arduino és egyéb ic-k segítségével memóriát töltök fel adatokkal. pl.256Kbyte-ot. A problémám az, hogy az I2C protokollal lassan tudnám küldeni az adatokat a PC felé. Arra gondoltam, hogy egy Ethernet Shield segítségével oldanám meg a dolgot, mégpedig úgy, hogy az ARDUINO közbeiktatásával olvasnám ki az adatokat a memóriából az Ethernet Shielden keresztül SPI összeköttetésével.

 

Arra lennék kíváncsi, hogy mekkora adatátviteli sebességet érhetek el ezzel? A Shield tudja a 10MBit/s-ot, de a kérdés, hogy ilyen felállással tudni fogja az ARDUINO is kiszolgálni? A memóriát úgy választanám meg, hogy az 16MHz feletti legyen.

 

Ötletek?

Prof Creative Commons License 2015.12.06 0 1 1347

Ok.

Azt javallom, hogy a saját munkád egyszerűbbé tétele végett a változókat globálisként deklaráld (a void.setup() előtt), és mindegyikhez írd meg, hogy mire való (// és a szöveg a sor végére). Nekem vannak 300-400 soros kódjaim, amin enélkül, pláne egy-két hónap kihagyás után pokoli nehéz lenne kiigazodni.

 

Előzmény: tompa101 (1346)
tompa101 Creative Commons License 2015.12.06 0 0 1346

A projekt egy mozdony fordítókorong vezérlője lesz és a pozicionáláshoz, a lépésekhez kellenek a változók. A programon majd még alakítgatok.

Előzmény: Prof (1345)
Prof Creative Commons License 2015.12.06 0 0 1345

Szia!

Gondoltam, köszönöm a megerősítést!

Ugyanakkor...

Minek az M változó?

Minek az S változó?

Minek a key változót átírni egy BE változóba? (A char-t meg úgy „konvertálni” int-té, hogy ' - 48' elég meredek.)

Ennyi if{} helyett messze csinosabb lenne szerintem egy 'switch / case' vizsgálat. A külön függvény a kiírásra nem rossz megoldás, ha máshonnan is hívva van (hívva lesz?).

Előzmény: tompa101 (1344)
tompa101 Creative Commons License 2015.12.06 0 0 1344

A karakter és az int tipusú változók konverziója okozta a problémát.

 

#include <Keypad.h>
int BE=0;
int M=0;
int S=0;
const int A=2;
const int B=3;
const int C=4;
const int D=5;
const byte ROWS = 4;
const byte COLS = 3;
char key;
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};   //számok felül és balról jobbra csatlakoztatva
byte colPins[COLS] = {12, 11, 10};

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
 
void setup() {
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  Serial.begin(9600);
  }
 
void loop() {
  key = keypad.getKey();
  if (key != NO_KEY){
    BE=key;
    BE=BE-48;    
    M=BE-S;
    S=BE;
    to_BCD();
    }   
}

void to_BCD()
{
    if (BE == 0 ) //write 0000
    {
      digitalWrite(A, LOW);
      digitalWrite(B, LOW);
      digitalWrite(C, LOW);
      digitalWrite(D, LOW);
    }
     
    if (BE == 1 ) //write 0001
    {
      digitalWrite(A, HIGH);
      digitalWrite(B, LOW);
      digitalWrite(C, LOW);
      digitalWrite(D, LOW);
    }
     
    if (BE == 2 ) //write 0010
    {
      digitalWrite(A, LOW);
      digitalWrite(B, HIGH);
      digitalWrite(C, LOW);
      digitalWrite(D, LOW);
    }
     
    if (BE == 3 ) //write 0011
    {
      digitalWrite(A, HIGH);
      digitalWrite(B, HIGH);
      digitalWrite(C, LOW);
      digitalWrite(D, LOW);
    }
     
    if (BE == 4 ) //write 0100
    {
      digitalWrite(A, LOW);
      digitalWrite(B, LOW);
      digitalWrite(C, HIGH);
      digitalWrite(D, LOW);
    }
     
    if (BE == 5 ) //write 0101
    {
      digitalWrite(A, HIGH);
      digitalWrite(B, LOW);
      digitalWrite(C, HIGH);
      digitalWrite(D, LOW);
    }
     
    if (BE == 6 ) //write 0110
    {
      digitalWrite(A, LOW);
      digitalWrite(B, HIGH);
      digitalWrite(C, HIGH);
      digitalWrite(D, LOW);
    }
     
    if (BE ==7 ) //write 0111
    {
      digitalWrite(A, HIGH);
      digitalWrite(B, HIGH);
      digitalWrite(C, HIGH);
      digitalWrite(D, LOW);
    }
     
    if (BE == 8 ) //write 1000
    {
      digitalWrite(A, LOW);
      digitalWrite(B, LOW);
      digitalWrite(C, LOW);
      digitalWrite(D, HIGH);
    }
     
    if (BE == 9 ) //write 1001
    {
      digitalWrite(A, HIGH);
      digitalWrite(B, LOW);
      digitalWrite(C, LOW);
      digitalWrite(D, HIGH);
    }
}

 

Előzmény: Prof (1343)
Prof Creative Commons License 2015.12.06 0 0 1343

Mi volt a gond?

Előzmény: tompa101 (1342)
tompa101 Creative Commons License 2015.12.05 0 0 1342

Köszönöm. Működik amit szerettem volna. A 3x4-es padról beolvasok egy billentyűt és azt a hétszegmenses kijelzi. Ez alapja lesz egy mozdony fordítókorongnak. A következő rész a léptetőmotor meghajtása lesz. 

Előzmény: Prof (1341)
Prof Creative Commons License 2015.12.05 0 0 1341

Sikerült megoldani?

Előzmény: tompa101 (1332)
Prof Creative Commons License 2015.12.04 0 0 1340

Háááát. Skype esetleg, de csak írásban, mert mikrofonom az nem van.

Asszem itt nyilvános a címem, írj egy e-mailt (de talán a skype is azon van regisztrálva).

Előzmény: szaci92 (1339)
szaci92 Creative Commons License 2015.12.03 0 0 1339

Esetleg a fórumozás helyett át tudnánk terelni a beszélgetést valami interaktívabb eszközre? Pl skype, facebook, stb. ?

Előzmény: Prof (1338)
Prof Creative Commons License 2015.12.03 0 0 1338

Mit értesz robot alatt? Példa?

 

Előzmény: szaci92 (1337)
szaci92 Creative Commons License 2015.12.03 0 0 1337

Szia, igen teljesen kezdő vagyok. Robotot szeretnek kreálni e célból ez tunt a legootimalisabb mikrovezerlonek.

Előzmény: Prof (1334)
Prof Creative Commons License 2015.12.03 0 0 1336

Ez egy lábba bezavarhat, de a többibe nem. Pislogni fog neki kegyetlenül és/vagy nem fog rendesen menni a Monitor, de a többire akkor sem lesz hatással.

Előzmény: Vargham (1333)
Prof Creative Commons License 2015.12.03 0 0 1335

Én kezdetnek javasolnék egy filléres shift-registert, mondjuk egy SN74HC595. A megjelenítést ezzel összehasonlíthatatlanul leegyszerűsíted.

 

A megoldás az if() rész alatt van elrejtve, nevezetesen pont előtte a key változót 'char' típusú változóként definiáltad, utána viszont a switch részben már mint sima 'unsigned int' változóként hasonlítod össze. Próbáld meg úgy, hogy a case után a számokat ' ' jelek közé teszed!

Előzmény: tompa101 (1330)
Prof Creative Commons License 2015.12.03 0 0 1334

Szia,

Nem tudom, mi lesz a projekt, egyáltalán van-e terved, vagy csak teljesen kezdőként mennél bele. A Leonardo nagyjából egyetlen „előnye”, hogy az USB-n egyből magát a mikrokontrollert látod (ez erős túlzás műszakilag, de nagyjából erről van szó), míg általában a többi Arduinora az jellemző, hogy a mikrokontroller és az USB között van egy soros--usb átalakító. Ennek kezdőként nagyon nem fogod hasznát látni.

 

Ha nulláról indulsz, akkor (szerintem) Nano, 328. Kínából iszonyú olcsó (2-5 dollár attól függően, hogy mit fogsz ki). Ugyanazt  tudja, mint az Uno, közvetlenül rárakhatod a próbapanelre, később nagyon egyszerűen lehet belőle üzembiztos (forrasztott) protót csinálni úgy, hogy ettől még egyszerűen cserélhető/fejleszthető marad, nem utolsó sorban baromi picike. Hátránya, hogy semmilyen shield-et nem tudsz rárakni. Ha ez fontos (szerintem az ilyen panelek zöme csak nagyon kis mértékben javítja a fejlesztés hatékonyságát, ha egyáltalán), akkor inkább Mega (milliárd ki- és bemenet, jóval több memória, bár maga a kontroller ugyanakkora órajellel ketyeg).

 

Kb. ennyi.

 

Ha most kezdeném, valószínűleg nem az Arduino mellett döntenék, hanem kevéssel több pénzért mbed (maga a panel jóval olcsóbb, mint a gyári Arduino [bocsánat, Genuino], de a kiegészítők messze nem szerezhetők be annyira könnyen és olcsón, mint az Arduinóhoz, ráadásul az eltérő jelszint miatt sok olyan eszköz, ami Arduino környezetben vígan megy, itt illesztést kíván -- pl. MAX7221). De ez kicsit túlmutat a kérdésen.

Előzmény: szaci92 (1329)
Vargham Creative Commons License 2015.12.03 0 0 1333

a 2-től használom a pineket

Akkor ez mi?

...

pinMode(1, OUTPUT);

...

digitalWrite(1, LOW);

...

Előzmény: tompa101 (1332)
tompa101 Creative Commons License 2015.12.03 0 0 1332

Szia!

Ez nem probléma, ezért a 2-től használom a pineket.

A gondom, hogy a key-be tárolt jelet nem tudom tovább kezelni. Ezért egy gomb változót tettem be, de ez sem működött. Ez a gondom.

Előzmény: tibi-d (1331)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!