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   550 / 854
(#) jeges válasza vargham hozzászólására (») Aug 13, 2019 /
 
ide saját minta plja...
(#) Kari55 hozzászólása Aug 14, 2019 /
 
Sziasztok!
Totál kezdőként hogyan tudnám az alábbi kódban a"Temperature is" helyett a Hőmérséklet" szöveget kiíratni az LCDre?


  1. //Arduino Thermometer using LM35DZ sensor with a LCD display
  2.  
  3. //SurtrTech Youtube channel
  4.  
  5. #include <Wire.h> //Libraries for I2C and LCD
  6. #include <LCD.h>
  7. #include <LiquidCrystal_I2C.h>
  8.  
  9. float temp;   //Variable where we will stock the temperature value
  10. int tempPin = 0; //Pin used with the sensor output here it's A0
  11.  
  12. #define I2C_ADDR 0x27 //I2C Adress
  13. #define BACKLIGHT_PIN 3 //LCD Stuffs
  14. #define En_pin 2
  15. #define Rw_pin 1
  16. #define Rs_pin 0
  17. #define D4_pin 4
  18. #define D5_pin 5
  19. #define D6_pin 6
  20. #define D7_pin 7
  21.  
  22. LiquidCrystal_I2C lcd(0x27,16,2);
  23.  
  24. void setup() {
  25.   lcd.init();
  26.   lcd.init();
  27.  
  28.   Serial.begin(9600);
  29.  
  30.   lcd.begin (16,2);
  31.  
  32. //  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
  33.  
  34.   lcd.setBacklight(HIGH);
  35.  
  36.   lcd.home ();
  37.  
  38. }
  39.  
  40. void loop()
  41.  
  42. {
  43.  
  44.   temp = analogRead(tempPin); //Reading the value from the analog input
  45.  
  46.   temp = temp * 0.48828125; //Sensor calibration to get the real value
  47.  
  48.     lcd.clear();
  49.     lcd.setCursor (0,0); //Start writing on 0.0 on lcd screen
  50.     lcd.print("Temperature is:");
  51.     lcd.setCursor (4,1);
  52.     lcd.print(temp); //Temperature value
  53.     lcd.print(" C"); //Celsius of course
  54.     delay(1000); //Refresh every 1s
  55.  
  56. }

Köszönöm előre a segítséget.
A hozzászólás módosítva: Aug 14, 2019
(#) djusee válasza Kari55 hozzászólására (») Aug 14, 2019 /
 
Kezdöként én a LED villogtatással megértésével kezdeném, esetleg ha LCD re írás érdekelne akkor rákeresnék guglival hogy milyen függvénnyel, hogyan tudnák írni ki rá. De leggyorsabban hogy megvalosítsam a célom, a forráskódban rákeresnék a megváltoztatni kívánt szóra. (Segítek, 48 - 53 as sor között)
(#) Kari55 válasza djusee hozzászólására (») Aug 14, 2019 /
 
Köszi, de én a husszú magyar karakterekre gondoltam, hogy Pl: az ő, és é karaktereket hogyan szúrjam be a szövegbe.
(#) vargham válasza Kari55 hozzászólására (») Aug 14, 2019 /
 
Azokat vagy tudja az LCD, vagy nem. Ha nem, akkor először definiálni kell, és feltölteni az LCD-re. Amennyiben van ilyen lehetőség rajta.
Aztán pedig meg kell nézned, hogy milyen ASCII kódra mit jelenít meg az adott LCD. Az első 127 karakter szabványos, a többire vannak nemzeti karaktertáblák, de azt nem mindegyik LCD gyártó követi. Nézd meg a tied adatlapját! Valamint próbálkozz! Én írnék egy ciklust, ami kiírná az összes karaktert, és mellé a kódját. Gombnyomásra lépne tovább. Akkor rögtön látnád, hog támogatja-e, és ha igen, akkor milyen kóddal az ékezetes betűket.
(#) vargham válasza Kari55 hozzászólására (») Aug 14, 2019 /
 
Amikor én írtam ilyet, akkor egy ciklussal kilistáztam az összes karaktert, és kódját, és kijegyzeteltem az ékezeteseket. Látszik, hogy ez megfelel a szabványos kiosztásnak.
  1. //ü 129 0x81
  2. //é 130 0x82
  3. //É 144 0x91
  4. //ö 148 0x94
  5. //á 160 0xA0
  6. //í 161 0xA1
  7. //ó 162 0xA2
  8. //ú 163 0xA3


Ezután pedig így lehet rá hivatkozni a kódban:
  1. char message[7] = {"kir\xA0ly\x82"}; //királyé
A hozzászólás módosítva: Aug 14, 2019
(#) djusee válasza Kari55 hozzászólására (») Aug 14, 2019 /
 
Ok, próbálj itt keresni kicsit, EZ egy nagyszerü eszköz a saját karakter készítésére, jelöld be az üres négyzeteket(rajzold meg a kívánt ábrát, karaktert). Ha nem sikerül megoldani akkor délután tudok segíteni. Üdv
(#) glaci hozzászólása Aug 14, 2019 /
 
Sziasztok!
Az után érdeklődnék, hogy az ebayról beszerezhetó arduino klonok mennyire megbízhatóak.
Lehet volt már szó a fórumon, de ezzel kapcsolatban nem találtam hozzászólást.
(#) djusee válasza glaci hozzászólására (») Aug 14, 2019 /
 
Szia. Szerintem ki milyenre fut rá. Nekem egy eredeti UNO -m van és egy jópár ebay -es. Szerintem ugyanolyan megbízható az utángyártott is(nekem nem volt gondom vele). Persze könyebben megeshet hogy forrasztáshibás lapot kapsz kézhez ha Ázsiából származót rendelsz.
(#) cua válasza glaci hozzászólására (») Aug 14, 2019 /
 
Nekem tobb tucat van, kulonfele es nem sok gondom volt veluk.
De ha megnezed a kapcsolast, akkor gyorsan kiderul, hogy az arduino nem igazan hardware hanem inkabb software
Mostanaban mar nem veszek ujabbakat hanem csak betolom pl egy ures 328p-be az eredeti software-t es utana mar usb-serial atalakitoval (mondjuk ennek tipusa nem mindegy) hasznalom probapanelen, ami ugye sokkal nagyobb flexibilitast ad.
(#) vargham válasza glaci hozzászólására (») Aug 14, 2019 /
 
Volt, amelyiken a CH340 rosszul volt bekötve, ezért nem lehetett rá kódot feltölteni. Kis átalakítással javítható volt.
(#) Kari55 válasza djusee hozzászólására (») Aug 14, 2019 /
 
Rendben, köszi!
(#) glaci válasza cua hozzászólására (») Aug 14, 2019 /
 
Szia!
Ez jó hír! Tehát, ha jól értem, ha van egy atmega 328p-pu (történetesen 2db), meg zombee féle STK500, azzal be tudom tölteni az arduino software-t az mcu-ba, már csak egy uss-oros átalakító és kész az uno?
Abban tudnál segíteni, hogy milyen usb-soros átalakító kell?
(#) cua válasza glaci hozzászólására (») Aug 14, 2019 /
 
A DTR legyen kivezetve, mert azt kotod a RESET-re. Nem tudom a kepen mennyire latszik.
(a bal oldali mcu az nalam az Arduino UNO )
(#) glaci válasza cua hozzászólására (») Aug 14, 2019 /
 
Látom, meg látom az usb-soros átalakítót is. Az ebay-on lehet azt is venni rendkívül kedvező áron. Az megfelel?
(#) cua válasza glaci hozzászólására (») Aug 14, 2019 / 1
 
Persze, nekem is onnan van. Talan otos csomagban vettem, mert valami nevetseges ara volt meg ingyenes szallitas mellett is
(#) glaci válasza cua hozzászólására (») Aug 14, 2019 /
 
Köszi! lesz még kérdésem.
(#) vargham válasza cua hozzászólására (») Aug 14, 2019 /
 
A legtöbb ilyen filléres holmit érdemes 5-10 darabos csomagban venni. Ha tönkremegy (tönkreteszed), akkor nem kell megint hetekig várni.
(#) cua válasza vargham hozzászólására (») Aug 14, 2019 /
 
Igen, en is ilyen logikaval vasarolok, enni utana mar nem ker, masreszt nem akarok ujra varni a (sokszor hosszu) szallitasra
(#) glaci válasza glaci hozzászólására (») Aug 14, 2019 /
 
Ez megfelelő?Bővebben: Link
(#) Rober_4 hozzászólása Aug 14, 2019 /
 
Sziasztok még mindig az fm szintin dolgozok. Egészen jól alakul viszont még jól jönne egy kis gyorsítás eme 2 függvényen. Ugye abban maradtunk legutóbb, hogy a szinuszjelet egy előre feltöltött 1024 elemű szinusztömbből hozzuk létre 22bites eltolással:
  1. buffer+=sinusfg[freqmutato >> 22];
  2. freqmutato += sinewavefreq;


Ezt felhasználva hozom létre a két operátoros fm modulációt. Viszont két szinusztömböt használok. Az egyik kb -33000-től 33000-ig megy a nagyobb jelszint miatt, így egy szorzást megspórolok, ez a sinusfg névre hallgat. A másiknál -1024 aminimum és 1024 a maximum: neve fmsinusfg. Mindkettő 1024 elemű. A tva görbelevel az első generátor pillanatnyi hangereje, a tvalevel az általános hangereje, a tvfgorbelevel a második generátor pillanatnyi hangereje, a tvflevel a második általános hangereje. AZ fm modulációt, mely már a hangerőkkel is vezérelt így állítom elő:
  1. #define ketop(freqmutato1, freqmutato2,tvagorbelevel,tvalevel,tvfgorbelevel, tvflevel) (sinusfg[((freqmutato1 >> 22) + fmsinusfg[freqmutato2 >> 22] * tvfgorbelevel / tvflevel) % 1024] * tvagorbelevel / tvalevel)

Ez teljesen jól működik, csak ugye van benne egy %1024-es maradékképzés, meg osztás is, amit esetleg cserélnék valami gyorsabbra.
A három operátoros fm moduláció pedig már végleg átláthatatlanná vált, persze működik:
  1. #define haromop(freqmutato1, freqmutato2,freqmutato3,tvagorbelevel,tvalevel,tvfgorbelevel, tvflevel,tvf2gorbelevel, tvf2level)  (sinusfg[((freqmutato1 >> 22) + fmsinusfg[((freqmutato2 >> 22)+fmsinusfg[freqmutato3 >> 22]* tvf2gorbelevel / tvf2level)% 1024] * tvfgorbelevel / tvflevel) % 1024] * tvagorbelevel / tvalevel)

Tehát bármilyen ötletet eme két képlet egyszerűsítésére szívesen fogadok. Segítségeteket köszönöm!
(#) cua válasza glaci hozzászólására (») Aug 14, 2019 /
 
Nem, hianyzik a DTR laba.
Valami ilyesmit keress. Ennel az eladonal is van olyan amirol hianyzik a kerdeses kivezetes, szoval csak korultekintoen
A hozzászólás módosítva: Aug 14, 2019
(#) glaci válasza cua hozzászólására (») Aug 14, 2019 /
 
A 6 tüs USB 2.0 az jó ugye?
(#) cua válasza glaci hozzászólására (») Aug 14, 2019 /
 
Igen, azokon ott a kivant kivezetes.
(#) glaci válasza cua hozzászólására (») Aug 14, 2019 /
 
Köszönöm!
(#) Kari55 válasza vargham hozzászólására (») Aug 14, 2019 / 1
 
Köszönöm ezt is ki fogom próbálni, de most sikrűlt az alábbi módon összehoznia kódot:
  1. //Arduino Thermometer using LM35DZ sensor with a LCD display
  2.  
  3. //SurtrTech Youtube channel
  4.  
  5. #include <Wire.h> //Libraries for I2C and LCD
  6. #include <LCD.h>
  7. #include <LiquidCrystal_I2C.h>
  8.  
  9.  
  10.  
  11. float temp;   //Variable where we will stock the temperature value
  12. int tempPin = 0; //Pin used with the sensor output here it's A0
  13.  
  14. #define I2C_ADDR 0x27 //I2C Adress
  15. #define BACKLIGHT_PIN 3 //LCD Stuffs
  16. #define En_pin 2
  17. #define Rw_pin 1
  18. #define Rs_pin 0
  19. #define D4_pin 4
  20. #define D5_pin 5
  21. #define D6_pin 6
  22. #define D7_pin 7
  23.  
  24. LiquidCrystal_I2C lcd(0x27,16,2);
  25.  
  26. byte oo[] = {
  27.   B00101,
  28.   B01010,
  29.   B01110,
  30.   B10001,
  31.   B10001,
  32.   B10001,
  33.   B01110,
  34.   B00000
  35. }; //ő betű
  36.  
  37. byte ee[] = {
  38.   B00010,
  39.   B00100,
  40.   B01110,
  41.   B10001,
  42.   B11111,
  43.   B10000,
  44.   B01110,
  45.   B00000
  46. }; //é betű
  47.  
  48. byte uu[] = {
  49.   B00101,
  50.   B01010,
  51.   B10001,
  52.   B10001,
  53.   B10001,
  54.   B10001,
  55.   B01110,
  56.   B00000
  57. };//ű betű
  58. byte fok[] = {
  59.   B01100,
  60.   B10010,
  61.   B10010,
  62.   B01100,
  63.   B00000,
  64.   B00000,
  65.   B00000,
  66.   B00000
  67. };
  68. void setup()
  69. {
  70.   lcd.init();
  71.   lcd.backlight();
  72.  
  73.   lcd.createChar(0,oo);
  74.   lcd.createChar(1,ee);
  75.   lcd.createChar(2,uu);
  76.   lcd.createChar(3,fok);  
  77.   lcd.home();
  78.  
  79.   lcd.setCursor(0, 0);
  80.   lcd.print("H"),
  81.   lcd.write(0);
  82.   lcd.print("m"),
  83.   lcd.write(1);
  84.   lcd.print("rs");
  85.   lcd.write(1);
  86.   lcd.print("klet:");
  87.  }
  88.  
  89. void loop()
  90.  
  91. {
  92.  
  93.   temp = analogRead(tempPin); //Reading the value from the analog input
  94.  
  95.   temp = temp * 0.48828125; //Sensor calibration to get the real value
  96.  
  97.     lcd.clear();
  98.    lcd.setCursor(2, 0);
  99.   lcd.print("H"),
  100.   lcd.write(0);
  101.   lcd.print("m"),
  102.   lcd.write(1);
  103.   lcd.print("rs");
  104.   lcd.write(1);
  105.   lcd.print("klet:");
  106.     lcd.setCursor (4,1);
  107.     lcd.print(temp); //Temperature value
  108.     lcd.setCursor (10,1);
  109.     lcd.write(3);
  110.     lcd.print("C"); //Celsius of course
  111.     delay(5000); //Refresh every 1s
  112.  
  113. }
A hozzászólás módosítva: Aug 14, 2019
(#) benjami válasza Rober_4 hozzászólására (») Aug 15, 2019 / 1
 
Nem tudom minek kell maradékos osztás, de én egy darab FM modulációt valahogy így csinálnám (nem próbáltam ki, hogy jó-e a kód, de ötletnek talán jó).
  1. const int16_t sine1024[] = {0,201, 402, 603, 804,1005 ...}; // 0..32767..0..-32767..
  2. #define FVIVO  89478485 // 1000Hz (fmintavétel = 48000Hz)
  3. #define FLOKET 44739243 // 500Hz (fmintavétel = 48000Hz)
  4. #define FMOD   39370534 // 440Hz (fmintavétel = 48000Hz)
  5. #define MODLEVEL (FLOKET / 32767)
  6. uint32_t sinewaveptr = 0;
  7. uint32_t sinewavemodptr = 0;
  8. uint32_t sinewavefreq = FVIVO;
  9. uint32_t sinewavemodfreq = FMOD;
  10. for(i = 0; i < WAVEBUFFERLENGTH; i++)
  11. {
  12.   wavebuffer[i] = sine1024[sinewaveptr >> 22];
  13.   sinewaveptr += sinewavefreq + (sine1024[sinewavemodptr >> 22] * MODLEVEL);
  14.   sinewavemodptr += sinewavemodfreq;
  15. }

Elvileg ez az 1000Hz-es jelet modulálja egy 440Hz-es jellel, méghozzá +-500Hz löketnagysággal, 48000Hz mintavételezési frekvencián.
(#) Rober_4 válasza benjami hozzászólására (») Aug 15, 2019 /
 
Olyan nagyon egyszerűnek tűnik, holnap kipróbálom, ha működik akkor verem a fejem a falba....
Egyébként nagyon köszönöm!
(#) Macsek71 hozzászólása Aug 16, 2019 /
 
Kis segítséget, programozásos ötletet szeretnék kérni !

Bocsi nem Ardu, hanem lego EV rendszerrel "játszom", de a programozás kvázi hasonló is lehet .

Egy enkóder szerű eszközzel vezérlek egy motort, előre-hátra ... Az enkóder -60 +60 közt ad elfordulással arányos értéket, amit egyszerűen hozzárendelek a motor sebességéhez (-75,+75 közt lehet programozni).
Probléma : nagyon kicsi a 0 értékhez tartozó kar elmozdulás -> szinte lehetetlen megállítani a motort ...
Hogyan lehetne egyszerűen (valamilyen számolásos trükkel ? ) a nulla körüli tartományba megállítani a mozgást ? Jó lenne, ha meg tudnánk tartani relatíve lassú, és nagy sebességeket is.

A vizsgálat-elágazás funkciót kihagynám, szerintem nagyon elrondítaná a kódot...

Köszi a segítséget, ötleteket !
(#) sargarigo válasza Macsek71 hozzászólására (») Aug 16, 2019 /
 
Első blikkre felszoroznám az inputot, így a nulla körüli szögelfordulás értéke is megnő, természetesen a felbontás rovására. Esetleg a szorzás lehet bitenkénti eltolás is (nyilván ez kettő hatványait jelenti).
A hozzászólás módosítva: Aug 16, 2019
Következő: »»   550 / 854
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