- Samsung Galaxy A34 - plus size modell
- iPhone topik
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Fotók, videók mobillal
- Samsung Galaxy S25 - végre van kicsi!
- Samsung Galaxy A54 - türelemjáték
- Középkategóriást mutatott be újra az Oppo
- Huawei Watch GT 5 Pro - egészség + stílus
- Hónap végén érkezik a Xiaomi Band 10, ára is van
- Samsung Galaxy S21 FE 5G - utóirat
-
Mobilarena
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
Tomika86
senior tag
-
Tomika86
senior tag
Igen, tettem.
Most elöször használok esp32-t, de van pár furcsaság számomra.
- Amikor feltöltöm a programot akkor írja hogy connecting, van hogy meg kell nyomni a boot gombot, de legtöbbször nem kellett, ment magától.
- Amit lejebb írtam a hibát se mindig csinálta, volt hogy ugyanazt feltöltöttem és nem rebootolt.
- Nextion kijelzőn vannak mutatós műszerek, ezeknek van bekapcsoláskor egy felfut-lefut programrész a setupban. Ezt meg is csinálja, ahányszor nyomok resetet. De tovább nem megy. Ha a setupba írok egySerial.println("akarmi");
Ezt se írja ki soros monitorra.
Serial.begin(115200);
Serial2.begin(115200);
Megvannak
- megpróbáltam programrészeket kikommentezni, akkor se jó
- sima egyszerű sketch megy rajta. I2c scanner kiírja az ads7828 0x48 címét.
- ha lesz időm kipróbálom csak az i2c adc részt rátölteniBacktrace olyan sorokra mutat ami miatt szerintem nem kellene megállnia. pl. : serial2.begin(115200); és olvasas[tomb] = rpm; erre írja a cpu megállást.
Arduinon ment a program teljesen, egyedül az i2c az új.Esp32nél cpu sebességet kell megadni setupban?
En lábat nem kötöttem sehova, ez nem lehet gond?
Köszönöm a segítséget!
-
Tomika86
senior tag
Ezt írja soros monitoron:
ets Jun 8 2016 00:22:57
rst:0xc (SW_CPU_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1044
load:0x40078000,len:10124
load:0x40080400,len:5856
entry 0x400806a8
Guru Meditation Error: Core 1 panic'ed (IntegerDivideByZero). Exception was unhandled.
Core 1 register dump:
PC : 0x400d1fd4 PS : 0x00060330 A0 : 0x800d5638 A1 : 0x3ffb1cd0
A2 : 0x00000000 A3 : 0x3ffc09fc A4 : 0x3ffbfeec A5 : 0x00000000
A6 : 0x3ffc01c0 A7 : 0x3ffc0238 A8 : 0xd1b71759 A9 : 0x3ffc01bc
A10 : 0x3ffc0224 A11 : 0x000497c8 A12 : 0x000056ea A13 : 0x00000000
A14 : 0x00000000 A15 : 0x00000000 SAR : 0x00000013 EXCCAUSE: 0x00000006
EXCVADDR: 0x00000000 LBEG : 0x400014fd LEND : 0x4000150d LCOUNT : 0xfffffffe
ELF file SHA256: 0000000000000000
Backtrace: 0x400d1fd4:0x3ffb1cd0 0x400d5635:0x3ffb1fb0 0x40086a39:0x3ffb1fd0
Rebooting... -
-
Tomika86
senior tag
Sziasztok
Esp32 nodemcu 3,3vot stab icvel állítom elő a panelemen, szabad így a számítógépet is rádugni usb kábellel? (prog feltöltés)
Köszönöm
-
Tomika86
senior tag
válasz
tonermagus #15886 üzenetére
Vagy 3 analóggal méred és akkor tudod ha valamelyik cella rossz?
Védő diódának raknék azért 5, 1v zener diódát. -
Tomika86
senior tag
-
Tomika86
senior tag
Sziasztok
Esp32 esetén is a láb számával adom meg hogy mi hova van bekötve?
int kapcsolo1 = 4; pl?
DS18B20 esetén most arduino esetén csak a lábszám van megadva, ez jó lesz nekem?
I2C esetén kell megadni valamit?
Illetve Tx1, Rx1 a Serial1 itt kell lábszámot megadni, vagy az alapértelmezett jó?
Tx2, Rx2 lábszámai hogy adhatóak meg? Vagy nem kell? Csak Serial2?Köszönöm
-
Tomika86
senior tag
Sziasztok!
Most hogy is van ez, hogy a változókat, hogyan jelölöm.
Melyiknek mi az előnye, hátránya.byte valtozo int8_t valtozo
int valtozo int16_t valtozounsigned long az uint32_t vagy 64?
float, string, char az marad ugyanezKöszönöm!
-
Tomika86
senior tag
-
Tomika86
senior tag
GPIO12 és 0: FET kapcsol 12V-os Relét
GPIO14 és 15: Egyik 10kohm-al földre van húzva és nyomógomb van a 3,3 és bemenet között.
Másikon az LM1815 IC kimenete van sorosan 1kohm-al.
SD kártya többi lába olyan GPIO lábon van ami nem ad semmit boot esetén
GPIO 2: 470ohm előtéttel földre van kötve a LEDJó lenne ha még 5db GPIO lenne a panelon
-
Tomika86
senior tag
Sziasztok!
Ez a táblázat alapján, vannak lábak amik csak ki vagy bemenetként használhatók:
[link]Pl:
GPIO12 és 0 én kimenetként használom, FET-et kapcsolok vele
GPIO 14 és 15 bemenetként használom
GPIO 5 SD kártya SPI Chip Select láb
GPIO 2 bemenetként van használva, felhúzó ellenállássalAhogy nézem ezek a kétes lábak.
Köszönöm!
-
Tomika86
senior tag
Tanácstalan vagyok, hogy csináljam a tápellátását.
Kapcsolóüzeműt kizártam egyenlőre, vagyis biztosat nem találtam, pedig jobb lenne hatásfokot tekintve.
Ezek lesznek a kocsi 12v-ján:
Nextion 7" kijelző 5V, 430mA
Analóg 5V szenzorok ~ 50mA
ESP32 WROOM 32 3,3V, ~800mA
2db DS18B20 3,3V-on ~ 3mA
2db LM1815 áramkör, induktív szenzorral 3,3V-on ~ 15mAJelenleg 12von, biztosíték,sorban vele dióda, utána supressor dióda a föld közé 15Vos. Aztán sorban tekercs és 1000uF elektrolit kondenzátor.
Aztán 7805 a Nextion kijelzőnek
7805 az analóg szenzorokhoz és ebből az 5V-ból a 3,3V LM1117 stab ic-vel.
A gondom az hogy fűteni fog szerintem minden. Illetve az 5v-3,3v is necces.Köszönöm az eddigi segítségeket is!
-
Tomika86
senior tag
Köszönöm
A helyén a max 15Vból lenne 2db 7805 stab IC.
Egyik a Nextion kijelző.
Másik az arduino volt. De most esp32-re alakítottam át.
Ebből csinálnék TMS1117 stab icvel 3,3Vot.Lenne az SD kártya a 3,3V-on.
3db FET kimenet.
2db LM1815 ICs induktív érzékelős áramkör.
Illetve az ESP32
Nextion ha jól tudom tud 3,3Vos adatbusszal kommunikálni. -
Tomika86
senior tag
válasz
Tankblock #15680 üzenetére
Szia!
Az igazából nem fontos, ha ezeket megtudom oldani az elég:
const byte PulsesPerRevolution = 2;
const unsigned long ZeroTimeout = 100000;Itt csak ez miatt vagyok gondban, hogy itt is szerepel, vagy ez nem gond?
volatile unsigned long PeriodBetweenPulses = ZeroTimeout+1000;
Köszönöm a segítségeket!
-
Tomika86
senior tag
válasz
vargalex #15675 üzenetére
const byte PulsesPerRevolution = 2;
const unsigned long ZeroTimeout = 100000; // For high response time, a good value would be 100000.
// For reading very low RPM, a good value would be 300000.
// Calibration for smoothing RPM:
const byte numReadings = 2; // Number of samples for smoothing. The higher, the more smoothing, but it's going to
// react slower to changes. 1 = no smoothing. Default: 2.
/////////////
// Variables:
/////////////
volatile unsigned long LastTimeWeMeasured; // Stores the last time we measured a pulse so we can calculate the period.
volatile unsigned long PeriodBetweenPulses = ZeroTimeout+1000; // Stores the period between pulses in microseconds.
// It has a big number so it doesn't start with 0 which would be interpreted as a high frequency.
volatile unsigned long PeriodAverage = ZeroTimeout+1000; // Stores the period between pulses in microseconds in total, if we are taking multiple pulses.
// It has a big number so it doesn't start with 0 which would be interpreted as a high frequency.
unsigned long FrequencyRaw; // Calculated frequency, based on the period. This has a lot of extra decimals without the decimal point.
unsigned long FrequencyReal; // Frequency without decimals.
unsigned long RPM; // Raw RPM without any processing.
unsigned int PulseCounter = 1; // Counts the amount of pulse readings we took so we can average multiple pulses before calculating the period.
unsigned long PeriodSum; // Stores the summation of all the periods to do the average.
unsigned long LastTimeCycleMeasure = LastTimeWeMeasured;
unsigned long CurrentMicros = micros();
unsigned int AmountOfReadings = 1;
unsigned int ZeroDebouncingExtra; // Stores the extra value added to the ZeroTimeout to debounce it.
// The ZeroTimeout needs debouncing so when the value is close to the threshold it
// doesn't jump from 0 to the value. This extra value changes the threshold a little
// when we show a 0.
// Variables for smoothing tachometer:
unsigned long readings[numReadings]; // The input.
unsigned long readIndex; // The index of the current reading.
unsigned long total; // The running total.
unsigned long average; // The RPM value after applying the smoothing.Annyit szeretnék, hogy ami itt 3db const van, azokat az értékeket, kijelzőn keresztül szeretném módosítani. De nem működik.
Persze a const elhagyva, és itt van a Zerotimeoutnál a +1000 -
Tomika86
senior tag
Sziasztok!
Lenne 3 kérdésem általánosan C nyelvről.
1. Ha változók vannak deklarálva és a masodikhoz az elsőnek is köze van akkor ezt hogy tudom megcsinálni, hogy programon belül értéket adjak?
Const int elso_val = 10;
Const int masodik_val = elso_val + 1000;Az elso_val érteket viszont módosítani akarom loop ciklusban. Konstans nélkül.
2. Van byte típusú változó, ebbe ha simán belerakok egy int értéket az működik?
Vagy pedig így?
Byte valtozo_2
valzozo_2 = (byte) valtozo_33. Globális változó deklarálas vagy programon belüli a jobb? Ha csak akkor van használva, akkor felesleges globálisan deklarálni?
Észrevehető a különbség?Köszönöm
-
Tomika86
senior tag
válasz
Janos250 #15634 üzenetére
Köszi a leírast. A 32lábas Vroom verziót néztem.
Uarton a Nextion kijelző lenne, melyik lábon legyen ha ne a TX0, RX0? Vagy mindegy?
Spi-n csak 1db sd kártya lenne.
I2C-n egyenlőre 1, de az címmel bővíthető, felhúzóellenállás itt is kell gondolom sda, scl vonalra.
2db megszakítás kell, de az is bárhova programozható ha jól tudom.
4db analóg bemenet, de akkor ez I2C lesz Ads1115
4db sima digit bemenet, optocsatolóval leválasztva.
4db sima digit kimenet, amiről beszéltetek FET, azzal kapcsolnám a külső 12Vot.Valamelyik tud CAN buszt is, az is jó lenne. De melyik az a verzió?
Köszönöm
-
Tomika86
senior tag
Igen a 3,3V-ot értem a jelszinteken.
A digitális kimeneteket FET-el kapcsolom, a digitális bemeneteket optoval leválasztom. Ezek együtt a 10b-ot nem érik el.
Analóg bemenetet akkor az ADS1155 megoldja. Nextion kijelző soros portja tud 3,3V jelszintet is.
SD kártyát szeretnék rátenni, meg giroszkópot(vagy gyorsulásmérőt) majd. -
Tomika86
senior tag
-
-
Tomika86
senior tag
Sziasztok!
Csak egy kérdés,
Amit mega2560ra megírtam, az működik ESP32-vel is?
Arra gondoltam, lehet inkább azzal mennék tovább, ami plussz kell, hogy 3,3Vról megy mindene.
ADC esetén a 0-5v ellenállásosztóval megoldható 3,3vra?Köszönöm
-
Tomika86
senior tag
-
Tomika86
senior tag
Erre gondolok hogy az Unoból ered a 0ra ugrás.
De a bonyolultabb program nem mozog, csak 0ra ugrik letekerésnél. A letekerést úgy érsd hogy 6000es fordulatról hirtelen 4000re,akkor leesik 0ra egy pillanatra.A másik viszont ugrál kettő érték között.
Adcre tettem aluláteresztő szűrőt, de gondolom nem elég.
-
Tomika86
senior tag
Kipróbáltam több értékkel a tömb elemeit, most már csak annyi van, ha hirtelen tekerem le a potmétert akkor leesik egy pillanatra a mutató, akár 0-ra is.
De szerintem ez az uno baja, amivel a négyszögjelet állítom be, a frekvenciát pedig analóg úton változtatom.
Ez viszont ugrál két pont között, pl 1500-1800 két értéken. [link] -
Tomika86
senior tag
// Fordulatszám méréshez
const int hallPin = 2; // pin 2 = int 0
volatile unsigned long cntTime = 0;
volatile unsigned long cnt = 0;
volatile unsigned long rpm = 0;
unsigned long readings[numReadings];
unsigned long readIndex;
unsigned long total;
unsigned long average;
const byte numReadings = 2;
unsigned long measureTime = 0, curTime, startTime = 0;
int dispCnt = 0, measureCnt = 0;
const int resetTime = 2000;
const int minRotNum = 1; // 1 - calc after every rotation
void loop()
{
curTime = millis();
if ( curTime - cntTime > resetTime) // reset when less than 30RPM (dt>2s)
{
cnt = measureCnt = 0;
rpm = 0;
}
if (cnt == 1) startTime = cntTime;
if (cnt - measureCnt >= minRotNum) {
rpm = 60000L * (cnt - measureCnt) / (cntTime - measureTime);
measureCnt = cnt;
measureTime = cntTime;
}
// Smoothing RPM:
total = total - readings[readIndex];
readings[readIndex] = rpm;
total = total + readings[readIndex];
readIndex = readIndex + 1;
if (readIndex >= numReadings)
{
readIndex = 0;
}
average = total / numReadings;
}
void doCount()
{
cnt++;
cntTime = millis();
} -
Tomika86
senior tag
Ehhez [link]pedig ezt a részét használtam fel:
// Smoothing RPM:
total = total - readings[readIndex]; // Advance to the next position in the array.
readings[readIndex] = RPM; // Takes the value that we are going to smooth.
total = total + readings[readIndex]; // Add the reading to the total.
readIndex = readIndex + 1; // Advance to the next position in the array.
if (readIndex >= numReadings) // If we're at the end of the array:
{
readIndex = 0; // Reset array index.
}
average = total / numReadings; // The average value it's the smoothed result.RPM a bemeneti nyers fordulat. average a kimeneti megjelenített, de ugrál a mutató
Egyébként pontos, Frekvencia * 60 jelenik meg mindkettő esetében -
Tomika86
senior tag
Ez a bonyolultabb mérés, ez a hirtelen változásokra van hogy lemegy 0-ra is, meg összevissza ugrál ilyenkor:
const byte PulsesPerRevolution = 2;
const unsigned long ZeroTimeout = 100000; // For high response time, a good value would be 100000.
// For reading very low RPM, a good value would be 300000.
// Calibration for smoothing RPM:
const byte numReadings = 2; // Number of samples for smoothing. The higher, the more smoothing, but it's going to
// react slower to changes. 1 = no smoothing. Default: 2.
/////////////
// Variables:
/////////////
volatile unsigned long LastTimeWeMeasured; // Stores the last time we measured a pulse so we can calculate the period.
volatile unsigned long PeriodBetweenPulses = ZeroTimeout+1000; // Stores the period between pulses in microseconds.
// It has a big number so it doesn't start with 0 which would be interpreted as a high frequency.
volatile unsigned long PeriodAverage = ZeroTimeout+1000; // Stores the period between pulses in microseconds in total, if we are taking multiple pulses.
// It has a big number so it doesn't start with 0 which would be interpreted as a high frequency.
unsigned long FrequencyRaw; // Calculated frequency, based on the period. This has a lot of extra decimals without the decimal point.
unsigned long FrequencyReal; // Frequency without decimals.
unsigned long RPM; // Raw RPM without any processing.
unsigned int PulseCounter = 1; // Counts the amount of pulse readings we took so we can average multiple pulses before calculating the period.
unsigned long PeriodSum; // Stores the summation of all the periods to do the average.
unsigned long LastTimeCycleMeasure = LastTimeWeMeasured;
unsigned long CurrentMicros = micros();
unsigned int AmountOfReadings = 1;
unsigned int ZeroDebouncingExtra; // Stores the extra value added to the ZeroTimeout to debounce it.
// The ZeroTimeout needs debouncing so when the value is close to the threshold it
// doesn't jump from 0 to the value. This extra value changes the threshold a little
// when we show a 0.
// Variables for smoothing tachometer:
unsigned long readings[numReadings]; // The input.
unsigned long readIndex; // The index of the current reading.
unsigned long total; // The running total.
unsigned long average; // The RPM value after applying the smoothing.
void setup() // Start of setup:
{
Serial.begin(9600); // Begin serial communication.
attachInterrupt(digitalPinToInterrupt(2), Pulse_Event, RISING); // Enable interruption pin 2 when going from LOW to HIGH.
delay(1000); // We sometimes take several readings of the period to average. Since we don't have any readings
// stored we need a high enough value in micros() so if divided is not going to give negative values.
// The delay allows the micros() to be high enough for the first few cycles.
} // End of setup.
void loop() // Start of loop:
{
LastTimeCycleMeasure = LastTimeWeMeasured; // Store the LastTimeWeMeasured in a variable.
CurrentMicros = micros();
if(CurrentMicros < LastTimeCycleMeasure)
{
LastTimeCycleMeasure = CurrentMicros;
}
// Calculate the frequency:
FrequencyRaw = 10000000000 / PeriodAverage; // Calculate the frequency using the period between pulses.
// Detect if pulses stopped or frequency is too low, so we can show 0 Frequency:
if(PeriodBetweenPulses > ZeroTimeout - ZeroDebouncingExtra || CurrentMicros - LastTimeCycleMeasure > ZeroTimeout - ZeroDebouncingExtra)
{ // If the pulses are too far apart that we reached the timeout for zero:
FrequencyRaw = 0; // Set frequency as 0.
ZeroDebouncingExtra = 2000; // Change the threshold a little so it doesn't bounce.
}
else
{
ZeroDebouncingExtra = 0; // Reset the threshold to the normal value so it doesn't bounce.
}
FrequencyReal = FrequencyRaw / 10000; // Get frequency without decimals. This is not used to calculate RPM but we remove the decimals just in case you want to print it.
// Calculate the RPM:
RPM = FrequencyRaw / PulsesPerRevolution * 60; // Frequency divided by amount of pulses per revolution multiply by 60 seconds to get minutes.
RPM = RPM / 10000; // Remove the decimals.
// Smoothing RPM:
total = total - readings[readIndex]; // Advance to the next position in the array.
readings[readIndex] = RPM; // Takes the value that we are going to smooth.
total = total + readings[readIndex]; // Add the reading to the total.
readIndex = readIndex + 1; // Advance to the next position in the array.
if (readIndex >= numReadings) // If we're at the end of the array:
{
readIndex = 0; // Reset array index.
}
average = total / numReadings; // The average value it's the smoothed result.
Serial.print("\nRPM: ");
Serial.print(RPM);
Serial.print("\tTachometer: ");
Serial.println(average);
}
void Pulse_Event() // The interrupt runs this to calculate the period between pulses:
{
PeriodBetweenPulses = micros() - LastTimeWeMeasured; // Current "micros" minus the old "micros" when the last pulse happens.
// This will result with the period (microseconds) between both pulses.
// The way is made, the overflow of the "micros" is not going to cause any issue.
LastTimeWeMeasured = micros(); // Stores the current micros so the next time we have a pulse we would have something to compare with.
if(PulseCounter >= AmountOfReadings) // If counter for amount of readings reach the set limit:
{
PeriodAverage = PeriodSum / AmountOfReadings; // Calculate the final period dividing the sum of all readings by the
// amount of readings to get the average.
PulseCounter = 1; // Reset the counter to start over. The reset value is 1 because its the minimum setting allowed (1 reading).
PeriodSum = PeriodBetweenPulses;
// Remap period to the amount of readings:
int RemapedAmountOfReadings = map(PeriodBetweenPulses, 40000, 5000, 1, 10); // Remap the period range to the reading range.
// 1st value is what are we going to remap. In this case is the PeriodBetweenPulses.
// 2nd value is the period value when we are going to have only 1 reading. The higher it is, the lower RPM has to be to reach 1 reading.
// 3rd value is the period value when we are going to have 10 readings. The higher it is, the lower RPM has to be to reach 10 readings.
// 4th and 5th values are the amount of readings range.
RemapedAmountOfReadings = constrain(RemapedAmountOfReadings, 1, 10); // Constrain the value so it doesn't go below or above the limits.
AmountOfReadings = RemapedAmountOfReadings; // Set amount of readings as the remaped value.
}
else
{
PulseCounter++; // Increase the counter for amount of readings by 1.
PeriodSum = PeriodSum + PeriodBetweenPulses; // Add the periods so later we can average.
}
} -
Tomika86
senior tag
Sziasztok!
Fordulatszám méréshez egy Unora csináltam négyszögjelgenerátort. Analóg potival a frekvencia állítható, ami működik is.
Mennyire lehet valósidejű a poti tekerésére ez? Szkóp hiányában nem tudom megnézni.#include <PWM.h>
const int kimenet_pin = 9;
const int POT_pin = A2;
int32_t frekvencia; // frekvencia értéke
void setup()
{
pinMode(POT_pin, INPUT);
pinMode(kimenet_pin, OUTPUT);
InitTimersSafe();
}
void loop()
{
int temp_frekvencia = analogRead(POT_pin); // Analóg bemenet olvasása
frekvencia = map(temp_frekvencia, 0, 1024, 1, 100);
frekvencia = constrain(frekvencia, 1, 100);
pwmWriteHR(kimenet_pin, 32768); // Kitöltési tényező 50% -> for 16-bit 65536/2 = 32768
SetPinFrequencySafe(kimenet_pin, frekvencia);
delay(500);
}Ezzel le tudtam tesztelni a fordulatszámlálós programkódot a Mega panelen, de simítással és átlagolással is ugrál a mutató, illetve van hogy beugrik 0-ra is, ha tekerem az uno potiját.
-
Tomika86
senior tag
Köszönöm mindenkinek.
Amint mechanikusan is tudok valami forgó másnest keríteni kipróbálom.
Holnap jelgenerátorral kitudom. -
Tomika86
senior tag
Kibogaráztam egy példaprogramot, ez impulzusokat számol:
const int hallPin = 2; // pin 2 = int 0
volatile unsigned long cntTime = 0;
volatile unsigned long cnt = 0;
void doCount()
{
cnt++;
cntTime = millis();
}
void setup()
{
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(hallPin), doCount, FALLING); // hall pin on interrupt 0 = pin 2
cntTime = millis();
}
volatile unsigned long rpm = 0;
unsigned long measureTime = 0, curTime, startTime = 0;
int dispCnt = 0, measureCnt = 0;
const int resetTime = 2000;
const int minRotNum = 1; // 1 - calc after every rotation
void loop()
{
curTime = millis();
if ( curTime - cntTime > resetTime) // reset when less than 30RPM (dt>2s)
{
cnt = measureCnt = 0;
rpm = 0;
}
if (cnt == 1) startTime = cntTime;
if (cnt - measureCnt >= minRotNum) {
rpm = 60000L * (cnt - measureCnt) / (cntTime - measureTime);
measureCnt = cnt;
measureTime = cntTime;
}
}60000L itt mi az L?
-
Tomika86
senior tag
Ez így jó lehet nyers fordulatszámra?
volatile byte fordulat;
float impulzushossz_ms, rpm, holtido;
unsigned long elozoido;
void setup()
{
Serial.begin(9600);
attachInterrupt(0, impulzus, RISING); // Felfutóél detektálásra függvény meghívása
fordulat = rpm = elozoido = 0; // Minden változó inicializálása 0 értékre
}
void loop()
{
if (millis() - holtido > 2000) // Nincs impulzus 2000ms-ig
{
rpm = 0; // Fordulat nullázása
holtidő = millis();
}
Serial.println(rpm);
}
void impulzus() // Impulzus érzékelésre meghívás
{
fordulat++;
holtido = millis();
if (fordulat >= 2)
{
impulzushossz_ms = millis() - elozoido; // Idő 2 fordulathoz
rpm = 60000 / impulzushossz_ms; // Fordulat / perc
elozoido = millis();
}
} -
-
Tomika86
senior tag
Milyen hátrányokkal járna ha frekvencia - Feszültség konverterrel oldanám meg a fordulatszám és sebesség kijelzést?
[link] LM2917 IC-t néztem. Ehhez lehet változó reluktancia érzékelőt kötni, ami pont a főtengely jeladó és van is belőle pár darabom.A másik az LM1815 vagy MAX9924 IC lenne, ez is ilyen szenzorhoz van csak négyszög jelet ad a kimenetén.
-
Tomika86
senior tag
válasz
Janos250 #15526 üzenetére
Jól értem ha ez van
If (szam==1)
{ osszead;
}
Else if(szam==2)
{
kivonas;
}
Else if(szam==3)
{
szoroz;
}Jól értem, hogy ez ugyanaz mint a switch case break-el? Ha a szám nem egy akkor nézi azt hogy 2-e. Ha 2 akkor nem nézi meg hogy 3 e? Hanem kihagyja az utána lévő else if-eket?
-
Tomika86
senior tag
Van különbség ha több feltételt vizsgázok és mindegyiknél if() van használva, vagy ha csak az első if() a többi else if() ?
(Nem az if(igaz) else ha nem az első akkor ez)
-
Tomika86
senior tag
Furcsa dolog hogy 4 helyre betettem a következő logikát:
txt mezőbe írom a számot (pl 12),ezt a stringet kiolvasom, toInt függvénnyel integert csinálok belőle akkor amikor megnyomom a Ment nyomógombot.
Itt az int változót egy float változóba másolom.dostrf függvénnyel iratom vissza a kijelzőre, itt a hosszra megadok 4et, pontosságra 0át.
4 helyből 2 helyen működik. 2 helyen ha beírom az 1et akkor Mentés után 0 jön vissza.
Pedig ugyanúgy írtam mind a 4et.
-
Tomika86
senior tag
String kiiras = String (Integer_ertek);
Ez ugyanazt csinálja? csak itt string.h kell
-
Tomika86
senior tag
Létezik olyan függvény ami ugyanazt csinálja mint a dtostrf()
Csak integerből csinál stringet, nem pedig float-ból?
-
Tomika86
senior tag
Alakul
[link]
Szoftveres kalibráláshoz elég egy szorzó és egy ofset?
Vagy a skálázást kell módosítani? -
Tomika86
senior tag
Most egyenlőre mással küzdök, nem jövök rá miért nem működik ez:
// Soros portról olvasás képernyőszámhoz
if (Serial.available())
{
String indata = Serial.readStringUntil('#');
// Ha "page0" string érkezik
if (indata.indexOf("page0") > -1) {
kepernyo_szam = 0;
}
// Ha "page1" string érkezik
else if(indata.indexOf("page1") > -1) {
kepernyo_szam = 1;
}
// Ha "reset" string érkezik
// Üzemóra törlése
else if (indata.indexOf("reset") > -1)
{
Uzemora_perc = 0;
Uzemora_ora = 0;
EEPROM_writeLong(EEPROM_cim_ora, Uzemora_ora);
EEPROM_writeInt(EEPROM_cim_perc, Uzemora_perc);
}
// Soros portról olvasás értékek beállításához
// Ha "feszmin" string érkezik
else if (indata.indexOf("feszmin") > -1)
{
byte position1 = indata.indexOf("feszmin");
feszmin = indata.substring(0, position1);
alacsony_akkufesz_ertek = feszmin.toFloat();
EEPROM_writeFloat(EEPROM_cim_akkufeszmin, alacsony_akkufesz_ertek);
}
}
if (kepernyo_szam == 0)
{
// Fordulatszám kijelzés
Serial.print(fordulatszam);
}
if (kepernyo_szam == 1)
{
// Üzemóra óra kiírása
Serial.print(Uzemora_perc);
// Üzemóra perc kiírása
Serial.print(Uzemora_ora);
}
}
Igazából simulátorban működik, de a kijelzőn nem.
Nextion editorban, ha átváltok a page1 képernyőre akkor print "page1#" parancsot küld, page0 esetén print "page0#"
de a kepernyo_szam valtozo 0 értéken marad.
Az üzemóra nullázás se működik.
Most itt kiszedtem a felesleget, de az elvet rontom el gondolom.Ha kiszedem a képernyő szám feltételt akkor működik, de feleslegesen nem akarok adatot küldeni a kijelzőre, csak azokat ami azon a képernyőn van.
Köszönöm a segítséget!
-
Tomika86
senior tag
Sziasztok
Nextion kijelzőn, ha egy értéket írok be akkor előjön a képernyő billentyűzet, fel lehet használni valahogyan a bevitel végén lévő Ok gombot?Köszönöm
-
Tomika86
senior tag
Sziasztok!
Megjött a Nextion kijelzőm.
Rátöltöttem a projectet, el is indul a kijelzőn, de nincs kommunikáció az arduino(mega 2560) és kijelző között.
A GND-et közösítettem. LCD RX lába Arduino TX lába, LCD TX lába Arduino RX lába.
5V-ot USBről kap a Nextion.
Arduino USB-n van bedugva a laptopba.LCD az RX0 TX0 portot használja, de arduinot próbáltam powerbankról is, úgyse jó.
Mi lehet a gond?
setup-ba mi kell az arduinonál ha 115200baudot akarok beállítani?
Serial.print("baud=115200");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);Ez elég vagy kell a :
Serial.begin(115200);
Köszönöm!
-
Tomika86
senior tag
Hát ez a bajom. Egy oldalon van 3 mutatós műszer, aminek a mutatói nem szeretném, ha akadoznának. Illetve még van mellette 4 text mező és 3 szám mező. Text mezőkben float szám van megjelenítve.
Ezek érdekelnének, hogy mennyi időt kell hagynom a küldések között, hogy kell ütemezni.
Ha az értékek lassabban frissülnek nem gond, de a 3 mutató ne akadozzon.
-
Tomika86
senior tag
Van arra valami szabály hogy a nextion kijelzőnek, a folyamatos adatokat, hogyan kell küldeni? A lezáró 3db FF megvan, de mégis jönnek hibaüzenetek a nextion debugnál.
Buffer overflow és invalid variables is
Új hozzászólás Aktív témák
Hirdetés
- sziku69: Fűzzük össze a szavakat :)
- Hunt: Showdown
- ASZTALI GÉP / ALKATRÉSZ beárazás
- Óra topik
- Kerékpárosok, bringások ide!
- Samsung Galaxy A34 - plus size modell
- iPhone topik
- Azonnali fáradt gőzös kérdések órája
- Teljes verziós, ingyenes mobil játékok és alkalmazások
- AMD GPU-k jövője - amit tudni vélünk
- További aktív témák...
- Telefon felvásárlás!! iPhone 15/iPhone 15 Plus/iPhone 15 Pro/iPhone 15 Pro Max
- Steam, EA, Ubisoft és GoG játékkulcsok, illetve Game Pass kedvező áron, egyenesen a kiadóktól!
- MSI CreatorPro Z16P - i7-12700H, RTX A5500, értintőkijelző
- Okosóra felvásárlás!! Samsung Galaxy Watch 5 Pro, Samsung Galaxy Watch 6 Classic
- Laptop felvásárlás , egy darab, több darab, új , használt ! Korrekt áron !
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest