Hirdetés
- Lassan teljes a Xiaomi 16 tudáslistája
- Apple iPhone 16 Pro - rutinvizsga
- Android alkalmazások - szoftver kibeszélő topik
- Motorola Edge 50 Neo - az egyensúly gyengesége
- iPhone topik
- Samsung Galaxy S25 - végre van kicsi!
- Megérkezett a Google Pixel 7 és 7 Pro
- Pulzust is mér az Apple az AirPods Pro 3
- Kézbe fogható paradoxon lett az iPhone Air
- Google Pixel 9a - a lapos munka
- Geri Bátyó: Agglegénykonyha 4 – Zöldséges ragu, ami sokféleképpen elkészíthető
- Luck Dragon: Asszociációs játék. :)
- sellerbuyer: Milyen laptopot vegyek? Segítek: semmilyet!
- ricsi99: 6. Genes alaplap tündöklése.. kontra MS/Zintel korlátozásai.(Mehetnek a levesbe)
- Geri Bátyó: Agglegénykonyha 1 – rizseshús másképp
-
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
Sziasztok!
Távolság számlálást, jelenleg ezt használom, hogy lehetne átalakítani, hogy ne legyenek kerekítések és esetleg ne legyen float számolás. Jelenleg működik így. (ESP32 miatt van interruptban az FPU bekapcsolás és regiszter mentés). A kód devkiten fut és négyszögjellel hajtom meg, soros monitoron figyelem,
float CalibrationValue_nextion = 6900.0;
float GearratioValue_nextion = 5.0;
Ez a kettő érték változik, felső egy kalibráló érték, ezzel lehet pontosítani, alsó az áttétel megadása.#define METER_RESET_BUTTON_PIN GPIO_NUM_39
#define SPEED_INTERRUPT_PIN GPIO_NUM_14
#define TRIP_COUNTER_RESET_METER 2000
#define SPEEDOMETER_RESET_TIME_MS 3000
void IRAM_ATTR Speed_ISR_Handler();
void SpeedAndTripCalculation(gpio_num_t meterresetinput, const uint32_t speedometerZeroTime, const uint16_t TripmeterResetInterval);
float CalibrationValue_nextion = 6900.0;
float GearratioValue_nextion = 5.0;
uint16_t Speedometer;
uint32_t TravelledMeters_tonextion, TripMeter_Km, OdoMeter_Km;
uint8_t TripMeter_100meterPlace;
volatile float Trip_meter, Odo_meter, Meter_calc;
float DistanceOfImpulse_mm;
float DistanceOfImpulse_m;
volatile uint32_t MillisSavingInSpeedinterrupt;
volatile uint32_t TimeInSpeedinterrupt;
volatile uint32_t PreviousMicrosInSpeedinterrupt;
uint32_t cp0_regs[18];
void setup() {
pinMode(SPEED_INTERRUPT_PIN, INPUT);
pinMode(METER_RESET_BUTTON_PIN, INPUT);
Serial.begin(115200);
attachInterrupt(SPEED_INTERRUPT_PIN, Speed_ISR_Handler, FALLING);
delay(500);
}
void loop() {
SpeedAndTripCalculation(METER_RESET_BUTTON_PIN, SPEEDOMETER_RESET_TIME_MS, TRIP_COUNTER_RESET_METER);
Serial.print("Sebesseg: ");
Serial.println(Speedometer);
Serial.print("Meter: ");
Serial.println(TravelledMeters_tonextion);
Serial.print("Trip szamolo: ");
Serial.println(TripMeter_Km);
Serial.print("Trip 100m szamolo: ");
Serial.println(TripMeter_100meterPlace);
Serial.print("\n");
}
void SpeedAndTripCalculation(gpio_num_t meterresetinput, const uint32_t speedometerZeroTime, const uint16_t TripmeterResetInterval) {
DistanceOfImpulse_mm = CalibrationValue_nextion / GearratioValue_nextion;
DistanceOfImpulse_m = DistanceOfImpulse_mm / 1000.0;
// Sebesség
if ((millis() - MillisSavingInSpeedinterrupt) < speedometerZeroTime) {
Speedometer = 3600 * DistanceOfImpulse_mm / (TimeInSpeedinterrupt);
}
else {
Speedometer = 0;
}
Speedometer = constrain(Speedometer, 0, 300);
// Megtett méter számláló
if (Meter_calc > 99999 || (digitalRead(meterresetinput))) {
Meter_calc = 0;
}
TravelledMeters_tonextion = round (Meter_calc);
// Napi számláló
if (Trip_meter > 999.9999) {
Trip_meter = 0;
TripMeter_Km++;
}
// Nullázás ha 9999km felett van, vagy a beállított felett, vagy nulláztunk gombbal
if ((TripMeter_Km > 9999) || (TripMeter_Km >= TripmeterResetInterval)) {
Trip_meter = 0;
TripMeter_Km = 0;
}
TripMeter_100meterPlace = ((uint32_t)Trip_meter / 100) - (((uint32_t)Trip_meter / 1000) * 10);
// Odo km
if (Odo_meter > 999.9999) {
Odo_meter = 0;
OdoMeter_Km++;
}
if (OdoMeter_Km > 9999999) {
Odo_meter = 0;
OdoMeter_Km = 0;
}
}
void IRAM_ATTR Speed_ISR_Handler() {
// get FPU state
uint32_t cp_state = xthal_get_cpenable();
if(cp_state) {
// Save FPU registers
xthal_save_cp0(cp0_regs);
} else {
// enable FPU
xthal_set_cpenable(1);
}
Odo_meter += DistanceOfImpulse_m;
Trip_meter += DistanceOfImpulse_m;
Meter_calc += DistanceOfImpulse_m;
TimeInSpeedinterrupt = (micros() - PreviousMicrosInSpeedinterrupt);
PreviousMicrosInSpeedinterrupt = micros();
MillisSavingInSpeedinterrupt = millis();
if(cp_state) {
// Restore FPU registers
xthal_restore_cp0(cp0_regs);
} else {
// turn it back off
xthal_set_cpenable(0);
}
}Bármi ötletet meghallgatok, ami jobbá teszi.
Köszönöm!
Új hozzászólás Aktív témák
- A fociról könnyedén, egy baráti társaságban
- Proxmox VE
- exHWSW - Értünk mindenhez IS
- Okos Otthon / Smart Home
- AMD Navi Radeon™ RX 9xxx sorozat
- ThinkPad (NEM IdeaPad)
- Lassan teljes a Xiaomi 16 tudáslistája
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- QNAP hálózati adattárolók (NAS)
- Nem tetszik pár profi eSport játékosnak, hogy Intel CPU-val kell játszaniuk
- További aktív témák...
- ASUS TUF F15 FX506 - 15,6"FHD IPS 144Hz - i5-11400H - 32GB - 1TB - RTX 3050 Ti - Win11 - MAGYAR
- Asztali PC , R7 8700F , RTX 3080 , 32GB DDR5 , 512GB NVME , 1TB HDD
- SAPPHIRE PULSE Radeon RX 7800 XT GAMING 16GB
- Eladó INTEL i9-13900KF processzor + ASUS TUF Gaming H770-Pro WIFI alaplap
- SJCAM SJ11 Active eladó
- HIBÁTLAN iPhone SE 2020 128GB Red -1 ÉV GARANCIA - Kártyafüggetlen, MS2192, 100% Akkumulátor
- BESZÁMÍTÁS! ASUS PRIME Z790M i9 14900K 32GB DDR5 1TB SSD RTX 3080 TI 12GB Zalman Z1 Plus EVGA 850W
- LG UltraGear Gaming Monitorok -30%
- Több mint 70.000 eladott szoftverlicenc
- Új monitor állvány- elegáns megoldás a dupla A/4-es papírcsomag helyett - csak össze lett szerelve
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft.
Város: Budapest