Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   315 / 863
(#) gaspa válasza Kovidivi hozzászólására (») Jan 22, 2017 /
 
Talán az EEPROM get és EEPROM put utasítások kezelik a float változókat,csak nem tudom a hosszát hogyan lehet megadni.
(#) Medve válasza gaspa hozzászólására (») Jan 22, 2017 / 1
 
Semmiség az egész:
  1. void EEPROMWritelong(int address, long value) {    // long kiíratása EEPROM-ba
  2.       byte four = (value & 0xFF);         // Four = Least significant byte
  3.       byte three = ((value >> 8) & 0xFF);
  4.       byte two = ((value >> 16) & 0xFF);
  5.       byte one = ((value >> 24) & 0xFF);  //One = Most significant ->
  6.       EEPROM.write(address, four);        //---a 4 bájt kiírása
  7.       EEPROM.write(address + 1, three);
  8.       EEPROM.write(address + 2, two);
  9.       EEPROM.write(address + 3, one); }
  10.   //---------------------------------------------------------------------------    
  11. long EEPROMReadlong(long address) {           // 4 byteot olvas az EEPROMból és összerakja longnak
  12.       long four = EEPROM.read(address);       // adress miért long?
  13.       long three = EEPROM.read(address + 1);
  14.       long two = EEPROM.read(address + 2);
  15.       long one = EEPROM.read(address + 3);    // Visszatér az összeállított longgal.
  16.       return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF);
  17.       }
A hozzászólás módosítva: Jan 22, 2017
(#) gaspa válasza Medve hozzászólására (») Jan 22, 2017 /
 
Okés ezt így szét lehet választani és összerakni,de nekem úgy tűnik a könyvtár EEPROM put/get parancsai ezt megcsinálják,mert amit az első címre beírok float-ban az vissza is kapom.Ha a második címre írok,azt is jól kapom vissza,de az elsőt viszont átírja.Gondolom a másodikat arrébb kell írni,tehát elegendő csak a címzéssel foglalkozni,báziscím+bájtok száma és tárolni melyik az utolsó float báziscím.Innen kezdeni az int/byte tárolást.Megeshet,hogy tévedek,mert igencsak műkedvelő vagyok,persze azért kipróbálom.Különben betöltéseket hányszor lehet csinálni a Megánál?
(#) GooseB válasza gaspa hozzászólására (») Jan 22, 2017 /
 
Idézet:
„Különben betöltéseket hányszor lehet csinálni a Megánál?”


100 000-szer lehet írni.
(#) gaspa válasza GooseB hozzászólására (») Jan 23, 2017 /
 
Rendben,de még mindig nem tiszta,a memóriákkal kapcsolatban nem találtam egy helyen leírást,ezért konkrétabban kérdeznék.Az EEprom write tiszta,100e írást bír,3ms 1 byte írása.Az EEprom read-nél nem tudom hány olvasást visel el és mennyi az olvasási idő?Az sram tiszta,nyilván egy gyors ram. A flas memória már nem egészen tiszta,a megánál jó hosszú,ebben van a boatloader is és a betöltött program is bizonyára ebben fut.Az IDE-ből ebbe mit fordít le,a beírt program sorokat és a boatloader fordítja gépi kóddá,vagy közvetlenül a gépi kódot és ezt hányszor teheti meg?A flas milyen jellegű memória,feltehetően nem sima eeprom,az túl lassú lenne?
(#) tcsonka válasza gaspa hozzászólására (») Jan 23, 2017 /
 
(#) Medve válasza gaspa hozzászólására (») Jan 23, 2017 /
 
Igen, a második long változót legalább négy bájttal odébb kellene kiírni. Ha van elég memóriád, célszerű az alant található linken lévő könyvtár használata.
(#) gaspa válasza Medve hozzászólására (») Jan 23, 2017 /
 
Prímán működnek az EEPROM get/put parancsai a float ki/be műveletekkel,csak a címzésre kell ügyelni.
(#) csabagalcsaba válasza Medve hozzászólására (») Jan 23, 2017 /
 
Üdv!

Akkor ha jól értem a program jelenlegi helyzetétől függetlenül, állandóan figyeli a megszakítás bemenetet és ha jelet kap végrehajtja az adott függvényt? Esetemben a számot tároló regiszter léptetését? Bocsánat, ha hülyeséget kérdezek, de még soha nem használtam megszakítást és átolvasva ez jött le.
(#) alienco hozzászólása Jan 23, 2017 /
 
Sziasztok! Szerintetek milyen érzékelővel tudnám figyelni egy vízóra kis indikátorát, ami (akár nagyon lassan vagy nagyon gyorsan) pörög? Csak annyi kellene, hogy folyik-e a víz vagy sem. Nem lenne baj, ha nem kellene fizikailag hozzáérnie a vízórához. Biztonsági célra használnám, pl. fél óra után jelezzen.
(#) gaspa válasza tcsonka hozzászólására (») Jan 23, 2017 /
 
Ezt olvastam,nagyon jó még a címkiosztás kezelése nem egészen világos.Nekem csak 20-30 konstans értéket kellene tárolni,A/D csatornák korrekcióit,termosztátok,szabályzók alsó/felső értékeit.Az írást biztos nem fogom ciklusba szervezni,az értékekhez pedig ritkán és egyenként kell hozzáférni.
(#) pjg válasza alienco hozzászólására (») Jan 23, 2017 /
 
Infrával, lézerrel. A visszavert sugarat figyelni. Gázórán pl a legkisebb helyiérték 5, vagy 6-osa tükrös.
(#) alienco válasza pjg hozzászólására (») Jan 23, 2017 /
 
Esetleg valami konkrét eszközről tudsz, ami ezt tudja? Az elméletet értem, csak nem tudom, erre a feladatra pontosan mi lenne alkalmas. Jó lenne, ha pl. shieldet tudnék használni. A vízóra üvege nem zavar be?
(#) Medve válasza csabagalcsaba hozzászólására (») Jan 23, 2017 /
 
Pontosan így van!
Alienco: Egy reflexiós optokapuval lehetne próbálkozni, azon kerék felett, ami olyan mint egy enkódertárcsa. (csillagkerék) Van ilyen rajta?...De ahogy nézegetem a fotókat, lehet, hogy akármelyik mutatót is érzékelné, a pirosat a fehér előtt.
A hozzászólás módosítva: Jan 23, 2017
(#) alienco válasza Medve hozzászólására (») Jan 24, 2017 /
 
Igen, van csillagkerék, az a legérzékenyebb, azt szeretném használni.
Mondjuk egy ilyen jó lehet? Bővebben: Link
(#) pjg válasza alienco hozzászólására (») Jan 24, 2017 /
 
Nem hinném. Erősen fókuszálni kell. Inkább a lézer.
(#) alienco válasza pjg hozzászólására (») Jan 24, 2017 /
 
Esetleg ez? Bővebben: Link
(#) pjg válasza alienco hozzászólására (») Jan 24, 2017 /
 
Én úgy csinálnám, hogy a lézer sugarát a csillagkerék "fogára" fókuszálnám, az érzékelőt meg az alatta lévő fehér területre. Amikor a "fog" takarja a lézersugarat, akkor az alatta lévő fehéren nincs semmi. Amikor nem takarja, akkor ott a lézer fénypontja. Na ezt figyelném.
A hozzászólás módosítva: Jan 24, 2017
(#) david10 hozzászólása Jan 24, 2017 /
 
Sziasztok, rövid leszek.
Hogyan lehet a "Hello" sztringben a H betüt 0xABCDEF-re kicserélni?
Probáltam az input.replace('H', 0xABCDEF); -et, de ez 0xEF-re cseréli ki.
A választ előre is köszönöm!
(#) csabagalcsaba válasza Medve hozzászólására (») Jan 24, 2017 /
 
Üdv!

Írtam egy új programot megszakítással, működik, de nem érzékeli egyértelműen az enkóder jeleit.
Van hogy egy lépésre többet számol, vagy éppen nem számol.
(#) tbarath válasza david10 hozzászólására (») Jan 24, 2017 / 1
 
A 0x a hexadecimális szám prefixe. A 0xABCDEF egy 6 jegyű hexa konstans, amit minimum 3 byte-on tárolsz el, ennek az utolsó byte-ja a 0xEF, gondolom ezt veszi egy char-nak (ami ugye szintén 1 byte ha ascii), a többi meg megy a levesbe.

Nem biztos, de szerintem ez működne:
  1. char ca[3] = {0xAB, 0xCD, 0xEF};
  2. input.replace('H', ca);

Vagy ha a string.replace nem szereti a char tömböt akkor csinálj belőle stringet.
Ha pedig a a 8 jegyű '0xABCDEF' stringet szeretnéd a H betű helyére, akkor rakd idézőjelbe.
(#) Bakman válasza csabagalcsaba hozzászólására (») Jan 24, 2017 /
 
Pergésmentesíteni kell. Fizikai eszköz, ami lehet cél IC (pl. MAX6816, MAX6817, MAX 6818 stb.) vagy egyéb, a neten látható kismillió megoldás (encoder debouncing): Alternatívaként programból is megoldható ez.
(#) david10 válasza tbarath hozzászólására (») Jan 24, 2017 /
 
Köszönöm a válaszodat!
Probáltam belőle Stringet csinálni, ez lett belőle
  1. byte temp[48];
  2.  
  3. void printarray(byte inarray[]){
  4. for (int g=0; g<47; g++){
  5.   if (inarray[g]<16){
  6.     Serial.print("0");
  7.   }
  8.    Serial.print(inarray[g],HEX);
  9.     }  
  10. }
  11. char ca[3]={0xAB,0xCD,0xEF};
  12.  
  13. void setup(){
  14.     Serial.begin(9600);
  15.    
  16.     String input="Hello";
  17.     String be=ca;
  18.     input.replace('H', be);
  19.          
  20.     input.toCharArray(temp, 48);
  21.     printarray(temp);
  22. }
  23.  
  24. void loop(){}

de hibának ezt adja:
  1. C:\Windows\TEMP\arduino_modified_sketch_160073\stringToArray.ino: In function 'void setup()':
  2.  
  3. stringToArray:18: error: converting to 'String' from initializer list would use explicit constructor 'String::String(char)'
  4.  
  5.      input.replace('H', be);
  6.  
  7.                           ^
  8.  
  9. In file included from C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.16\cores\arduino/Arduino.h:231:0,
  10.  
  11.                  from sketch\stringToArray.ino.cpp:1:
  12.  
  13. C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.16\cores\arduino/WString.h:183:7: note: initializing argument 1 of 'void String::replace(const String&, const String&)'
  14.  
  15.   void replace(const String& find, const String& replace);
  16.  
  17.        ^
  18.  
  19. exit status 1
  20. converting to 'String' from initializer list would use explicit constructor 'String::String(char)'


Probáltam amit előre javasoltál, (input.replace('H', ca); ), de azzal meg ezt a hibát adja ki:
  1. C:\Windows\TEMP\arduino_modified_sketch_350268\stringToArray.ino: In function 'void setup()':
  2.  
  3. stringToArray:17: error: call of overloaded 'replace(char, char [3])' is ambiguous
  4.  
  5.      input.replace('H', ca);
  6.  
  7.                           ^
  8.  
  9. C:\Windows\TEMP\arduino_modified_sketch_350268\stringToArray.ino:17:26: note: candidates are:
  10.  
  11. In file included from C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.16\cores\arduino/Arduino.h:231:0,
  12.  
  13.                  from sketch\stringToArray.ino.cpp:1:
  14.  
  15. C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.16\cores\arduino/WString.h:182:7: note: void String::replace(char, char) <near match>
  16.  
  17.   void replace(char find, char replace);
  18.  
  19.        ^
  20.  
  21. C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.16\cores\arduino/WString.h:182:7: note:   no known conversion for argument 2 from 'char [3]' to 'char'
  22.  
  23. C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.16\cores\arduino/WString.h:183:7: note: void String::replace(const String&, const String&) <near match>
  24.  
  25.   void replace(const String& find, const String& replace);
  26.  
  27.        ^
  28.  
  29. C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.16\cores\arduino/WString.h:183:7: note:   no known conversion for argument 1 from 'char' to 'const String&'
  30.  
  31. exit status 1
  32. call of overloaded 'replace(char, char [3])' is ambiguous
(#) tbarath válasza david10 hozzászólására (») Jan 24, 2017 / 1
 
Szerintem így kellene:
String be(ca);
vagy:
String be = String(ca);
(#) Medve válasza csabagalcsaba hozzászólására (») Jan 24, 2017 /
 
Vannak rossz minőségű enkóderek, próbáld ki először mindig optikaival. Vagy próbáld ki az "encoder.h"-t is. Lehet, hogy abban szoftveresen el van intézve a pergésmentesítés is.
A hozzászólás módosítva: Jan 24, 2017
(#) csabagalcsaba válasza Medve hozzászólására (») Jan 24, 2017 /
 
Üdv!

Köszönöm szépen a segítséget, sikerült megoldani. Szoftveresen pergésmentesítettem. Eszembe jutott a jelek értelmezésére egy sokkal egyszerűbb feltételrendszer, ezzel tökéletesen működik.
Optikai Omron enkódert használtam, ez biztonságosan működik.

Köszönöm mindenkinek, aki válaszolt.
(#) zosza18 hozzászólása Jan 24, 2017 /
 
Üdv Mindenkinek!

Egy 12V-os akkutöltőt akarok összehozni... amolyan "okosat".
A problémám az, hogy a feszültséget nem tudom normálisan mérni mert ugrál össze vissza, ráadásul a valósághoz sincsen semmi köze.
Arról nem is beszélve, hogy az LCD villog, hullámzik és egyéb értelmetlen dolgokat végez menet közben.
Az LCD még haggyán is... de ez a fesz. mérés kiakasztott már, hogy nem látom a fától az erdőt szerintem.
A mérés az alap... 22k / 10k osztón be az A2-re és azt számolgatná... gatná.
Valami kis segítséget ha kérhetnék ez ügyben...
  1. int analogInput = A2;
  2. float vout = 0.0;
  3. float vin = 0.0;
  4. float R1 = 21480.0;
  5. float R2 = 9990.0;
  6. int value = 0;
  7.  
  8. setup rész...
  9.  
  10. pinMode(rele, OUTPUT);
  11. pinMode(analogInput, INPUT);
  12. pinMode(toltes, OUTPUT);
  13. pinMode(feltoltve, OUTPUT);
  14.  
  15. loop rész...
  16.  
  17.    value = analogRead(analogInput);
  18.    vout = (value * 5.02) / 1024.0;
  19.    vin = vout / (R2/(R1+R2));
  20.    if (vin<0.09)
  21.    {
  22.    vin=0.0;
  23.    }
  24.  
  25. lcd.setCursor(0, 1);
  26. lcd.print("   Akku:");
  27. lcd.setCursor(8, 1);
  28. lcd.print(vin);
  29. lcd.setCursor(13, 1);
  30. lcd.print("V"   );
  31. lcd.setCursor(0, 0);
  32. lcd.print("   T lt s . . . ");
  33. lcd.setCursor(4,0);
  34. lcd.write(1);
  35. lcd.setCursor(7,0);
  36. lcd.write(3);
A hozzászólás módosítva: Jan 24, 2017
(#) Medve válasza zosza18 hozzászólására (») Jan 24, 2017 /
 
Nem mondom, hogy a szoftver jó, de hardveres hiba biztos van. Milyen a tápegységed? Van szűrve rendesen?
(#) zosza18 válasza Medve hozzászólására (») Jan 24, 2017 /
 
Köszi a választ!

A töltő részről megy az UNO Vin-jére a töltő fesz. Azon van egy 7805, ami rendesen körbe is van kondizva, így gondolom az jó lenne.
(#) david10 válasza tbarath hozzászólására (») Jan 24, 2017 /
 
Sajnos ezek se müködnek:
String be(ca):
  1. C:\Windows\TEMP\arduino_modified_sketch_294203\stringToArray.ino: In function 'void setup()':
  2.  
  3. stringToArray:18: error: converting to 'String' from initializer list would use explicit constructor 'String::String(char)'
  4.  
  5.      input.replace('H', be);
  6.  
  7.                           ^
  8.  
  9. In file included from C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.16\cores\arduino/Arduino.h:231:0,
  10.  
  11.                  from sketch\stringToArray.ino.cpp:1:
  12.  
  13. C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.16\cores\arduino/WString.h:183:7: note: initializing argument 1 of 'void String::replace(const String&, const String&)'
  14.  
  15.   void replace(const String& find, const String& replace);
  16.  
  17.        ^
  18.  
  19. exit status 1
  20. converting to 'String' from initializer list would use explicit constructor 'String::String(char)'


String be = String(ca):
  1. C:\Windows\TEMP\arduino_modified_sketch_679261\stringToArray.ino: In function 'void setup()':
  2.  
  3. stringToArray:18: error: converting to 'String' from initializer list would use explicit constructor 'String::String(char)'
  4.  
  5.      input.replace('H', be);
  6.  
  7.                           ^
  8.  
  9. In file included from C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.16\cores\arduino/Arduino.h:231:0,
  10.  
  11.                  from sketch\stringToArray.ino.cpp:1:
  12.  
  13. C:\Users\David\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.16\cores\arduino/WString.h:183:7: note: initializing argument 1 of 'void String::replace(const String&, const String&)'
  14.  
  15.   void replace(const String& find, const String& replace);
  16.  
  17.        ^
  18.  
  19. exit status 1
  20. converting to 'String' from initializer list would use explicit constructor 'String::String(char)'
Következő: »»   315 / 863
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem