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   570 / 851
(#) kapu48 válasza asrock hozzászólására (») Nov 26, 2019 /
 
Szerintem az a gond, hogy te mindig hozzáadsz 1-et az indexhez.
inkább igy kellene
  1. tol=szoveg.indexOf("X:",ig);  
  2.    if (tol==-1) {break;}; // ha nem talált
  3.   ig=szoveg.indexOf(" ",tol); // Itt pedig kimaradt a szóköz, már ha azt keresnéd?
A hozzászólás módosítva: Nov 26, 2019
(#) asrock válasza kapu48 hozzászólására (») Nov 26, 2019 /
 
Leharapja az első 2 karaktert ez jön ki neki X:0.000 Y:0. és ezt olvasa X:101.000 !


  1. int tol=0;
  2. int ig=0;
  3.   String Xertek="-";
  4.   String Yertek="-";
  5.   String Zertek="-";
  6. String T="TESZT";
  7.  
  8. void setup() {
  9.  Serial.begin(115200);
  10.  
  11. }
  12.  
  13. void loop() {
  14.  
  15.  
  16. String szoveg="X:101.000 Y:100.000 Z:100.000 X:10.000 Y:10.000 Z:10.000 X:0.000 Y:0.000 Z:0.000";
  17.  
  18. while (true) {
  19.  
  20.    tol=szoveg.indexOf("X:",ig);  
  21.    if (tol==-1) {break;};
  22.   ig=szoveg.indexOf(" ",tol);
  23.    Xertek=szoveg.substring(tol,ig+5);
  24.  
  25.     ESP.wdtFeed();
  26. }
  27.  
  28.  
  29. delay(1000);
  30. Serial.println    (Xertek);
  31.  
  32. Serial.println    (Yertek);
  33.  
  34. Serial.println    (Zertek);
  35.  
  36.  }
(#) kapu48 válasza asrock hozzászólására (») Nov 26, 2019 / 5
 
Íme a megoldás:
  1. int tol=0;
  2. int ig=0;
  3.   String Xertek="-";
  4.   String Yertek="-";
  5.   String Zertek="-";
  6. String T="TESZT";
  7.  
  8. void setup() {
  9.  Serial.begin(115200);
  10.  
  11. }
  12.  
  13. String szoveg="X:101.000 Y:100.000 Z:100.000 X:10.000 Y:10.000 Z:10.000 X:0.000 Y:0.000 Z:0.000";
  14.  
  15. void loop() {
  16.  
  17.  
  18.   int hossz =  szoveg.length();
  19.  
  20. do{
  21.  
  22.   tol=szoveg.indexOf("X",ig);  
  23.   if (tol==-1) {break;}
  24.   ig=szoveg.indexOf(" ",tol);
  25.   Xertek=szoveg.substring(tol,ig);
  26.    
  27.    tol=szoveg.indexOf("Y",ig);  
  28.    if (tol==-1) {break;}  
  29.   ig=szoveg.indexOf(" ",tol);
  30.    Yertek=szoveg.substring(tol,ig);
  31.  
  32.   tol=szoveg.indexOf("Z",ig);  
  33.    if (tol==-1) {break;}  
  34.   ig=szoveg.indexOf(" ",tol);
  35.   Zertek=szoveg.substring(tol,ig);
  36.  
  37.   Serial.println    (Xertek);
  38.   Serial.println    (Yertek);
  39.   Serial.println    (Zertek);
  40.   //  ESP.wdtFeed();
  41.  
  42. }while (ig < hossz);
  43.   ig = 0;
  44.   tol = 0;
  45. Serial.println();
  46. Serial.println();  
  47. delay(1000);
  48.  
  49.  }

Idézet:

X:101.000
Y:100.000
Z:100.000
X:10.000
Y:10.000
Z:10.000
X:0.000
Y:0.000
Z:0.000


X:101.000
Y:100.000
Z:100.000
X:10.000
Y:10.000
Z:10.000
X:0.000
Y:0.000
Z:0.000


A hozzászólás módosítva: Nov 26, 2019
(#) asrock válasza kapu48 hozzászólására (») Nov 27, 2019 /
 
Köszönöm ez nagyon jó!
(#) djusee válasza kapu48 hozzászólására (») Nov 27, 2019 / 1
 
Akkor nyomtam egy köszönömöt még ha nem is nekem volt szükségem a segitségre, de hát idöt energiát öltél bele hogy segits.
A hozzászólás módosítva: Nov 27, 2019
(#) usane válasza asrock hozzászólására (») Nov 27, 2019 /
 
Szia!
Kérnék egy kis segítséget ezzel kapcsolatban. Nem értem hogy segítene nekem ez a lib. Ha a Wifit időzítem nem fog belehalni a kapcsolat?

pipi: Igen az ESP32-t nézegetem éppen.
(#) asrock válasza usane hozzászólására (») Nov 27, 2019 /
 
Hali!
Szerintem ebben benne van amit keresel itt a wifi és a pixel egymás mellet mennek...
Bővebben: Link
Ticker lib még én is küzdök egyenlőre mert nekem is vannak igényeim ezel a funkcióval...
Amúgy milyen pixeled chipet használsz?
A hozzászólás módosítva: Nov 27, 2019
(#) usane válasza asrock hozzászólására (») Nov 28, 2019 /
 
Szia!
Ez sajnos nem jó. Mint írtam korábban a FastLED tudtommal nem támogatja az RGBW-t csak sima RGB-t.
SK6812RGBW szalagom van. Most az ESP32-vel játszok, az meg tud hajtani 2 ilyen szalagot Makuna NeopixelBus könyvtárával, és megy mellette a WiFi is, csak még meg kell csinálnom az OTA-t meg a Wifi-s részt ami már megvolt a 8266-on.
(#) asrock válasza usane hozzászólására (») Nov 28, 2019 /
 
szia!
Igy értem én csak minta példákbol dolgozom jobb tanulni is belőle igy csak azt tudom ajánlani ami hasonló...
De a le irtak alapján nézd meg ezt:Bővebben: Link
(#) kiborg hozzászólása Nov 29, 2019 /
 
Sziasztok!

Szeretném használni a BME280-as chipet. Van library-ja is,amiben szerepel ez a kódrész:
  1. //##########################################################################
  2. float BlueDot_BME280::readTempC(void)
  3. {       if (parameter.tempOversampling == 0b000) //disabling the temperature measurement function
  4.         {               return 0;
  5.         }
  6.         else
  7.         {
  8.                 int32_t adc_T;
  9.                 adc_T = (uint32_t)readByte(BME280_TEMPERATURE_MSB) << 12;
  10.                 adc_T |= (uint32_t)readByte(BME280_TEMPERATURE_LSB) << 4;
  11.                 adc_T |= (readByte(BME280_TEMPERATURE_XLSB) >> 4 )& 0b00001111;
  12.                
  13.                 int64_t var1, var2;
  14.                
  15.                 var1 = ((((adc_T>>3) - ((int32_t)bme280_coefficients.dig_T1<<1))) * ((int32_t)bme280_coefficients.dig_T2)) >> 11;
  16.                 var2 = (((((adc_T>>4) - ((int32_t)bme280_coefficients.dig_T1)) * ((adc_T>>4) - ((int32_t)bme280_coefficients.dig_T1))) >> 12) *
  17.                 ((int32_t)bme280_coefficients.dig_T3)) >> 14;
  18.                 t_fine = var1 + var2;
  19.                 float T = (t_fine * 5 + 128) >> 8;
  20.                 T = T / 100;
  21.                 return T;
  22.         }
  23. }


Ha ezt a kódrész kiemelem a library-ból és a saját programomba átteszem(némi átalakítással természetesen,de a lényegi részhez nem nyúlva):
  1. //##########################################################################
  2. float BME280_readTempC()
  3. {
  4.  
  5.   if (BME280_tempOversampling == 0b000)          //disabling the temperature measurement function
  6.   {
  7.     return 0;
  8.   }
  9.  
  10.   else
  11.   {
  12.     int32_t adc_T;
  13.     adc_T = (uint32_t)BME280_readByte(BME280_TEMPERATURE_MSB) << 12;
  14.     adc_T |= (uint32_t)BME280_readByte(BME280_TEMPERATURE_LSB) << 4;
  15.     adc_T |= (BME280_readByte(BME280_TEMPERATURE_XLSB) >> 4 )& 0b00001111;
  16.    
  17.     int64_t var1, var2;
  18.    
  19.     var1 = ((((adc_T>>3) - ((int32_t)BME280_dig_T1<<1))) * ((int32_t)BME280_dig_T2)) >> 11;
  20.     var2 = (((((adc_T>>4) - ((int32_t)BME280_dig_T1)) * ((adc_T>>4) - ((int32_t)BME280_dig_T1))) >> 12) *
  21.     ((int32_t)BME280_dig_T3)) >> 14;
  22.     float t_fine = var1 + var2;
  23.     float T = (t_fine * 5 + 128) >> 8;
  24.     T = T / 100;
  25.     return T;
  26.   }
  27. }


Elsőnek az nem tetszett neki, hogy a t_fine nem volt deklarálva, majd ezután a float T = (t_fine * 5 + 128) >> 8; kódrész nem tetszik neki.
invalid operands of types 'float' and 'int' to binary 'operator>>' hibaüzenettel kiszáll a fordításból.
Hogy működik ez a dolog, library-ban megengedett főprogramban nem? Hogy lehetne megoldani? (magának is ellentmond, mert az adc_T-t és más 32bites integereket meg simán shiftel. De floatot meg nem?
A hozzászólás módosítva: Nov 29, 2019
(#) szeg76 válasza kiborg hozzászólására (») Nov 29, 2019 /
 
Nincs ellentmondás: a << és >> operátor csak egész típusokon működik és a gyári példaprogramban t_fine 32 bites, előjeles egész, nem pedig lebegőpontos, mint a te programodban.
(#) kiborg válasza szeg76 hozzászólására (») Nov 29, 2019 /
 
Ahha, köszi, bogarászom tovább.
(#) tbarath hozzászólása Dec 4, 2019 /
 
Kicsit talán OFF amit kérdeznék. Szerintetek van értelme egy arduino lapot használni SPI flash programozóként? Nem azt a párszáz/párezer Ft-ot sajnálom, amibe egy "gyári" cucc kerülne Ebay-en, csak a posta elesett, szerintem ha most rendelném február előtt nem érne ide.

Találtam rá kódot (Bővebben: Link), a srác azt írja, hogy egy router flasht égetett vele. Én is ilyesmire használnám, de érdekelne, hogy van-e valakinek ilyesmivel tapasztalata.
(#) sany válasza tbarath hozzászólására (») Dec 4, 2019 /
 
Szerintem van értelme, nekem is segìtett már amikor nem volt más kéznél.
(#) tbarath válasza sany hozzászólására (») Dec 4, 2019 /
 
Köszi!
(#) Bell hozzászólása Dec 5, 2019 /
 
Sziasztok!
Arduino pro micro-val szeretnék 4 db egymástól független 1 KHz-es szervót működtetni.
Alapól csak a 3-as lábon van 970 Hz körüli jel, az 5,6,9,10-en ennek csak a fele.
Nem tudom, mennyire érzékenyek ezek az egyszerű modell szervók az alacsonyabb frekvenciára, vagy talán az a jobb megoldás, ha magasabb frekvencián járatom.
Van járható út külön áramkörök nélkül?
  1. int led3 = 3;           // the PWM pin the LED is attached to
  2. int led5 = 5;           // the PWM pin the LED is attached to
  3. int led6 = 6;           // the PWM pin the LED is attached to
  4. int led9 = 9;           // the PWM pin the LED is attached to
  5. int led10 = 10;           // the PWM pin the LED is attached to
  6. int an1, brightness;
  7. #define poti A3
  8. void setup() {
  9.   pinMode(led3, OUTPUT);
  10.   pinMode(led5, OUTPUT);
  11.   pinMode(led6, OUTPUT);
  12.   pinMode(led9, OUTPUT);
  13.   pinMode(led10, OUTPUT);
  14.   pinMode(poti, INPUT);
  15. }
  16.  
  17. void loop() {
  18.   an1 = analogRead(poti);
  19.   brightness = an1/4;
  20.   analogWrite(led3, brightness);
  21.   analogWrite(led5, brightness);
  22.   analogWrite(led6, brightness);
  23.   analogWrite(led9, brightness);
  24.   analogWrite(led10, brightness);
  25.   delay(20);
  26. }
A hozzászólás módosítva: Dec 5, 2019
(#) pipi válasza Bell hozzászólására (») Dec 5, 2019 /
 
Hali!
Lehet megzavarodik, hogy 20msec-enként újraírod(inicializálod), próbáld csak akkor kiírni amikor megváltozik a poti, vagy tesztként csak egyszer állítsd be
A hozzászólás módosítva: Dec 5, 2019
(#) tbarath válasza Bell hozzászólására (») Dec 5, 2019 /
 
Tudod a frekit változtatni: Bővebben: Link.
Mondjuk én nem használtam még ezt a függvényt, de regiszterpiszkálással megoldottam. Mondjuk ennek _lehet_ olyan mellékhatása, hogy a millis() és hasonló függvények megkotlanak, nekem nem volt ilyen problémám.
Ez a pro micro nem tudom milyen uC, de a 328 alapú uno/nano esetén az 5-ös és 6-os pin 980 Hz, a többi (3, 9, 10, 11) PWM lábon pedig 490 Hz.
(#) Bell válasza tbarath hozzászólására (») Dec 5, 2019 /
 
Köszönöm!
Sajnos hibaüzenettel leáll:
Idézet:
„Arduino: 1.8.9 (Windows 7), Alaplap:"Arduino Leonardo"
pwm0:87:5: error: 'TCCR2B' was not declared in this scope

TCCR2B = TCCR2B & 0b11111000 | mode;”

ATMega32U4 van az alaplapon.
(#) tbarath válasza Bell hozzászólására (») Dec 5, 2019 /
 
Akkor logikus is, hogy nem megy, mert ez a kód AtMega328-ra van kitalálva.
Akkor viszont az AtMega32 adatlapján (Bővebben: Link) kellene megkeresni a megfelelő regisztereket, amivel a PWM freki állítható. Ha jól látom az 100. oldal környékén van az adatlapon ilyesmiről szó.
Ezen a lapon egyébként a freki a 3 és 11 pinen 980 Hz, 490 Hz az 5, 6, 9, 10, 13 pinen. Ezek gondolom (legalább) két külön timer-en vannak.
(#) Kovidivi válasza Bell hozzászólására (») Dec 5, 2019 /
 
A PWM frekvenciája a PWM felbontásától és a mikrokontroller órajelétől függ. 16MHz-es órajel osztva pl. 2 a tizedikennel (1024) megadja a 15.6KHz-et.
14bit-nél kapod a 976Hz-et.
16bit-nél a 244Hz-et.
Ha elő tudsz állítani 490Hz-es PWM jelet, akkor menni fog a 976Hz is.
A szervónak meg pont az időzítés lenne a lényege, ez egy protokoll, aminél fix paraméterek vannak.
(#) Bell válasza tbarath hozzászólására (») Dec 5, 2019 /
 
Köszönöm!
Sajnos nem állok azon a szinten, hogy ezt nulláról összerakjam, így alapból csak a 3-as láb használható.
De próbálok keresgélni konkrét megoldást.
(#) Bell válasza Kovidivi hozzászólására (») Dec 5, 2019 /
 
Fél frekvencia elég durva eltérés lenne, lehet, hogy nem is működik.
Nagyon nem vagyok képben, hogyan és mit kell a 980 Hz-hz beállítani.
(#) Bell hozzászólása Dec 6, 2019 /
 
Találtam egy részletes leírást (Bővebben: Link) a Leonardo PWM beállítási lehetőségeiről, ami hasonlít a pro micro-ra. (de 10 fölött már nincs több láb.).
Ez alapján - szerény ismereteim szerint - nincs lehetőség 4 kimeneten 1 KHz körüli PWM jel előállítására.
De ebben nem vagyok biztos.
Létezik valami használható egyéb megoldás?
(#) tbarath válasza Bell hozzászólására (») Dec 6, 2019 /
 
Hát ne a nulláról akkor, valaki tuti megcsinálta már.
Itt vannak a frekik, ez alapján a Leo, a Micro és a Yún ugyanarra a 32u4-re alapul. Ha rákeresel pl. az "arduino micro pwm frequency" , "arduino leonardo pwm frequency", stb. kifejezésre, akkor tuti találsz az elején valamit, ahol le van írva, hogy hogy is kell csinálni.
Nekem nincs ilyen lapom, magam kipróbálni nem tudom, de nem lehet annyira sárkányos dolog - csak más regiszterekbe kell más értéket írni, mint a fentebb linkelt kódban van.
(#) tbarath válasza Bell hozzászólására (») Dec 6, 2019 /
 
Nagyon nem olvastam át, de szerintem félreérted. Ha lesz ma időm melóban akkor átnézem, és megpróbálom kitalálni, hogy mit is kellene hova írni.
(#) djusee válasza Bell hozzászólására (») Dec 6, 2019 /
 
Esetleg külsö modul használata(24Hz - 1526Hz -ig)? Persze ha ez járható út.
(#) mateatek válasza Bell hozzászólására (») Dec 6, 2019 / 1
 
A kontrolleredben van 2db 16 bites timer. Mindkettőnek 3 kimenete. (Sajnos 1-2 ezek közül közös.) A timert beállítva fast pwm módba és 1 kHz-re, a két timer tudja a 4 PWM kimenetet bőven.

  1. TCCR1A = 0;
  2. TCCR1B = 0;
  3. TCCR3A = 0;
  4. TCCR3B = 0;
  5. TCCR1A = _BV(WGM11) | _BV(COM1B1) | _BV(COM1C1);
  6. TCCR1B = _BV(WGM13) | _BV(CS10) | _BV(WGM12);
  7. ICR1   = 15999;
  8. TCCR3A = _BV(WGM31) | _BV(COM3A1) | _BV(COM3B1);
  9. TCCR3B = _BV(WGM33) | _BV(CS30) | _BV(WGM32);
  10. ICR3   = 15999;
  11. OCR1B = 1599; //PWM kitoltes
  12. OCR1C = 1599; //PWM kitoltes
  13. OCR3A = 1599; //PWM kitoltes
  14. OCR3B = 1599; //PWM kitoltes


Az OCRxx regiszterekkel állítod a PWM kitöltését, ami 0 és 15999 között lehet. Lehetőség van ezen kívül a kimenetek invertálására is, ha szükséges. A kimeneteket persze engedélyezzed kimenetként a kódban.
Nem próbáltam ki a kódot, de remélem jó.
A hozzászólás módosítva: Dec 6, 2019
(#) asrock hozzászólása Dec 6, 2019 /
 
Valaki tudja bool string rész mért nem teljesülhet?
ez a rész:

String updatePass ="1234"; emulalt password
................................................
bool updatePass(String ch)

  1. String pass = "1234"; //Password to unlock. be sure to edit the '5' inside '[]' to password length +1.
  2. int chances = 3;
  3. bool afterChances = true;
  4.  
  5. //Pins
  6. int RECV_PIN = 11; //IR Reciever pin (PWM).
  7. int greenLed = 7; //Green LED pin.
  8. int redLed = 8; //Red Led pin.
  9. int buzzer = 4; //Buzzer pin.
  10.  
  11.  
  12.  
  13. String btnReset = ""; //Your Reset button IR hex code.
  14.  
  15. //Misc
  16. bool shouldBeep = true;
  17. bool unlockSound = true;
  18.  
  19. bool locked = true;
  20. String cPass = "";
  21. int chance = 0;
  22. bool updatePass;
  23.  
  24.  
  25. void setup() {
  26.   pinMode(redLed, OUTPUT);
  27.   pinMode(greenLed, OUTPUT);
  28.   pinMode(buzzer, OUTPUT);
  29.  
  30.   Serial.begin(115200);
  31.   digitalWrite(redLed, LOW);
  32.   digitalWrite(greenLed, LOW);
  33.  
  34.  
  35. //------------------------------------
  36.  
  37.    Serial.begin(9600);
  38.  
  39.   String updatePass ="1234";
  40.  
  41. //------------------------------------
  42.  
  43. }
  44.  
  45. void loop() {
  46.  
  47.     if (chance > chances)
  48.       digitalWrite(buzzer, HIGH);//buzzer
  49.  
  50.     if (locked == true) {
  51.       digitalWrite(redLed, HIGH);
  52.       digitalWrite(greenLed, LOW);
  53.     }
  54.     else {
  55.       digitalWrite(redLed, LOW);
  56.       digitalWrite(greenLed, HIGH);
  57.     }
  58.   }
  59.  
  60.  
  61.  
  62. bool updatePass(String ch) {
  63.   if (locked == false)
  64.     return false;
  65.   beep();
  66.   if (updatable() == true) {
  67.     cPass += ch;
  68.     if (cPass.length() < pass.length()) {
  69.  
  70.     }
  71.     else {
  72.       if (pass == cPass) {
  73.         locked = false;
  74.         digitalWrite(greenLed, HIGH);
  75.         digitalWrite(redLed, LOW);
  76.         chance = 0;
  77.         Serial.println("\nUNLOCKED");
  78.         if (unlockSound == true) {
  79.           delay(60);
  80.           digitalWrite(buzzer, HIGH);
  81.           delay(150);
  82.           digitalWrite(buzzer, LOW);
  83.           delay(100);
  84.           digitalWrite(buzzer, HIGH);
  85.           delay(200);
  86.           digitalWrite(buzzer, LOW);
  87.         }
  88.       }
  89.       else {
  90.         cPass = "";
  91.         chance += 1;
  92.         digitalWrite(buzzer, HIGH);
  93.         delay(1000);
  94.         digitalWrite(buzzer, LOW);
  95.         Serial.println("\nWRONG PASSWORD!");
  96.       }
  97.     }
  98.   }
  99. }
  100.  
  101. bool updatable() {
  102.   if (chance <= chances)
  103.     return true;
  104.   return afterChances;
  105. }
  106.  
  107. void resetPass() {
  108.   cPass = "";
  109.   locked = true;
  110. }
  111.  
  112. void beep() {
  113.   if (shouldBeep == true) {
  114.     digitalWrite(buzzer, HIGH);
  115.     delay(60);
  116.     digitalWrite(buzzer, LOW);
  117.   }
  118. }
(#) tbarath válasza asrock hozzászólására (») Dec 6, 2019 /
 
Te itt updatePass néven:
- egyszer csinálsz egy bool típusú globális változót
- majd a setup()-on belül felüldefiniálnád String ojjektumként
- majd csinálsz ugyanezen a néven a bool visszatérésű értékű függvényt.

No offense, de úgy tűnik, hogy az alapokkal nem vagy tisztában. Valami C/Arduino alapozó könyvet/doksit kellene keresned...
Következő: »»   570 / 851
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