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   474 / 854
(#) Firefighter1 hozzászólása Szept 23, 2018 /
 
Megvan! A GitHUB on megtaláltam. csak fura hogy az onnan linkelt "gyári" csomagot szedtem le és abba sincsen benn !

De letöltve bepasszítva, és szépen működik!

Köszönöm
(#) KoblogPerGyok válasza Firefighter1 hozzászólására (») Szept 23, 2018 /
 
Lehet nem látom a dolgot át rendesen, de az Adafruit.h is kell majd a megfelelő könyvtárba, mert valószínűleg hivatkozik rá ez a lib. Ennek mondjuk eléggé gány szaga van, inkább #include-al rántsd be azt is a kódodba, ha azt is telepítetted.
(#) kokozo válasza Firefighter1 hozzászólására (») Szept 23, 2018 /
 
Szia!
Ha hiányzik valami akkor az arduino programon belül a vázlat menü könyvtár tartalmazása almenü majd a könyvtárak kezelésére katt, és innen válaszd ki ami kell, így a legegyszerűbb.
(#) game4812 hozzászólása Szept 23, 2018 /
 
Sziasztok! Egy Arduino Pro Micro, vagy más 32u4-el szerelt lapka a leírások szerint képes MIDI átvitelre. Valakinek van ezzel tapasztalata? Megoldható-e stabilan néhány érték MIDI fogadása, ezzel WS2812 LED szalag vezérlése, 2 enkóder+4 gombnyi MIDI küldése, (néha a gombok az arduino-t külön vezérelnék, ilyenkor nem küldene Midi-t) és 2 db 3x7 szegmentes kijelző vezérlése? Esetleg az, hogy a MIDI IN és a MIDI OUT külön eszköznek látszódjon Windowson belül?
A projekt: Adott egy DJ kontroller, ami Traktort vezérel, a dobozában van még hely. a deck-ek két odallára tennék 2 kis kijelzőt, meg 1-1 gombot, amit ha ütemre nyomogatok, a számláló kiírja az ütem/perc-et. Ez lenne az alap cél, erre bármelyik arduino képes. De ha már ott van, fogadhatná a Traktor Midi jelét, ésvezérelhetne VU méter szerűen, ütemre villogva, sb. LED szalagot is. A 2 külön eszközt pedig azért kérdezem, mert a számítógép vezérli a DMX világítást is. De ha a fényvezérlő program a kontroller bármelyik gombját használja, akkor a Traktor nem látja a kontrollert. (12 csatorna van rajta, ha csak különböző csatornát használ a két program, akkor sem.)
(#) kapu48 válasza game4812 hozzászólására (») Szept 24, 2018 /
 
Kel építeni a 7 szegmenses kijelzőknek egy ilyen vezérlőt Max7219 Chip:
Bővebben: Link
Ez leveszi az időzítési feladatokat az arduinoról. És marad ideje más célok elvégzésére,
(#) kapu48 válasza game4812 hozzászólására (») Szept 24, 2018 /
 
Vagy lehet készen is kapni: Bővebben: Link
(#) edimax0 válasza game4812 hozzászólására (») Szept 24, 2018 /
 
(#) game4812 hozzászólása Szept 25, 2018 /
 
Ezek mind jók lesznek, köszönöm! A 2 MIDI eszközként látszódást 2 külön egységgel tudom csak megoldani?
(#) edimax0 hozzászólása Szept 25, 2018 /
 
Sziasztok!
Csv fajból szeretnék ad kártyáról több karakter lánc sorokat kiolvasni arduinoval valaki tudna erre ötletet adni?

Karakter lánc
  1. teszt1;keksz22;lessz33
(#) kapu48 válasza edimax0 hozzászólására (») Szept 25, 2018 /
 
Szerintem ez a lib tudja amit szeretnél:
Bővebben: Link
A hozzászólás módosítva: Szept 25, 2018
(#) malak hozzászólása Szept 26, 2018 /
 
Sziasztok!
Egy kis segitséget szeretnék kérni arduino lcd kezeléssel kapcsolatban.
Amit szeretnék az az hogy a program leellenőrizze hogy van -e lcd csatlakoztatva és ha nincs akkor az irás a serial portra menjen.
  1. if (! lcd.begin()) {
  2.      Serial.begin(9600);
  3.     serial.print("Nincs RTC !...");
  4.     lcdalias("serial");
  5.     while (1);
  6.     lcdalias("lcd");
  7.   }

de az RTC ellenőrzéshez képest ez nem müködik.Van más megoldás rá?
(#) vargham válasza malak hozzászólására (») Szept 26, 2018 / 1
 
Az alap LCD lib nem kérdez semmit az LCD vezérlőtől, tehát erre nincs mód. Neked kell megírni az ellenőrzést, ha runtime karod megállapítani, hogy van-e kijelző.
(#) malak válasza vargham hozzászólására (») Szept 26, 2018 /
 
Valami tám pontot tudnál adni?Valahogy ellenörizzem le hogy mondjuk a 00x27 cimen jön e válasz?Ha igen akkor azt hogy?
(#) Johnycorp válasza malak hozzászólására (») Szept 26, 2018 / 1
 
Szia.

I2C használata esetén például kiindulási alap lehetne ez a Scanner:
Bővebben: Link

X időnként "ránézhetnél" vele a 00x27 címre.
(#) malak válasza Johnycorp hozzászólására (») Szept 26, 2018 /
 
Én hülye!
Pedig ismerem ezt a progit és használom is amikor keresgéltem vele az lcd portját.
Köszönöm szépen .Igazság szerint csak az elején kell megvizsgálni mert a melohelyemen nincs bent az lcd igy viszont tudom tesztelni a programot menetközben lcd nélkül is és nem kell átirnom mindig a teljes programot ahol a kiiratás megy.
(#) benjami válasza malak hozzászólására (») Szept 26, 2018 /
 
Azt nem írtad milyen LCD-ről van szó, de ha a sima karakteres LiquidCrystal.h / cpp -ről, az semmit nem olvas vissza a kijelzőtől, így fogalma sincs róla, hogy fizikailag rá van-e kötve. Ha az RW láb nincs használva (és a kijelzőn fixen GND-re van kötve), akkor meg még saját programmal sem lesz lehetőséged a csatlakoztatás meglétét ellenőrizni.
(#) vargham válasza benjami hozzászólására (») Szept 26, 2018 /
 
Valóban nem írta, hogy párhuzamosan (4 vagy 8 vezetékkel) kötötte be, vagy I2C-n.
(#) tbarath válasza malak hozzászólására (») Szept 26, 2018 / 1
 
Épp az is megoldás lehet erre, hogy az egyik nem használt pin-t high-ra húzod (input_pullup), és ha a cégnél játszol akkor szépen a földre kötöd. Így nem kell ellenőrizni az LCD-t, hanem egy kapcsolóval tudsz váltani az otthoni és a céges környezet között.
(#) malak válasza benjami hozzászólására (») Szept 26, 2018 /
 
Nos köszönöm mindenkinek a válaszát és valoban nem irtam .Az lcd sima karakteres i2c modullal és ugy van összekötve az Arduinoval.Ennek egyszerübb a csatlakoztatása mivel csak a fesz kell neki plusz az sda scl pin.Viszont a scannerrel kapcsolatban belefutottam egy érdekes hibába,ha az i2scannert külön lefutattom tökéletesen müködik ,viszont ha beillesztem a saját a programomba függvényként "void" és csak egyszer hivom meg a setupban akkor nem müködik.Itt vajon mi lehet a hiba?Minden könyvtár ami kell a müködéséhez az fel van telepitve és mégis önállóan müködik,programon belül pedig nem.Amugy meg azt szerettem volna megoldani hogy ne kelljen az összes lcd.print parancsot állandoan átirkálni serial.printre.
Apropo hogyan tudok olyan változót késziteni amit helyesen cseréli az lcd nevet serialra ugy hogy 1 feltétel ha igaz akkor marad az lcd egyébként pedig serial?Most ugy probáltam hogy csináltam egy char lcdalias=("lcd"); változót de ezt nem fogadja el programon belül.
A hozzászólás módosítva: Szept 26, 2018
(#) KoblogPerGyok válasza malak hozzászólására (») Szept 26, 2018 / 1
 
Sima byte elég. Ha 1 akkor serial, minden más esetben lcd. Lehet boolean is, de nem szükséges. At is 1 báyt, ha jól emlékszem.

A setup-ban beállítod. Semmi extra.

if (valami==1)
{
lcd
}
else

{
serial
}
(#) tbarath válasza malak hozzászólására (») Szept 26, 2018 / 1
 
Szerintem neked nem kell az egész i2c sanner-t használnod, csak a lényegét.
  1. target = 's'
  2. Wire.beginTransmission(address);
  3. error = Wire.endTransmission();
  4. if (error == 0){
  5.         target = 'l';}

Az address nyilván az a cím, amit az lcd-hez használsz, talán 27?

A kiiratást pedig egy saját fv-nyel csinálnám, valahogy így:
  1. void myprint(char *x){
  2.         if ('l' == target){
  3.                 lcd.print(x);}
  4.         else{
  5.                 Serial.print(x);}
  6. }
(#) KoblogPerGyok válasza malak hozzászólására (») Szept 26, 2018 / 1
 
A legjobb, ha ezt nem minden esetben a loop-on belül csinálod, hanem kiszervezed egy függvénybe. A loop-on belül pedig csak ezt a függvényt hívod meg, mégpedig paraméterként átadva a megfelelő valami értékkel.

setup

loop itt meg ahol kell meghívod.



  1. Void kiirat(int x)
  2. {
  3.   if x==1
  4.      {
  5.         LCD-re
  6.       }
  7.       else
  8.      {
  9.        Serial-ra
  10.       }
  11. return;
  12. }
(#) vargham válasza malak hozzászólására (») Szept 26, 2018 / 2
 
A változókkal az a baj, hogy foglalják a helyet a flash-ban és a RAM-ban is. Miközben ez az egész eldől már fordításkor. Hiszen tudod, mikor melyiket akarod használni. Erre találták ki a preprocessor makrókat.
Én így csinálnám:
  1. #define PRINT(x) Serial.print(x)
  2. //#define PRINT(x) lcd.print(x)
  3.  
  4. void setup() {
  5.   Serial.begin(9600);
  6. }
  7.  
  8. void loop() {
  9.   PRINT("Hello Word!");
  10.   delay(1000);
  11. }


És így csak cserélgetned kell, hogy melyik define van kikommentezve.
A hozzászólás módosítva: Szept 26, 2018
(#) malak válasza tbarath hozzászólására (») Szept 26, 2018 /
 
Nem is raktam bele az egészet hanem csak a 28ig nézi de a progin belül hibára hivatkozik a wire.h könyvtárnál mig külön nincs hiba.

koblogpergyok:
De igy nem veszi át magát a parancsot hacsak nem tudok rájönni hogy kell a könyvtár parancsra változoval hivatkozni,igaz akkor se uszom meg a jelenlegi parancsok átirását.

Ugye a serial.print parancs az a serial portra küldi ki a karaktert mig az i2c könyvtárba kreált lcd.print az pedig az lcdre.
(#) tbarath válasza vargham hozzászólására (») Szept 26, 2018 / 1
 
Ott a pont!
(#) tbarath válasza malak hozzászólására (») Szept 26, 2018 / 1
 
Kellene a kód és a pontos hibaüzenet is, mert baromi nehéz úgy segíteni, hogy csak homályosan mesélsz a hibáról és arról amit csinálsz.
(#) malak válasza vargham hozzászólására (») Szept 26, 2018 /
 
Köszönöm szépen szerintem ez lessz a jö megoldás.Ha az i2cscanner majd müködik a progin belül akkor akár vele is kapcsolgathatom a defineben a lcd.print és a serial printet és csak a print (x)az lessz a jelenlegi lcdalias(x)
(#) KoblogPerGyok válasza malak hozzászólására (») Szept 26, 2018 / 1
 
Szerintem nem. Lehet hogy tévedek, de a define-al a fordítónak mondod meg, hogy mit tegyen a helyére. Megoldható úgy is, de a lefordult kódban nem biztos, hogy jó lesz. Az a megoldás tökéletes arra az esetre, ha a fordítás előtt te magad döntöd el, hogy lesz-e rajta LCD vagy sem.

Simán megoldhatod azt, hogy ha rádugod az lcd-t akkor arra is kirakja a kért dolgokat, ha van időközben serial-is, akkor arra is. Ok, hogy begin mindenhol van, de le is kell zárni.

Mindez 1 byte pluszban. (az LCD.h és a serial, illetve a wire.h sokkal többet elvisznek.)

De tévedhetek is, régen kódoltam ebben a nyelvben.
(#) malak hozzászólása Szept 26, 2018 /
 
  1. #include<EEPROM.h> // arduino eeprom bekérése ide fog menteni.
  2. #include <Time.h>
  3. #include <Wire.h>
  4. #include <LiquidCrystal_I2C.h>
  5. #include "RTClib.h"
  6. #include <avr/wdt.h>
  7.  
  8.  
  9. void softwareReset( uint8_t prescaller) {
  10.   // start watchdog with the provided prescaller
  11.   wdt_enable( prescaller);
  12.   // wait for the prescaller time to expire
  13.   // without sending the reset signal by using
  14.   // the wdt_reset() method
  15.   while(1) {}
  16. }
  17.  
  18. // Lcd cim 0x27 a 16 karkateres 2 soros kijelző
  19.  
  20. RTC_DS3231 clock_rtc;
  21. char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
  22. char monthnames[12][12] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
  23.                         "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
  24. ///gombok cimzése
  25. int button1 = 3; //gomb d3
  26. int button2 = 4; //gomb d4
  27. long buttonTimer = 0;
  28. long buttonTime = 250;
  29.  
  30. boolean buttonActive = false;
  31. boolean longPressActive = false;
  32.  
  33. boolean button1Active = false;
  34. boolean button2Active = false;
  35.  
  36. const float R1 = 300000.0; // Valor do resistor R1 (300K)
  37. const float R2 = 100000.0; // Valor do resistor R2 (100K)
  38. float vmin, vmax, vin;
  39.  
  40. byte Menuindex;
  41.  
  42.  
  43. void setup()    
  44. {
  45.   Wire.begin();
  46.   i2cscan();
  47. //  if lcdalias == lcd LiquidCrystal_I2C lcdalias(0x27, 16, 2);
  48.    //pinMode(2, OUTPUT);  //Pin digital
  49.    pinMode(7, INPUT);  //Injector test jel
  50.    pinMode(button1, INPUT); //gomb1
  51.    pinMode(button2, INPUT); //gomb2
  52.    pinMode(13, OUTPUT);  //LED
  53.    pinMode(18, INPUT);  //sebességjel
  54.    pinMode(A0, INPUT); //gyujtás jel
  55.    vmin = 100.0;
  56.  
  57.    lcdalias.begin();
  58.    
  59.    lcdalias.backlight();//háttérvilágitás be
  60.    clock_rtc.begin(); // Initialize the clock_rtc object
  61.    lcdaliasC();
  62.    lcdalias.setCursor(0,0); //elsö sor
  63.    lcdalias("OpelAstra F");
  64.    lcdalias.setCursor (0,1); // 2 sor
  65.    lcdalias("Welcome!");
  66.    delay(5000);
  67.    lcdaliasC();
  68.    lcdalias.noBacklight();//háttérvilágitás ki
  69.  
  70. }
  71. void loop() {
  72.  
  73.  
  74. ///gombfigyelés
  75.     if (digitalRead(button1) == HIGH) {
  76.  
  77.     if (buttonActive == false) {
  78.       Menuindex++;
  79.       buttonActive = true;
  80.       buttonTimer = millis();
  81.  
  82.     }
  83.  
  84.         button1Active = true;
  85.  
  86.   }
  87.  
  88.   if (digitalRead(button2) == HIGH) {
  89.  
  90.     if (buttonActive == false) {
  91.  
  92.       buttonActive = true;
  93.       buttonTimer = millis();
  94.  
  95.     }
  96.  
  97.     button2Active = true;
  98.  
  99.   }
  100.  
  101.   if ((buttonActive == true) && (millis() - buttonTimer > buttonTime) && (longPressActive == false)) {
  102.  
  103.     longPressActive = true;
  104.  
  105.     if ((button1Active == true) && (button2Active == true)) {
  106.  
  107.     //  LED4Active = !LED4Active;
  108.      // digitalWrite(LED4, LED4Active);
  109.  
  110.     } else if((button1Active == true) && (button2Active == false)) {
  111.  
  112.       //LED5Active = !LED5Active;
  113.       //digitalWrite(LED5, LED5Active);
  114.  
  115.     } else {
  116.  
  117.       //LED6Active = !LED6Active;
  118.       //digitalWrite(LED6, LED6Active);
  119.  
  120.     }
  121.   }
  122.  
  123.   if ((buttonActive == true) && (digitalRead(button1) == LOW) && (digitalRead(button2) == LOW)) {
  124.  
  125.     if (longPressActive == true) {
  126.  
  127.       longPressActive = false;
  128.  
  129.     } else {
  130.  
  131.       if ((button1Active == true) && (button2Active == true)) //ha mindkét gomb hosszan nyomva akkor ora beállitás
  132.       {
  133.       ora_setup();
  134.       } else if ((button1Active == true) && (button2Active == false)) {
  135.  
  136.       //  LED2Active = !LED2Active;
  137.       //  digitalWrite(LED2, LED2Active);
  138.  
  139.       } else {
  140.  
  141.      //   LED3Active = !LED3Active;
  142.      //   digitalWrite(LED3, LED3Active);
  143.  
  144.       }
  145.  
  146.     }
  147.  
  148.     buttonActive = false;
  149.     button1Active = false;
  150.     button2Active = false;
  151.  
  152.   }
  153.    
  154.     lcdalias.backlight();//háttérvilágitás be
  155.     DateTime now = clock_rtc.now();
  156.     lcdalias.setCursor(0,0); //elsö sor
  157.     lcdalias("Time:  ");  
  158.     lcdalias(now.hour(), DEC);
  159.     lcdalias(':');
  160.     lcdalias(now.minute(), DEC);
  161.     lcdalias(':');
  162.     lcdalias(now.second(), DEC);
  163.     lcdalias.setCursor(0,1); //második sor
  164.     lcdalias("Date: ");
  165.     lcdalias(now.year(), DEC);
  166.     lcdalias('/');
  167.     lcdalias(monthnames[now.month()]);  // lcd.print(now.month(), DEC); honap számmal!
  168.     lcdalias('/');
  169.     lcdalias(now.day(), DEC);
  170.     lcdalias(" (");
  171.     lcdalias(daysOfTheWeek[now.dayOfTheWeek()]); //a hét napja
  172.     lcdalias(") ");
  173.     delay(6000);
  174.    
  175.      if (! clock_rtc.begin()) {
  176.      lcdaliasC();
  177.     lcdalias("Nincs RTC !...");
  178.     while (1);
  179.   }
  180.  
  181.   if (clock_rtc.lostPower()) {
  182.     lcdaliasC();
  183.     lcdalias("RTC elem lemerult> beallitas!");
  184.     ora_setup();
  185.     }
  186.     feszultseg();
  187.    
  188.   }// loop vége
  189.  // ide jönnek a függvények
  190.  void ora_setup() //óra beállítás
  191.  {
  192.  // ebben a sorban állithato az ora gombokkal
  193.   //  clock_rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));//ez a géppel valo frissités
  194.     // This line sets the RTC with an explicit date & time, for example to set
  195.     // January 21, 2014 at 3am you would call:
  196.     // clock_rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  197.     int ev = 2018;
  198.     int honap = 1;
  199.     int nap = 1;
  200.     int ora = 1;
  201.     int perc = 0;
  202.     int sec = 0;
  203.     lcdaliasC();
  204.     lcdalias(ev,DEC);
  205.     clock_rtc.adjust(DateTime(ev, honap, nap, ora, perc, sec));
  206.     softwareReset( WDTO_60MS);
  207.   }
  208.   void feszultseg(){
  209.    //feszültség mérés
  210.      int sensorValue = analogRead(A0);
  211.      float voltage = sensorValue * (5.0 / 1023.0);
  212.      vin = voltage / (R2/(R1+R2));
  213.    if (vin < vmin)
  214.     {
  215.        vmin = vin;
  216.     }
  217.    if (vin > vmax)
  218.    {
  219.        vmax = vin;
  220.     }
  221.   }
  222.   void i2cscan()
  223.   {
  224.  //   #define lcdalias(x) Serial.print(x)
  225. //#define lcdalias(x) lcd.print(x)
  226.    byte error, address;
  227.   int nDevices;
  228.  
  229.   Serial.println("Scanning...");
  230.  
  231.   nDevices = 0;
  232.   for(address = 1; address < 28; address++ )
  233.   {
  234.     // The i2c_scanner uses the return value of
  235.     // the Write.endTransmisstion to see if
  236.     // a device did acknowledge to the address.
  237.     Wire.beginTransmission(address);
  238.     error = Wire.endTransmission();
  239.  
  240.     if (error == 0)
  241.     {
  242.       Serial.print("I2C device found at address 0x");
  243.       if (address<16)
  244.         Serial.print("0");
  245.       Serial.print(address,HEX);
  246.       Serial.println("  !");
  247.       #define lcdalias(x) lcd.print(x)
  248.       #define lcdaliasC() lcd.clear(x)
  249.       nDevices++;
  250.     }
  251.     else if (error==4)
  252.     {
  253.       Serial.print("Unknown error at address 0x");
  254.       if (address<16)
  255.         Serial.print("0");
  256.       Serial.println(address,HEX);
  257.     }    
  258.   }
  259.   if (nDevices == 0)
  260.     Serial.println("No I2C devices found\n");
  261.     #define lcdalias(x) Serial.print(x)
  262.   else
  263.     Serial.println("done\n");
  264.  
  265.   delay(5000);           // wait 5 seconds for next scan
  266. }


Nos itt van a teljes kod beleraktam vargham javaslatát de igy azt mondja ellenőrzésnél hogy az lcdalias nincs deklarálva.
Oppsz meg még másokatis átkell irnom pld a setcursort szerintem a serial port nem ismeri
A hozzászólás módosítva: Szept 26, 2018
(#) tbarath válasza malak hozzászólására (») Szept 26, 2018 / 1
 
Persze, lcdalias nincs deklaráva. A define-okat a kód legelejére kell írni, nem pedig egy fv mélyén kell csinálni, úgy nem működik. Ezek konstansok, fordítási időben fixek, nem lehet őket futásidőben felüldeklarálni.
Bővebben: Link
A scan kódod amúgy továbbra is bloat, és tök fölöslegesen scan-nel végig 26 címet.
Következő: »»   474 / 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