-
GAMEPOD.hu
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
-
Janos250
őstag
Nem kell megfejteni!
Ennyi a loop lényege:void loop() {
taskDISABLE_INTERRUPTS() ;
for ( uint8_t i = 0 ; i < ledNum ; i++) {
transmitOnePixel(lightArray [lightArrayIndexPortWriting][i]) ;
} ;
taskENABLE_INTERRUPTS() ;
delay(1000) ;
} ; // end loopA transmitOnePixel paramétere egy tömb.
typedef struct RGB {
uint8_t r, g, b;
};
RGB lightArray[2][ledNum] ;Az első indexe 0, vagy 1. Amíg az egyik első indexxel a tartalmát küldöd a led szalagra, addig a core0-á a másik indexxel számolod a következő értéket.
Ezt célszerűen egy
xTaskCreatePinnedToCore
hívással célszerű megtenni.Ezt:
void lightShowInCore0Code( void* parameter){
static uint8_t showNum = 0 ;
switch (showNum) {
case 0:
for ( uint8_t i = 0 ; i < ledNum ; i++) {
lightArray[lightArrayIndexCalculating][i] = RGB {0,0,0} ;
} // end for
lightArray[lightArrayIndexCalculating][0] = RGB {255,255,255} ; // first, last pixel controll
lightArray[lightArrayIndexCalculating][ledNum - 2] = RGB {255,255,255} ;
lightArray[lightArrayIndexCalculating][3] = RGB {255,255,255} ;
break;
case 1:
for ( uint8_t i = 0 ; i < ledNum ; i++) {
lightArray[lightArrayIndexCalculating][i] = RGB {(128-i*(128/ledNum)),i*(128/ledNum),0} ;
} // end for
break;
case 2:
for ( uint8_t i = 0 ; i < ledNum ; i++) {
lightArray[lightArrayIndexCalculating][i] = RGB {0,0,32} ;
} // end for
break;
case 3:
for ( uint8_t i = 0 ; i < ledNum ; i++) {
lightArray[lightArrayIndexCalculating][i] = RGB {0,32,0} ;
} // end for
break;
case 4:
for ( uint8_t i = 0 ; i < ledNum ; i++) {
lightArray[lightArrayIndexCalculating][i] = RGB {32,0,0} ;
} // end for
break;
case 5:
for ( uint8_t i = 0 ; i < ledNum ; i++) {
lightArray[lightArrayIndexCalculating][i] = RGB {(128-i*(128/ledNum)),0,i*(128/ledNum)} ;
} // end for
break;
default:
for ( uint8_t i = 0 ; i < ledNum ; i++) {
lightArray[lightArrayIndexCalculating][i] = RGB {16,16,16} ;
} // end for
}
showNum++ ;
showNum = showNum % 6 ;
vTaskDelete(NULL);
} ; // end lightShowInCore0Codecsak mintapéldának írtam hasraütésszerűen náhány verziót, ami a case szerint sorra veszi.
A
static uint8_t showNum = 0 ;
miatt sorra veszi őket.Persze lehet a kész könyvtárakkal is, ha már azzal kezdted el, bizonyára úgy is kell mennie.
A vékony drót esetét én sem értem, de vannak még csodák.Ha valamelyik led nem azt csinálja, amit kellene:
az többnyire amiatt van, hogy 1 msec időközönként megszakít, és ilyenkor túlszalad az idő.
Próbáld meg esetleg tiltani a megszakítást azon a magon, amíg tart az adatok feltöltése a szalagra!Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Xpod
addikt
válasz Janos250 #8401 üzenetére
Kb ennyit értettem a hozzászólásod első kódrészletéből:
void loop() { //ez értem
taskDISABLE_INTERRUPTS(); //ez remélhetőleg egy beépítet függvény, este megnézem mire jó és miért kell
for ( uint8_t i = 0 ; i < ledNum ; i++) { //ciklus indul, a uint8_t lövésem sincs mi, gondolom egy közvetlen lenyúlás egy hardverközelibb szintre
transmitOnePixel(lightArray [lightArrayIndexPortWriting][i]) ; //ebből annyit értek, hogy egy tömbben defináltunk egy másik tömböt és elkezdtük az elemeit kiíratni
} ;
taskENABLE_INTERRUPTS(); //ez remélhetőleg egy beépítet függvény, este megnézem mire jó és miért kell
delay(1000) ; //ez értem
} ; // end loop //ez értemEzért írtam, hogy meg akarom érteni mit, miért, hogyan.
Most kezdődjék a tánc! - mondta a papagáj és berepült a ventilátorba.
-
Janos250
őstag
taskDISABLE_INTERRUPTS();
Az ESP32 rendszere a freeRTOS op. rendszeren fut, annak a függyvényei is használhatók.
Azt csinálja, ami a neve, letiltja az interruptot, a taskENABLE_INTERRUPTS() pedig újra engedélyezi.
Ezeket próbáld a saját programodba is betenni a szalagra írás előtt és után. Csak próba, mert lehet, hogy nálad a könyvtár dolgaival összeakaszkodik.A loop automatikusan a core1-en indul, ha nem rakod át. A WiFi kezelés a core0-n van, elvileg nem zavarhatják egymást.
A szalagra kiküldendő adatok kiszámítását, meg bármi járulékos dolgot tedd a core0-ra. Beteszed egy függvénybe, és azt pl. ehhez hasonlóan hívod meg.
Így lehet pl. egy "lightShowInCore0Code" nevű függvényt úgy meghívni a loopban, hogy ne a core1-en, hanem a core0-n fusson:xTaskCreatePinnedToCore(
lightShowInCore0Code, /* Task function. */
"lightShow", /* String with name of task. */
1000, /* Stack size in words. */
NULL, /* Parameter passed as input of the task */
3, /* Priority of the task. */
&lightShowInCore0, /* Task handle. */
0 /* core */
);uint8_t:
"uint8_t lövésem sincs mi, gondolom egy közvetlen lenyúlás egy hardverközelibb szintre"
Nem.
A különböző rendszerekre való könnyebb átvitel érdekében a különböző hosszúságú egészeket célszerű így deklarálni, hogyint8_t : előjeles 8 bites egész
uint8_t : előjel nélküli 8 bites egész, vagyis 0..255 közötti az értéke.
A 8 helyett állhat 16, vagy 32 is, attól függően, mekkora kell.Én lightShowInCore0Code-nak neveztem el azt a függvényt, ami az adatokat kiszámolja, tehát ami nevet adsz a függvényednek, azt írd a helyére. A többi maradhat változatlanul.
void lightShowInCore0Code( void* parameter) {
// Ide kerül a tényleges program, amire azt akarod, hogy a core0-n fusson.
vTaskDelete(NULL); // ezt ne felejtsd el beírni a függvényed utolsó sorába.
} ;[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Vladi
nagyúr
Sziasztok!
Lassan a végére érek a projektnek, meg az idegeimnek is.
Van egy időzítő kapcsolóm arduino alapon, 2 gomb bemenet, 1 relé kimenet.A program jó, működik, stabil, az összes bemenet stabil. Kiváló. Az egészet beépítettem egy fém dobozba.
Szépen kultúráltan, kábeleket is elosztottam.De a relével nem jutok dűlőre. Ilyen fajta.
Árnyékolt kábelt használtam, mindent leföldeltem rendesen. Működik is a rendszer, csak a relé nagyon instabil. Bármilyen elektromágneses ingadozásra beránt. Vagy akár úgy is marad.
Ez akár olyan szinten, hogy megérintem a dobozt és...Van ötletetek erre? Arra gondoltam, hogy ssr relére cserélném ki. Az stabilabb lenne? Esetleg ahhoz kötnék sorba egy ellenállást, hogy a zaj ne jusson be. 3 volt fölött azok már kapcsolnak. pl.
Nem félünk! Nem félünk! Itthon vagyunk e földön. Nem félünk! Nem félünk! Ez nem maradhat börtön!
-
Vladi
nagyúr
Ezt a leírást nézem most: link.
Egy 10k-s lehúzót tesz be és kész. Ez így jó lenne?
Már csak azt kellene kitalálnom, hogy milyen ssr kell, mi az áramkör amit kapcsolgatok.
váltó, vagy egyenáram. Talajdonképpen egy omron időrelét kell elindítani a kapcsolással.Nem félünk! Nem félünk! Itthon vagyunk e földön. Nem félünk! Nem félünk! Ez nem maradhat börtön!
-
gardener
senior tag
válasz Teasüti #8395 üzenetére
A végén haver tudta megcsinálni egy Atmel Ice-vel beégetve, ez a leírás alapján:
http://wspublishing.net/avr-c/restoring-arduino-mega-bootloader/
(Amúgy pololu A4988 van benne.) -
Janos250
őstag
válasz choco01 #8407 üzenetére
Nekem ez az eleje:
#include <WiFi.h>
#include <WiFiClient.h>
#include <ESP32WebServer.h>"DHT22 miert NA adatot ír állandóan"
Én ezért szoktam saját lekezelőt csinálni, mert a kész könyvtárak időnként nem azt csinálják, amit én szeretnék. DHT11-re csináltam sajátot, 22 még nem.[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Janos250
őstag
válasz choco01 #8411 üzenetére
Én - ha jól emlékszem - ezt töltöttem le:
http://www.fisch.lu/junk/ESP32-WebServer.zipAzért ezt, mert én az ESP8266-on is ennek az elődjét használtam, és azt megszoktam.
Egyéb oka nem volt.Segédletem sajnos nincs.
[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Janos250
őstag
válasz choco01 #8413 üzenetére
Az ESP8266-nál valahonnan a netről töltöttem le, és a mintapéldában láttam a használatát. Egyszerűnek tűnt. ezért azt használtam. Utána írták, hogy az esp8266WEBserver működik némi megszorításokkal az ESP32-n is, aztán valaki elkezdte bütykölni, hogy rendesen menjen. Valaki írta, hogy neki egyszerre csak egy klienst tud lekezelni, de nekem az elég.
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Janos250
őstag
válasz choco01 #8415 üzenetére
Nem nehéz.
Ez a main.cpp (mivel az Arduino programja is C++, természetesen van main.cpp is, csak arra nem szokták felhívni a figyelmünket.)#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "Arduino.h"
#if CONFIG_AUTOSTART_ARDUINO
#if CONFIG_FREERTOS_UNICORE
#define ARDUINO_RUNNING_CORE 0
#else
#define ARDUINO_RUNNING_CORE 1
#endif
void loopTask(void *pvParameters)
{
setup();
for(;;) {
micros(); //update overflow
loop();
}
}
extern "C" void app_main()
{
initArduino();
xTaskCreatePinnedToCore(loopTask, "loopTask", 8192, NULL, 1, NULL, ARDUINO_RUNNING_CORE);
}
#endifAlapesetben, ha nem írod át a main.cpp-ben, akkor a loop a core 1-en fut.
Ha csinálsz függvényt, azt ugyanígy a xTaskCreatePinnedToCore-al tudod hívni, és meghatározhatod, hogy melyik magon fusson.
Itt mutattam rá egy programomból egy mintapéldát.
https://prohardver.hu/tema/arduino/hsz_8403-8403.htmlAz amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Teasüti
nagyúr
Fura. Annak a relé modulnak pedig teljes körűnek kellene lennie, minden szükséges ellenállás és dióda látszik rajta. Esetleg ha van szkópod akkor érdemes volna rámérni a bemenetre milyen jelet is kap.
Előbb biztos a hibát keresném meg, mielőtt alkatrészeket vásárolnék.
Éles használatban meg tervezéskor gondoskodni kell az ESD védelemről is!
Ez minden kezelőszerv esetén minimum egy védődiódát jelent.[ Szerkesztve ]
-
Vladi
nagyúr
Gondoltam erre én is. Kicsit furán működik. Mert kapja a +5 voltot, meg az arduino gnd-jébe is be kell kötni, plusz van egy digitál bemenete. Na ha ott lowra megy a jel, akkor kapcsol.
De gyárilag nem rajta kellene lenni?
Nem félünk! Nem félünk! Itthon vagyunk e földön. Nem félünk! Nem félünk! Ez nem maradhat börtön!
-
Dalee
aktív tag
Sziasztok,
Szeretnék segítséget kérni.
Kaptam egy példakódot, melynek az egyik sora a boost gyűjtemény egyik elemét használná:
boost::fusion::for_each(this->m_data, [](const auto& a) {
std::cout << a << ' ';
});Ez a sor (a komplett programmal együtt) le is fordul PC konzolra, de ESP8266 alá kapok egy csomó hibaüzenetet, hiába telepítettem a github-ról a boost_1_51_0 és a működéséhez szükséges boost StandardCplusplus könyvtárakat.
Az első pár hibaüzenet:
Arduino.h: 267:12: error: 'std::isinf' has not been declared
using std*: isinfArduino.h: 268:12: error: 'std::isnan' has not been declared
using std*: isnancpp_type_traits.h: 82:10: error: redefinition of 'struct std::__true_type
struct __true_type { } -
Vladi
nagyúr
Na azt hiszem megvan a hiba! Az arduino tápjának kábele egy helyen sérült, kilátszik a réz.
Ha a vezetéket megtapogatom, akkor azonnal hibázik - ingadozhat az 5v a digi kimeneten.
Erről mi a véleményetek? Lehet, hogy ez okozta az összes cumimat? Hát ha így van tutira herén harapom magam....(#8420) aryes:
Jah, az egészet átpítettem árnyékolt kábelekkel. Az árnyékolásokat is összegyűjtottem sorkapocsba, csak még nem tudom, hogy :
1. kell -e egyáltalán
2. a végét hová kell dugnom.Teasüti:
esd védelemről keresnem kell még valamit. Annyit van, hogy a gépet egy villanyszerelési fém házba tettem, annak a földjét meg bekötöttem a hálózat védőföldjébe. Ennyi elég lehet?
Nem félünk! Nem félünk! Itthon vagyunk e földön. Nem félünk! Nem félünk! Ez nem maradhat börtön!
-
Teasüti
nagyúr
ESD diódákat vagy chip-et ha az van, GND-re szokás kötni. Elhelyezni meg az interfész után közvetlenül kell.
Kapacitív érzékelők kapcsán olvashatsz sokat ESD-ről, ugyanakkor minden ember által fogdosott áramköri elemre tenni kell védelmet szabvány szerint.Árnyékolás is GND-re megy alapesetben, ha nem tévedek.
Én USB port beültetése kapcsán olvasgattam erről, ott nem egészen értettem a dolgot, mert megkülönböztetnek több GND-t is. Úgy tűnt az usb kábel árnyékolása GND2-re és GND3-ra kapcsolódik. Bármit is jelentsen ez. -
Teasüti
nagyúr
Nem. GND-t azt GND-re értem az áramkörön. Hálózati feszültséghez még annyira se értek, mint amit az alacsony feszültségű áramkörök kapcsán megtanultam, de nekem mintha úgy rémlene a védőföldnek nem az a szerepe, hogy te arra kösd rá az árnyékolást és a bypass diódákat. A védőföld az kizárólag érintésvédelemre szolgál tudtommal. De ne hallgass rám, majd vmelyik villanyos fórumtárs kiigazít.
-
Teasüti
nagyúr
Ez a protokoll.
Kihelyezett kapcsolókhoz, kezelőszervekhez, különösképp a kapacitív érzékelőkhöz bölcs döntés védelmet rakni arra a végére a vezetéknek. Ezen felül áramkorlátozó ellenállást. Bypass kondit szükség esetén még a kontroller felöli végére, hogy csökkentsük a zavarjelet.
A beépített védelem elbír 15 kV 1A ESD-vel üzemszerűen?[ Szerkesztve ]
-
_q
addikt
Sziasztok!
Arduino Uno esetén okozhat gondot ha a timer 0 (amit a millis és delay függvények használnak) portjára kötök motort ami PWM jellel van vezérelve?
Másik kérdésem, hogy a képen látható Analog input portok digitális portként is tudnak működni? Tehát ha gombot kötök rá akkor működik vagy csak analog jeleket tud kezelni? Megtévesztő a felirat. -
-
Janos250
őstag
válasz choco01 #8437 üzenetére
Én ezeket használom, nekem bevált: "dupont cable"
Nem árnyékolt, de jó a csatlakozója, és olcsó. Sokszínű, téphető, különböző hosszúságban van. Nekem van pár marékkal apa/apa, apa/anya, anya/anya verzióban.Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
tvamos
nagyúr
válasz DrojDtroll #8439 üzenetére
En is vettem 2-3-4-8 tagu hazat, abba at tudom pattintani a sima dupon kabelbol a fem csatlakozot... de mostanaban azt csinalom, ha zavar, hogy lotyog, odaragasztom forro ragasztoval. az lejon kezzel, maradek nelkul, eleg jol tart.
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
Janos250
őstag
válasz choco01 #8440 üzenetére
Egy idő után ha sokat ki-be dugdosom kilazul, miegymás, de akkor eldobom.
Ha meg "véglegesre" kell, akkor a led szalagokhoz is használt JST csatit használom:
[link]Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Teasüti
nagyúr
-
Teasüti
nagyúr
Hali,
Elővettem megint az Arduino IDE-t hosszú idő után, felraktam a Core-t ESP32-höz, majd fordítom az utolsó programot, hogy minden megy-e még és azt kapom vissza, hogy a tárhely csak 131 KB.
Vmit biztos rosszul állítottam be, alaplapnak a sima "esp32 dev module" van kiválasztva és a 4 mega flash mellé. Emlékeim ha nem csalnak - és tuti nem csalnak -, akkor tuti nem használtam ki 97%-ra a program tárhelyet, ami inkább olyan 480 KB körül mozgott annó.
Mit kell buzerálni rajta, hogy nagyobbra partícionálja? Végig próbáltam a partíció sémákat is, mind 131 KB csupán. Ez így lóf.sz, még a RAM is 300 KB majdnem, mi a fenéért biztosít csak 130KB ROM-ot??
Köszi! -
Teasüti
nagyúr
válasz Teasüti #8448 üzenetére
Közben kikerestem a partíciós táblát, meg a boards.txt-t.
Nos, eléggé benéztem azt a 131 KB-ot, egy nulla lemaradt a végéről.
Vagyis nem hogy megvan a tárhely, de még jócskán több is, mint volt annó.
A programom foglal egy nagyságrenddel több helyet, mint korábban.
Na most ezt nem értem hogy, de mindegy.szerk: oké, emlékeim mégis csak csalnak.
A BT könyvtár eszi meg a program tárhely nagy részét, a BLE több mint 1 MB!!!
Viszont most nézem, hogy implementálva van a Classic Bluetooth az Arduino Core-ban!
Végre működik a bluetooth serial mindenféle hack nélkül!
És kevesebb helyet is foglal, az alapértelmezett partíció 75%-át foglalja csak el.[ Szerkesztve ]
Új hozzászólás Aktív témák
- Battlefield 2042
- RAM topik
- Rövid előzetesen a S.T.A.L.K.E.R. 2: Heart of Chornobyl
- Trollok komolyan
- A régi node-okra koncentrál a szankciók miatt Kína
- Samsung Galaxy Watch6 Classic - tekerd!
- Amlogic S905, S912 processzoros készülékek
- TCL LCD és LED TV-k
- Multimédiás / PC-s hangfalszettek (2.0, 2.1, 5.1)
- Autóhifi
- További aktív témák...