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   607 / 850
(#) sargarigo válasza berez hozzászólására (») Márc 20, 2020 / 1
 
Szerintem annyi a megoldása a problémádnak, hogy a kommentelt részben ne a duration-t figyeld, hiszen ha nem jön a záró feltétel, akkor azt ki sem számítod.
Helyette inkább így:
  1. if ((currentMillis() - startTime) > 2000)
  2. {
  3.   // leállítás, nulla érték, stb.
  4. }
(#) sargarigo válasza sargarigo hozzászólására (») Márc 20, 2020 / 1
 
Még annyit hozzátennék, hogy
  1. if (timerRunning == 0 && digitalRead(button) == LOW)

helyett érdemes
  1. if ((timerRunning == 0)    &&    (digitalRead(button) == LOW) )

így zárójelezni, nehogy véletlenül összeakadjanak a vizsgálatok!
A hozzászólás módosítva: Márc 20, 2020
(#) _BiG_ válasza berez hozzászólására (») Márc 21, 2020 /
 
Szerintem a számlálás módját kéne jól kialakítani.
Időegységenkénti impulzust kell számolni és a kerék kerületét figyelembe véve számolni a sebességet, nem a két impulzus közti időt.
Így, ha az adott időegység alatt nem jön impulzus, akkor az eredmény 0 lesz, hiszen állsz. Az időegységet kísérletezéssel érdemes megválasztani, azt figyelembe véve, hogy mekkora az a legkisebb kerékfordulatszám, aminél még nem borulsz fel
(#) berez válasza _BiG_ hozzászólására (») Márc 21, 2020 /
 
Köszönom ,hogy segíteni akarsz,az ötlet is jó,de ha veszünk egy 5 másodperces intervallumot 6 km/h -nál 5 x fordul a kerék.Hátrány emiatt ,hogy 5 mp-ként frissül az érték,ha meg pont 0,01
mp-el a számláló indulás előtt vagy után halad ela mágnes az érték nél kb 2 km/h val csalni fog.
Nézegettem a neten az ilyen célú kódokat és ellentétben az enyémmel van mindben egy sor,hogy a belső timert újraindítja miután triggerelte az adott pint.
Nálam ez van :
duration = endTime - startTime;
lehet ,hogy kéne egy ilyen sor is: (kipróbáltam ezzel,de a timer fut tovább
startTime = endTime; // itt resetel
részlet soros monitorból:
fordulatszám: 17 időtartam 225
fordulatszám: 0 időtartam 11613
fordulatszám: 16 időtartam 246
fordulatszám: 16 időtartam 249
fordulatszám: 16 időtartam 247
fordulatszám: 0 időtartam 60235 !!!!!!

A sorosmonitor szerint a belső timer nem áll meg
soha ,mert ha nem kap jelet,20 másodperc után
az eltelt időt 20000 -től számolja

próbáltam egy timerRunning = 0; sort betenni,
de nem áll meg a számláló ,miért vajon?
A hozzászólás módosítva: Márc 21, 2020
(#) pittyu2 hozzászólása Márc 21, 2020 /
 
Hali mesterek. Van egy lépcső világításom Ws2812 es LEDekkel , 10 lépcsőnél kettesével világítanak sorban és alszanak el ahogy illik. Arduino NANO V3 a vezérlő. Az a problémám , hogy nem találom azt a programot -amit régesrég bele töltöttem, és most át akarom írni a lépcső számot és a ledek számát.
Tehát hogy lehet le menteni az arduinoból a működö programot ???
(#) berez válasza pittyu2 hozzászólására (») Márc 21, 2020 / 1
 
Ahogy olvastam a "C" kódot nem lehet kiolvasni,csak a gépi kódot.
AVR Dude progival telán hexben ki lehet szedni,de ahogy olvasom igen macerás...
(#) pittyu2 válasza berez hozzászólására (») Márc 21, 2020 /
 
Köszönöm a választ, mivel amatőr vagyok nem erőltetem.
Ahogy böngészek rengeteg "neopixel stair case "leírást találok , de azt ami először volt nekem azt nem.
Jó munkát és egészséget : pittyu
(#) teglascs válasza mateatek hozzászólására (») Márc 21, 2020 /
 
Kisebb az EEPROM benne?
(#) mateatek válasza teglascs hozzászólására (») Márc 21, 2020 / 1
 
A flash program területet használja EEPROM céljára. Ez miatt nem lehetséges annyiszor írni, mint az Atmega EEPROM-ját és ezen felül 1kB EEPROM hely 2 kB flash helyet foglal el.

Szerk: De természetesen nem kötelező használni az EEPROM funkciót. Az Arduino-s könyvtárak viszont alapból a kompatibilitás miatt 2kB helyet elkülönítenek neki. de ezt átírhatod. Akár 0, akár 8kB-ra.
A hozzászólás módosítva: Márc 21, 2020
(#) teglascs válasza mateatek hozzászólására (») Márc 21, 2020 /
 
Kapisgálom. Elő szokott fordulni, hogy a flash nem elég magának a feltöltött programnak, ha jól tudom: ilyen esetekben ez probléma lehet, ahogy látom.
Köszi.
(#) mateatek válasza teglascs hozzászólására (») Márc 21, 2020 / 1
 
Ezért cserében van sok minden pluszban. Párat, ami az eszembe jut, azt leírom.
-32 MHz-es belső órajel, illetve 32MHz-es külső kvarc, vagy órajel használata.
-2 8bites, 2 16 bites timer.
-1.024 voltos, 2.048 voltos és 4.096 voltos belső referencia. Ami az én megítélésem szerint egészen jó.
-12 bites ADC, ami egészen gyors. Olyannyira, hogy egy analogRead() utasítással 2 mérés átlagát fogod kapni nagyon gyorsan.
-8 bites DAC.
6 timer kimenetre tudsz kapcsolni 85 milliamperes, nagyobb áramú meghajtót. Alapból 15 milliampert tudnak.
-Az rx-tx lábakat, és 6 timer lábat más lábakra is tudsz kapcsolni, mint ahol a szokott helye van.
-Több I/O láb.
-Shmitt-trigger jellegű a digitális bemenet.

Hirtelen ennyi, csak azokból, amiket én használok benne. Igaz, van pár tulajdonsága, ami ezek közül az Arduino keretrendszerben nem megy "csak úgy kapásból".
A hozzászólás módosítva: Márc 21, 2020
(#) teglascs válasza mateatek hozzászólására (») Márc 21, 2020 /
 
Köszönöm szépen a részletes választ!
(#) berez válasza sargarigo hozzászólására (») Márc 21, 2020 /
 
Ez majdnem jó:
  1. if ((endTime) - (startTime) > 2000)
  2. {
  3.   sevseg.setNumber(0);
  4. }
  5. sevseg.refreshDisplay();
  6.   }
  7.   }

csak: az értéket csak akkor mutatja amikor elmegy a mágnes
a hall előtt (egy rövid pillanatra) utána egyből"0"-ra áll
A hozzászólás módosítva: Márc 22, 2020
Moderátor által szerkesztve
(#) _BiG_ válasza berez hozzászólására (») Márc 21, 2020 /
 
Közben nekem is leesett, hogy akármennyire nem jó állítani a számlálási intervallumot, mert a lassú frissítés kényelmetlen.
Legyen 1 s a számlálási idő és egyből m/s-ben kaphatod meg az értéket, amit km/h-vá tudsz konvertálni.

A számlálási idő generáljon megszakítást (a timer ilyet tud) és a megszakításban csak annyit kell csinálni, hogy a megszámolt fordulatokat (ez a gyűjtő) átmenteni egy másik változóba, a gyűjtőt törölni és újraindítani (resetelni a timert).
A főprogramod meg kiszámolja a sebességet a másik, a gyűjtő értékét fogadó változó alapján és megjeleníti. Így másodpercenként frissíti a kijelzőt. Ha megállsz, akkor a gyűjtő 0 értéke fog átmásolódni, így nem kell külön nullázgatni a kírásra kerülő változót, elég csak a program elején egyszer.
(#) proba válasza berez hozzászólására (») Márc 21, 2020 /
 
A kerékre lehet több mágnest is tenni, Így már nem lesz olyan vészes a lassú menet, pontosabb lesz a mérés. Ha nekem kellene csinálnom, az érzékelők felfutó/ vagy lefutó élét nézném ( érzékelő!= az előző állapot. ) így bárhol megállhat a kerék. Egyszerűen számolnám pl a magas/alacsony állapotváltozásokat. A kerék átmérőből ki lehet számolni egy olyan időtartamot, aminél 1 (10) fordulat pont 1Km/h. Ha pontosan ennyi időnként mérsz, a kerékfordulatot egy az egyben kiírathatod, Ha ez alatt az idő alatt nem jött változás, akkor a számláló nulla lesz, így a kiírt érték is.

  1. In = port
  2. if (in != old in)
  3.   {
  4.       old in=in;
  5.       if (in ==1)                     // ez egy felfutó él volt
  6.         {
  7.             szamlalo= szamlalo + 1;
  8.          }
  9.   }
  10. if  (millis >= ido)
  11.   {
  12.      ido = ido+szamolt ertek;
  13.      szamlalo kiiratása
  14.      szamlalo=0;  
  15.   }
A hozzászólás módosítva: Márc 22, 2020
Moderátor által szerkesztve
(#) Bell válasza proba hozzászólására (») Márc 21, 2020 /
 
Csak egy gondolatkísérlet:
Ha minden egyes fordulatnál kijelezzük a legutolsóhoz tartozó sebességet, azt kis eltéréseknél is nehéz lesz leolvasni az ingadozás miatt.
De ha egy megfelelően megválasztott idő (1-2 másodperc) elteltével rekurzív átlagot képezünk a legutóbbi mérés és az ugyancsak rekurzív átlaggal képzett - időközben esetleg több - mérés eredményéből, leolvashatóbb, pontosabb lesz az eredmény menet közben.
Ha megállunk, rövid időn belül nulla lesz a kijelzett sebesség, mert az új érték attól kezdve mindig nulla lesz.
Vélemény?
(#) pipi válasza Bell hozzászólására (») Márc 22, 2020 /
 
Alacsony fordulat(frekvenciá)nál érdemesebb a periódusidőt mérni, abból számolni(reciprok).
Gyorsabban, pontosabb értéket ad. Frekimérés akkor tud "pontos" lenni ha a mérési "időnek"
sok-sokszorosa a frekvencia.
A hozzászólás módosítva: Márc 22, 2020
(#) proba válasza Bell hozzászólására (») Márc 22, 2020 /
 
Pipi véleménye is megfontolandó, 3.6 Km/h sebességnél egy másodpercre durván fél kerék fordulat jut, ha 36Km/h-t nézzük oda meg 5 fordulat. Ez még 10 másodperces mérésközzel is igencsak darabos felbontást ad. túl sok mágnest a kerékre pakolni meg nem biztos hogy szerencsés. Marad a periódusidő mérés.
(#) Bell válasza pipi hozzászólására (») Márc 22, 2020 /
 
Amit felvetettem, az csak a mért értékek rekurzív átlagolásáról szól. Függetlenül a mérés módjától.
Ez egyetlen mágnessel - periódusidő méréssel - is működik.
Szükség van a legutóbbi befejezett értékre és nagyobb sebességnél az időközben többször is frissített átlagra.
A kijelzés akár 1-2 másodpercenként történhet, a legutóbbi érvényes adat és a meglévők rekurzív átlagolásával.
Természetesen nem baj, ha közben van megkezdett mérés, majd ha befejeződik, azt használjuk a következő kijelzés értékéhez. (Persze a meglévő adatokkal képzett rekurzív átlagolás után.)
A hozzászólás módosítva: Márc 22, 2020
(#) berez hozzászólása Márc 22, 2020 /
 
Üdv fórumozók,
5.napja nem jövök rá a bajra itt az egész kód
  1. #include "SevSeg.h"
  2. SevSeg sevseg;
  3.  
  4. byte numDigits = 2;
  5. byte digitPins[] = {10, 11,};
  6. byte segmentPins[] = {13, 8, 7, 6, 5, 2, 3, 9};// A,B,C,D,.....
  7. bool resistorsOnSegments = true;
  8. bool updateWithDelaysIn = false;
  9. byte hardwareConfig = COMMON_ANODE;
  10. bool updateWithDelays = false;
  11. bool leadingZeros = true;
  12. bool disableDecPoint = true;
  13. byte button = 12;
  14. unsigned long startTime;
  15. unsigned long endTime;
  16. unsigned long duration;
  17. byte timerRunning;
  18.  
  19.     void setup() {
  20.   sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
  21.   sevseg.setBrightness(90);
  22.   pinMode (button, INPUT_PULLUP);
  23.   Serial.begin(9600);
  24.   }
  25.      void loop()
  26.  
  27.   {
  28.         if (timerRunning == 0 && digitalRead(button) == LOW) // button pressed & timer not running already
  29.         {
  30.         startTime = millis();
  31.         timerRunning = 1;
  32.         }
  33.   {
  34.         if (timerRunning == 1 && digitalRead(button) == HIGH) // timer running, button released
  35.         {
  36.          endTime = millis();
  37.          timerRunning = 0;
  38.  
  39.       duration = endTime - startTime;
  40.       int speed = (4000 / duration);
  41.       Serial.print ("sebesség: "); Serial.print(speed); Serial.print (" időtartam   "); Serial.println (duration);
  42.       sevseg.setNumber(speed );
  43.       }
  44.       sevseg.refreshDisplay();
  45.       }
  46.     }


Amit nem értek ha a loop állandóan ismétlődik az elején szépen kiírja a nullát,
ezután megmérem a sebességet szépen kiirja hogy 15 pl.
ha nem kap inputot kb 2 másodpercig ,és éppen megint az elején jár a duration(millis)
2000 (2 mp)fölé megy,miért nem áll vissza "0"-ra? Folyamatosan az utolsó mért értéket
mutatja.(az se lenne baj ha teljesen lekapcsolna.Próbáltam a 2 digit pinjét lehúzni
testre (LOW),de akkor meg a 0 belevillogott.Lassan feladom...
A hozzászólás módosítva: Márc 23, 2020
Moderátor által szerkesztve
(#) sargarigo válasza berez hozzászólására (») Márc 22, 2020 / 1
 
Ahogy én látom az a baj, hogy a setNumber() eljárást csak akkor hívod meg, amikor a mérés befejeződött, vagyis amikor az állapotgéped 1-be van állítva (timerrunning == 1) feltétel. Amikor ez visszaállította a timerrunning értékét nullába, és ettől a pillanattól már nem jön több impulzus, akkor nincs ami frissítse a kijelződ.
Szerintem el kellene indulnod a megszakítások irányába, és vagy a mérést, vagy a kijelzést megszakításból végezni. Gondolom meg lehet oldani anélkül is, de miközben mesét duruzsolnak a fülembe, ezt most nem tudom átgondolni

Szerk.: Esetleg próbáld meg a refreshDisplay() elé beszúrni ezt:
  1. if (millis() - startTime > 2000)
  2.   sevseg.setNumber(0);

Ez a duration vagyis a mérésed eredményétől függetlenül nullázza a kijelzőt ha túl nagy az idő. Elvileg.
A hozzászólás módosítva: Márc 22, 2020
(#) berez válasza sargarigo hozzászólására (») Márc 22, 2020 / 1
 
Nagyon köszönöm,király vagy!
Tökéletes,egyedül Te tudtad megoldani.
Végre elkezdem összerakni próbapanel helyett
Szép estét!
(#) nemgyuri hozzászólása Márc 23, 2020 /
 
Sziasztok, segítséget kérnék Tőletek!
Arduino programozási segédletet honnan lehet letölteni? Gondolok itt elsősorban stringkezelésre és egyéb adatkezelési finomságokra. Pl. a következő kódrészlet működik, de nem tudom, hogy a (F("\"")) mit jelent.
  1. BluetoothSerial.print(F("t1.txt=\"")); //Nextionnak
  2.         BluetoothSerial.print(InputNString);
  3.         BluetoothSerial.print(F("\""));
  4.         BluetoothSerial.write(0xff);
  5.         BluetoothSerial.write(0xff);
  6.         BluetoothSerial.write(0xff);

A vett adatokat is értelmeznem kell, ezért szeretnék valami leírást (lehetőleg magyarul) ami a programnyelv mélységeibe ad betekintést.
(#) Bakman válasza nemgyuri hozzászólására (») Márc 23, 2020 /
 
Ha szöveget akarsz küldeni, akkor az elküdendő karaktereket idézőjelek közé kell rakni, pl.:
  1. BluetoothSerial.print(F("Hello World!"));
  2. Eredmény:
  3. Hello World!
Ha a szöveg tartalmaz idézőjelet, akkor azt külön jelezni kell a fordítónak, különben úgy fogja értelmezni a második idézőjelet a sorban, hogy a szöveg addig tart és ami után jön, az már a parancssor része. Ezt a jelzést a legtöbb programozási környezetben a fordított per jellel (Backslash) lehet megtenni.
  1. BluetoothSerial.print(F("Hello \"World\"!"));
  2. Eredmény:
  3. Hello "World"!
A hozzászólás módosítva: Márc 23, 2020
(#) zsoltee0001 hozzászólása Márc 23, 2020 /
 
Sziasztok

Megint próbálkozok a Thingpeak-al:
Bővebben: Link
Nagyon jó volna, ha működne.
Miután feltelepítettem a Thingspeak.h-t a példák menübe elhelyezett néhány páldaprogram közül kiválasztottam, de nem fordul NodeMcu-ra.
ezzel a hibával:
Idézet:
„Arduino: 1.8.8 (Windows 7), Alaplap:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:2MB OTA:~1019KB), 2, v2 Lower Memory, Disabled, None, Only Sketch, 921600"

c:/users/zsoltee/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: sketch\WriteSingleField.ino.cpp.o: in function `ThingSpeakClass::writeRaw(unsigned long, String, char const*)':

C:\Users\zsoltee\Documents\Arduino\libraries\ThingSpeak/ThingSpeak.h:928: undefined reference to `ThingSpeak'

collect2.exe: error: ld returned 1 exit status

Többszörös könyvtárak találhatók ehhez: "ThingSpeak.h"
Használt: C:\Users\zsoltee\Documents\Arduino\libraries\ThingSpeak
Nem használt: C:\Users\zsoltee\Documents\Arduino\libraries\arduino_844550
exit status 1
Hiba a(z) NodeMCU 1.0 (ESP-12E Module) alaplapra fordításra.

Ennek a jelentésnek több információja lehetne
a "Bővebb kimenet mutatása fordításkor"
opció engedélyezésével a Fájl -> Beállítások-ban.


Ha kitörlöm a 844550 könyvtárat akkor összeomlás van.
Szerintetek mi a megoldás?
(#) Cooter hozzászólása Márc 23, 2020 /
 
Sziasztok! Kezdő vagyok kísérletezek neten található kódokkal. Legtöbben uno-t használnak úgy veszem észre, én nano-t használok. Az ilyen uno-s kódoknál az IDE kiír nekem olyan hibát, hogy "hiba az arduino nano alaplapra fordításra". Mi ennek az oka? Hogy tudom ezeket feltölteni nano-ra?
(#) zsoltee0001 válasza Cooter hozzászólására (») Márc 23, 2020 /
 
Föl kell húzni az egérrel, hogy látszódjon a többi rész.
Közbe az enyém is megoldódott, nem kellett volna manuálisan bemásolni egy thingspeak könyvtárat.
(#) Massawa válasza Cooter hozzászólására (») Márc 23, 2020 /
 
Meg a toolsnál is ki kell választani a NANO-t.
(#) Cooter válasza zsoltee0001 hozzászólására (») Márc 23, 2020 /
 
Megoldódott, köszi a segítséget! 2 db könyvtárt hiányolt!
(#) zoz11 hozzászólása Márc 23, 2020 /
 
Üdv
Van egy összeollózott kódom, 10K NTC-t használok hőmérésre. Nem jövök rá, hogy mit kellene módosítanom ahhoz hogy ne mutasson tizedes értéket. Esetleg ebbe tudna nekem valaki segíteni?
  1. #include <math.h>
  2.  
  3. double Thermister(int RawADC) {
  4. double Temp;
  5. Temp = log(((10240000/RawADC) - 10000));
  6. // 10K Ohm hoellenallas.
  7. //Ahogy számolunk: Ellenállás =
  8. //  (1024 * BalanceResistor/ADC) - BalanceResistor
  9.  Temp = 1 / (0.001129148 + (0.000234125 * Temp) +
  10.  
  11.         + (0.0000000876741 * Temp * Temp * Temp));
  12.  
  13. Temp = Temp - 273.15;
  14.  
  15. // Convert Kelvin to Celcius
  16.  
  17.  return Temp;
  18. }
  19. void setup() {
  20. Serial.begin(9600);
  21. }
  22. void loop() {
  23.  // Kiirjuk a homerseklete
  24. Serial.println(double(Thermister(analogRead(1))));
  25. delay(500);
  26.  //Fel masodpercet varunk
  27.  
  28. }
Következő: »»   607 / 850
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