- Motorola Edge 50 Neo - az egyensúly gyengesége
- CMF Phone 2 Pro - a százezer forintos kérdés
- Fotók, videók mobillal
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Külföldi SIM-ek itthon
- Samsung Galaxy A34 - plus size modell
- Garmin topik
- Yettel topik
- Hónap végén érkezik a Xiaomi Band 10, ára is van
- Milyen okostelefont vegyek?
-
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
-
bagarol
tag
válasz
kemcso #23410 üzenetére
Nem tudom, mit csinálsz, de egy 2x16-os vagy egy 4x20 karakter-kijelző nem elég?
Vagy az nem olyan szép?
Egyébként amit csinálok, most egy Uno van slave-ként. Nem bonyolult, a mester
most nem a tft-re hanem az I2C-re küldi a parancsot.
Pl. a,x,y , az Uno megkapja, if in=(a,x,y) then glcd.setPixel(x,y);
Persze, nem gyors, de nem videót akarok nézni rajta, ahol viszonylag ritkábban
változnak az adatok, pl. hőmérő, stb. oda jó. -
-
bagarol
tag
válasz
norbert1998 #23334 üzenetére
Mondom, hardveres pwm kell.
Összedobtam egyet, van I2C,delay, ki kell próbálni.
Késik 8 usecet, valszeg a kiíratás miatt. Serial.print(usec())
Később törölni kell.
/****************************************************************************************************************************
ISR_16_PWMs_Array.ino
For ESP8266 boards
Written by Khoi Hoang
Built by Khoi Hoang https://github.com/khoih-prog/ESP8266_PWM
Licensed under MIT license
The ESP8266 timers are badly designed, using only 23-bit counter along with maximum 256 prescaler. They're only better than UNO / Mega.
The ESP8266 has two hardware timers, but timer0 has been used for WiFi and it's not advisable to use. Only timer1 is available.
The timer1's 23-bit counter terribly can count only up to 8,388,607. So the timer1 maximum interval is very short.
Using 256 prescaler, maximum timer1 interval is only 26.843542 seconds !!!
Now with these new 16 ISR-based timers, the maximum interval is practically unlimited (limited only by unsigned long miliseconds)
The accuracy is nearly perfect compared to software timers. The most important feature is they're ISR-based timers
Therefore, their executions are not blocked by bad-behaving functions / tasks.
This important feature is absolutely necessary for mission-critical tasks.
*****************************************************************************************************************************/
#if !defined(ESP8266)
#error This code is designed to run on ESP8266 and ESP8266-based boards! Please check your Tools->Board setting.
#endif
// These define's must be placed at the beginning before #include "ESP8266_PWM.h"
// _PWM_LOGLEVEL_ from 0 to 4
// Don't define _PWM_LOGLEVEL_ > 0. Only for special ISR debugging only. Can hang the system.
#define _PWM_LOGLEVEL_ 3
#define USING_MICROS_RESOLUTION true //false
// Default is true, uncomment to false
//#define CHANGING_PWM_END_OF_CYCLE false
// Select a Timer Clock
#define USING_TIM_DIV1 true // for shortest and most accurate timer
#define USING_TIM_DIV16 false // for medium time and medium accurate timer
#define USING_TIM_DIV256 false // for longest timer but least accurate. Default
// To be included only in main(), .ino with setup() to avoid `Multiple Definitions` Linker Error
#include "ESP8266_PWM.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3D ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#ifndef LED_BUILTIN
#define LED_BUILTIN 2
#endif
#define HW_TIMER_INTERVAL_US 20L
uint32_t startMicros = 0;
// Init ESP8266Timer
ESP8266Timer ITimer;
// Init ESP8266_ISR_PWM
ESP8266_PWM ISR_PWM;
void IRAM_ATTR TimerHandler()
{
ISR_PWM.run();
}
/////////////////////////////////////////////////
#define NUMBER_ISR_PWMS 1
//PIN_D0 can't be used for PWM/I2C
#define PIN_D0 16 // Pin D0 mapped to pin GPIO16/USER/WAKE of ESP8266. This pin is also used for Onboard-Blue LED. PIN_D0 = 0 => LED ON
#define PIN_D1 5 // Pin D1 mapped to pin GPIO5 of ESP8266
#define PIN_D2 4 // Pin D2 mapped to pin GPIO4 of ESP8266
#define PIN_D3 0 // Pin D3 mapped to pin GPIO0/FLASH of ESP8266
#define PIN_D4 2 // Pin D4 mapped to pin GPIO2/TXD1 of ESP8266
//#define PIN_LED 2 // Pin D4 mapped to pin GPIO2/TXD1 of ESP8266, NodeMCU and WeMoS, control on-board LED
#define PIN_D5 14 // Pin D5 mapped to pin GPIO14/HSCLK of ESP8266
#define PIN_D6 12 // Pin D6 mapped to pin GPIO12/HMISO of ESP8266
#define PIN_D7 13 // Pin D7 mapped to pin GPIO13/RXD2/HMOSI of ESP8266
#define PIN_D8 15 // Pin D8 mapped to pin GPIO15/TXD2/HCS of ESP8266
#define PIN_D9 3 // Pin D9 /RX mapped to pin GPIO3/RXD0 of ESP8266
#define PIN_D10 1 // Pin D10/TX mapped to pin GPIO1/TXD0 of ESP8266
//Don't use pins GPIO6 to GPIO11 as already connected to flash, etc. Use them can crash the program
//GPIO9(D11/SD2) and GPIO11 can be used only if flash in DIO mode ( not the default QIO mode)
#define PIN_D11 9 // Pin D11/SD2 mapped to pin GPIO9/SDD2 of ESP8266
#define PIN_D12 10 // Pin D12/SD3 mapped to pin GPIO10/SDD3 of ESP8266
//////////////////////////////////////////////////////
#define USING_PWM_FREQUENCY true
//////////////////////////////////////////////////////
// You can assign pins here. Be carefull to select good pin to use or crash
uint32_t PWM_Pin[] = {PIN_D1};
// You can assign any interval for any timer here, in microseconds
uint32_t PWM_Period[] = {28650};
// You can assign any interval for any timer here, in Hz
float PWM_Freq[] =
{
34.90401396160558
};
// You can assign any interval for any timer here, in Microseconds
float PWM_DutyCycle[] = {50};
typedef void (*irqCallback) ();
// In ESP8266, avoid doing something fancy in ISR, for example complex Serial.print with String() argument
// The pure simple Serial.prints here are just for demonstration and testing. Must be eliminate in working environment
// Or you can get this run-time error / crash
void doingSomething0()
{
Serial.println(micros());
}
/*
void doingSomething1()
{
}
void doingSomething2()
{
}
void doingSomething3()
{
}
void doingSomething4()
{
}
void doingSomething5()
{
}
void doingSomething6()
{
}
void doingSomething7()
{
}
*/
irqCallback irqCallbackStartFunc[] =
{
doingSomething0
};
////////////////////////////////////////////////
void setup()
{
pinMode(PIN_D1, OUTPUT);
Serial.begin(115200);
while (!Serial);
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
delay(2000);
Serial.print(F("\nStarting ISR_16_PWMs_Array on ")); Serial.println(ARDUINO_BOARD);
Serial.println(ESP8266_PWM_VERSION);
Serial.print(F("CPU Frequency = ")); Serial.print(F_CPU / 1000000); Serial.println(F(" MHz"));
// Interval in microsecs
if (ITimer.attachInterruptInterval(HW_TIMER_INTERVAL_US, TimerHandler))
{
startMicros = micros();
Serial.print(F("Starting ITimer OK, micros() = ")); Serial.println(startMicros);
}
else
Serial.println(F("Can't set ITimer. Select another freq. or timer"));
// Just to demonstrate, don't use too many ISR Timers if not absolutely necessary
// You can use up to 16 timer for each ISR_PWM
for (uint16_t i = 0; i < NUMBER_ISR_PWMS; i++)
{
//void setPWM(uint32_t pin, float frequency, float dutycycle
// , timer_callback_p StartCallback = nullptr, timer_callback_p StopCallback = nullptr)
#if USING_PWM_FREQUENCY
// You can use this with PWM_Freq in Hz
ISR_PWM.setPWM(PWM_Pin[i], PWM_Freq[i], PWM_DutyCycle[i], irqCallbackStartFunc[i]);
#else
#if USING_MICROS_RESOLUTION
// Or using period in microsecs resolution
ISR_PWM.setPWM_Period(PWM_Pin[i], PWM_Period[i], PWM_DutyCycle[i], irqCallbackStartFunc[i]);
#else
// Or using period in millisecs resolution
ISR_PWM.setPWM_Period(PWM_Pin[i], PWM_Period[i] / 1000, PWM_DutyCycle[i], irqCallbackStartFunc[i]);
#endif
#endif
}
}
void loop()
{
display.clearDisplay();
display.setTextSize(1); // Draw 2X-scale text
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,1);
display.println(F(" ESP8266 PWM"));
delay(1000);
} -
bagarol
tag
válasz
norbert1998 #23329 üzenetére
Hardveres pwm github. [link]
-
bagarol
tag
A beállításokban megadhatod a lib helyét. Nekem az is az IDE mappában van.
A boardokat nem tudom át lehet-e helyezni az appdata/local/arduino15 helyről.
Ja, és ezek a D partición. De egy esetleges újrahúzás után a board linkek meg vannak az
IDE-ben, csak újra le kell tölteni. -
bagarol
tag
válasz
gordonfreemN #21922 üzenetére
Ledek helyett használj ws2812-t, 1 gpio elég az összeshez.
Atmel(microchip) helyett szerintem inkább rp2040, igaz 3 voltos. -
bagarol
tag
válasz
#99235328 #21357 üzenetére
Csak egy gondolat az ADC-ről. A uC-k "bemenő ellenállása" nem összemérhető egy
digitális műszerével, ha egy elem,akku feszültségét akarjuk mérni, kis értékű ellenállásokat kell alkalmazni, ráadásul csak terhelten kapunk releváns eredményt, tehát 100 ohm, vagy kisebb értékkel. (Ahogy írtad, mérés idejére.) Ha viszont a saját tápját kell monitorozni, nyilván nagyobb ellenállások kellenek, (ne szívja le 1 perc alatt), de figyelembe kell venni,
hogy a mérés nem lesz pontos, esetleg programban kompenzálni lehet. -
bagarol
tag
válasz
JulianSinulf #21193 üzenetére
A loop-ban már nem kell a "void".
-
bagarol
tag
válasz
Wolfram #20793 üzenetére
Ez ic foglalat, könnyebb cserélni.
Kicsit off-os már a topik, inkább elektronika, de még annyit hozzá teszek:
nekem is van pár injekciós tűm, akkor jó, ha még benne van az alkatrész láb, egyébként
varró vagy gombostű is megteszi.
A veretős módszer is működik, vagy ha van tüdő, ki is lehet fújni az ónt.
A hagyományos szippantó + páka 2 kezes, gyorsnak kell lenni, nekem sokszor
megcsúszik a teflon hegy.
Egy ideje már ezt használom:
Most vettem még egyet, 1400 ft. aliról, nem pénz, ahhoz képest mennyivel könnyebb
vele dolgozni. -
bagarol
tag
válasz
Jadenn #20430 üzenetére
Szia!
A scrollozással elmegy 14 mp és csak utána frissül.
De hogy egy megoldást is mondjak:void light() {
sunValue = analogRead(LDR); // analogérték beolvasása
display.setCursor(0, 17); // 1. oszlop 2. sor
display.printf("Feny %3d", sunValue);
display.display();
}Beírod minden delay(); elé v. mögé light(); és ~ negyed mp-enként frissül.
-
bagarol
tag
[link] Itt már írtam.
LoRa.beginPacket();
LoRa.print(state,"hello ",T1," ",T2," ",counter);
LoRa.endPacket();if (packetSize) {
// received a packet
state = ((char)LoRa.read());
Serial.print("Received packet :");
// read packet
while (LoRa.available()) {
Serial.print((char)LoRa.read());
}
// print RSSI of packet
Serial.print("' with RSSI ");
Serial.println(LoRa.packetRssi()); -
bagarol
tag
válasz
its_grandpa #20088 üzenetére
Én is gondolkodtam, de plusz vizsgálat nélkül nincs ötletem.
Végül arra jutottam, hogy delay() .
Az sem ördögtől való, és végül is mit csinál a program:
500 msecig pörög a loopban, majd mér,kiír, és újabb 500 msec helybenjárás.
Nem mindegy, hogy a loopban vagy a delay()-ben pörög?
Saját progiban delayt használnék. -
bagarol
tag
válasz
its_grandpa #20078 üzenetére
Erre írtam, ha prellezik a gomb, akár kettőt is ugorhat, nem a következő képernyőt adja.
millis() % 1000 >= 500
; -
bagarol
tag
válasz
its_grandpa #20075 üzenetére
Kellemes húsvéti ünnepeket!
Megszakításba a lehető legkevesebb utasítást kell írni, mivel megszakítja a
program futását, illetve másik megszakítás esetleg csak később tud érvényesülni.
Ok,prioritás. -
-
bagarol
tag
byte gomb = 0;
void gombotnyom(){
gomb++; /* növeljük 1-el a gombnyomások számát */
}void loop() {
if (millis() - lastms > 500)
{
lastms = millis();
if (gomb) /* volt valamennyi gombnyomás */
{
gomb = 0;
gombNyomas++;
gombNyomas = gombNyomas%3 ;
Serial.println(gombNyomas); /* kiírjuk hány gombnyomásnál tartasz */
}
megnyomva();
}
} -
bagarol
tag
válasz
lanszelot #20064 üzenetére
Na akkor utoljára
void loop() {
if (millis() - lastms > 500)
{
lastms = millis();
if (gombNyomas) /* volt valamennyi gombnyomás */
{
gombNyomas++;
gombNyomas = gombNyomas%3 ;
Serial.println(gombNyomas); /* kiírjuk hány gombnyomásnál tartasz */
}
megnyomva();
}
}Írd át a megnyomva() -ban is 0,1,2 az 1,2,3 helyett.
-
bagarol
tag
válasz
lanszelot #20029 üzenetére
Tanácsért fordulsz a fórumhoz, de nem fogadod meg.
Szomorú, hogy a hivatalos arduino oldalon így van a gomb.
A legnagyobb gond, hogy nem frissül a programod csak ha gombot nyomsz.
Tehát egyszer kiírja az adatokat és kész, utána a loopban pörög.
A setup utolsó sora legyenmindenRajtaVan()
; így nem üres képernyő fogad. -
bagarol
tag
válasz
gordonfreemN #19805 üzenetére
-
bagarol
tag
válasz
gordonfreemN #19803 üzenetére
Pedig rá kéne futnia az utolsó if-re.
A break-re kilép a switch-ből. -
bagarol
tag
válasz
gordonfreemN #19801 üzenetére
Kicsit megkavart a waiting,de ennek jónak kell lenni:
#include <IRremote.h>
int RECV_PIN = 11;
int playPin = 8;
int pausePin = 13;
IRrecv irrecv(RECV_PIN);
decode_results results;
uint32_t lastms= 0;
void setup()
{
Serial.begin(115200);
irrecv.enableIRIn(); // Start the receiver
pinMode(playPin, OUTPUT); // sets the digital pin as output
pinMode(pausePin, OUTPUT); // sets the digital pin as output
}
void loop() {
if (irrecv.decode(&results)) {
long int decCode = results.value;
Serial.println(decCode);
switch (results.value) {
case 6072407:
Serial.println("Play");
digitalWrite(playPin, HIGH); // sets the LED on
digitalWrite(pausePin, LOW);
lastms = millis();
break;
case 6066287:
Serial.println("Pause");
digitalWrite(pausePin, HIGH); // sets the LED on
digitalWrite(playPin, LOW);
lastms = millis();
break;
case -1:
lastms = millis();
break;
default:
Serial.println("Waiting ...");
}
irrecv.resume(); // Receive the next value
}
if (millis() - lastms > 150) {
lastms = millis();
digitalWrite(pausePin, LOW);
digitalWrite(playPin, LOW);
}
} -
bagarol
tag
válasz
gordonfreemN #19787 üzenetére
Látom más sem tud aludni.
VOLUME_UP DOWN != PLAY STOP.
Akkor mégis jó, amit itt [link] írtam, ezzel a változtatással:case -1:
lastms = millis();
break;
default:
Serial.println("Waiting ...");
if (millis() - lastms > 200) {
lastms = millis();
digitalWrite(pausePin, LOW);
digitalWrite(playPin, LOW);
} -
bagarol
tag
válasz
gordonfreemN #19760 üzenetére
Így kb 1 másodpercig világít.
#include <IRremote.h>
int RECV_PIN = 11;
int playPin = 8;
int pausePin = 13;IRrecv irrecv(RECV_PIN);
decode_results results;
uint32_t lastms= 0;void setup()
{
Serial.begin(115200);
irrecv.enableIRIn(); // Start the receiver
pinMode(playPin, OUTPUT); // sets the digital pin as output
pinMode(pausePin, OUTPUT); // sets the digital pin as output
}
void loop() {
if (irrecv.decode(&results)) {
long int decCode = results.value;
Serial.println(decCode);
switch (results.value) {
case 6072407:
Serial.println("Play");
digitalWrite(playPin, HIGH); // sets the LED on
digitalWrite(pausePin, LOW);
lastms = millis();
break;
case 6066287:
Serial.println("Pause");
digitalWrite(pausePin, HIGH); // sets the LED on
digitalWrite(playPin, LOW);
lastms = millis();
break;
default:
Serial.println("Waiting ...");
if (millis() - lastms > 1000) {
lastms = millis();
digitalWrite(pausePin, LOW);
digitalWrite(playPin, LOW);
}
}
irrecv.resume(); // Receive the next value
}
} -
bagarol
tag
válasz
gordonfreemN #19751 üzenetére
default:
Serial.println("Waiting ...");. digitalWrite(pausePin, LOW);
digitalWrite(playPin, LOW);
Új hozzászólás Aktív témák
Hirdetés
- Milyen légkondit a lakásba?
- Mibe tegyem a megtakarításaimat?
- Motorola Edge 50 Neo - az egyensúly gyengesége
- A fociról könnyedén, egy baráti társaságban
- Konteó topic
- Robogó, kismotor
- CASIO órák kedvelők topicja!
- Projektor topic
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Házimozi belépő szinten
- További aktív témák...
- AMD Ryzen 7 7700X - Új, 1 év garancia - Eladó!
- Apple Watch ultra 2 49mm Natur Titanium, Új, 1 év Apple garanciával
- Gamer PC - R5 5600, RTX 3060 és 16gb RAM + GARANCIA
- HP Zbook 14 laptop (14FHD/I7-G5/8GB/128SSD/MagyarVilágítós)
- Jó áron ÁRON ELADÓ! Üzleti HP Elitebook 1040 G9 Laptop! / i5-1245U 16GB 256GB
- Eladó ÚJ BONTATLAN Honor Magic6 Lite 8/256GB fekete / 12 hónap jótállással!
- ÚJ Lenovo ThinkPad X13 Gen 5 - 13.3" WUXGA IPS - Ultra 5 135U - 16GB - 512GB - Win11 - 2,5 év gari
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7600X 32/64GB RAM RTX 5060 Ti 16GB GAMER PC termékbeszámítással
- Samsung Galaxy A12 64GB, Kártyafüggetlen, 1 Év Garanciával
- Bomba ár! Lenovo ThinkPad T460 - i5-6GEN I 8GB I 256SSD I 14" FHD I Cam I W10 I Garancia!
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: CAMERA-PRO Hungary Kft
Város: Budapest