-
Fototrend
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
Használd ekkold által írtakat. Az jó megoldás, én csak annyit fűznék hozzá, hogy ha az eredeti programhoz jobban passzoló neveket használsz, akkor talán kevésbé keveredsz bele.
Azért ez a téma lehet, hogy megér egy bővebb kifejtést, ezért írtam egy kis tutorialszerű programot.#include <iostream> // ha a std::cout-ot akarjuk hasznalni, egyebkent torlendo
void setup() {
delay(1000);
Serial.begin(115200) ;
delay(1000);
/*
A C++-ban a ("C tipusu") tomb neve constans pointer.
Ugyanugy hasznalhatjuk oket egymas helyett is, azzal a megkotessel,
hogy a tomb neve konstans, nem valtoztathatjuk meg.
Ezert nem lehet egyenlosegjel bal oldalan hasznalni.
Viszont, ha helyette egy tenyleges pointert hasznalunk, az megvaltoztathato,
azaz egy masik tomb nevet mint pointert adhatjuk neki.
Mas modszereket is hasznalhatunk ennek megkerulesere, mint peldaul
a std::array. Ez mar szereelhet erteekado utasitas bal oldalan.
Vagy a for each-csel valo ertekadas, esetleg a std::vector
Mind kozul a leggyorsabb a sima tomb
*/
Serial.println ("ha egy index van:");
int* xy ;
int xy_array[9] = {1,0,0, 0,1,0, 0,0,1};
int xy2_array[9] = {11,12,13, 21,22,23, 31,32,33};
Serial.println ("xy = xy_array:");
xy = xy_array;
for (int i = 0; i <9 ; i++){
Serial.print (xy[i]); Serial.print (" ");
};
Serial.println ();
Serial.println ("xy = xy2_array:");
xy = xy2_array;
for (int i = 0; i <9 ; i++){
Serial.print (xy[i]); Serial.print (" ");
};
Serial.println ();
// nyomtatja:
/*
ha egy index van:
xy = xy_array:
1 0 0 0 1 0 0 0 1
xy = xy2_array:
11 12 13 21 22 23 31 32 33
*/
//he több index van akkor typedef hasznalando
//typedef <data_type> <alias_name> [<size>]
typedef int egyindexes_arr[3]; // ez egy 3 elemű vektor tipus
egyindexes_arr* enMatrixom ;
// harom elemu vektorra mutato pointer,
// melynek az elemei szinten harom elemu vektorok
// Az alabbiak ugyanigy, csak tombok.
// Ne feledd tomb = pointer!
egyindexes_arr enMatrixom1[3] = {{1,0,0}, {0,1,0}, {0,0,1}} ;
egyindexes_arr enMatrixom2[3] = {{11,12,13}, {21,22,23}, {31,32,33}} ;
Serial.println ("eredeti ketindexes: ");
for (int i = 0; i <3 ; i++){
for (int j = 0; j <3 ; j++){
Serial.print ( enMatrixom1[i][j] ); Serial.print (" ");
}; // end j
Serial.println ();
}; // end i
Serial.println ();
/*
eredeti ketindexes:
1 0 0
0 1 0
0 0 1
*/
Serial.println ("enMatrixom = enMatrixom1 utan:");
enMatrixom = enMatrixom1 ;
for (int i = 0; i <3 ; i++){
for (int j = 0; j <3 ; j++){
Serial.print ( enMatrixom[i][j] ); Serial.print (" ");
}; // end j
Serial.println ();
}; // end i
Serial.println ();
/*
enMatrixom = enMatrixom1 utan:
1 0 0
0 1 0
0 0 1
*/
Serial.println ("enMatrixom = enMatrixom2 utan:");
enMatrixom = enMatrixom2 ;
for (int i = 0; i <3 ; i++){
for (int j = 0; j <3 ; j++){
Serial.print ( enMatrixom[i][j] ); Serial.print (" ");
}; // end j
Serial.println ();
}; // end i
Serial.println ();
/*
enMatrixom = enMatrixom2 utan:
11 12 13
21 22 23
31 32 33
*/
// Hasznalhatunk mas megoldasokat is, de azok nem biztos, hogy a régi lapokon mennek,
// csak a korszerűbbeken, de ESP32-n biztosan(kipróbáltam)
// peldaul a std::array, vagy a for each hasznalata
// a std::cout helyett termeszetesen hasnalhatunk barmilyen mas nyomtato utasitast is
std::array<int, 9> std_arr_1 = {1,0,0, 0,1,0, 0,0,1};
std::array<int, 9> std_arr_2 = {11,12,13, 21,22,23, 31,32,33};
Serial.println ("eredeti std_arr_1 :");
for (int i = 0; i <9 ; i++){
Serial.print (std_arr_1[i]); Serial.print (" ");
};
Serial.println ();
std_arr_1 = std_arr_2; // igy hasznalhato az ertekadas,
//egyebkent meg ugyanugy hasznalhatjuk, mint a C tipusu tombot.
Serial.println ("std_arr_1 = std_arr_2 utan :");
for (int i = 0; i <9 ; i++){
Serial.print (std_arr_1[i]); Serial.print (" ");
};
Serial.println ();
/*
eredeti std_arr_1 :
1 0 0 0 1 0 0 0 1
std_arr_1 = std_arr_2 utan :
11 12 13 21 22 23 31 32 33
*/
Serial.println (
"a korabban megadott xy tomb elemeit lecserésljük a felsorolasban szereplokre :");
Serial.println ("lecsereles elott:");
// kinyomtatjuk
for ( auto tombEgyEleme : xy_array ) {
std::cout << tombEgyEleme << ' ';
}
std::cout << '\n';
// lecsereljuk:
uint8_t j = 0;
for ( auto tombEgyEleme : {11,12,13, 21,22,23, 31,32,33} ) {
xy_array[j++] = tombEgyEleme;
}
Serial.println ("lecsereles utan:");
// kinyomtatjuk
for ( auto tombEgyEleme : xy_array ) {
std::cout << tombEgyEleme << ' ';
}
std::cout << '\n';
/*
a korabban megadott xy tomb elemeit lecserésljük a felsorolasban szereplokre :
lecsereles elott:
1 0 0 0 1 0 0 0 1
lecsereles utan:
11 12 13 21 22 23 31 32 33
*/
} ; // end setup
void loop() {
// put your main code here, to run repeatedly:
}
-
ekkold
Topikgazda
Ha sima konstansokkal akarod feltölteni, akor az ugyanannyi helyet foglal mintha két tömböt készíteniél, tehát ez esetben két tömböt kell készíteni. A használatakor pedig pl. pointert használsz amibe az egyik vagy a másik (vagy több is lehet) tömb címét töltöd bele.
int xy[3][3] = {.....
int zy[3][3] = {.....
int * py;py = xy;
py[0][1] = .....
.....
py = zy;
py[0][1] = .....
.....
Ha nem akarsz pointerezni, akkor a memcpy() függvénnyel másolható a tömb egyikből a másikba.
memcpy(xy, zy, sizeof(xy))Ha nem akarod, hogy a zy tömb is foglaljon memóriát, akkor progmem konstansként kell definiálni, de ilyenkor csak olvasható lesz, de arra pl. továbbra is jó, hogy az xy tömbbe belemásold. Tehát:
const int PROGMEM zy[3][3] = {..... -
-
sonar
addikt
Arduino Programozási kézikönyv - ezt nem találtam meg múltkor.
-
vargalex
félisten
Én úgy értettem a kollégát, hogy a starter kit már megvan...
De, hogy valami értelmeset is írjak:
A topikon is volt kolléga, aki készített videós tanfolyamot.
Illetve nem tudom, mennyire jó, de a TavIR-nek is van egy 60 napos ingyenes tanfolyama. Minden nap küldenek egy e-mail-t egy-egye témával. -
peter1998
tag
Egy enc28j60-as ethernet modult sikerült beszereznem.Hozzá a könyvtárat is.
#include <EtherCard.h>
// ethernet interface mac address, must be unique on the LAN
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
byte Ethernet::buffer[500];
BufferFiller bfill;
void setup () {
if (ether.begin(sizeof Ethernet::buffer, mymac, 53) == 0)
Serial.println( "Failed to access Ethernet controller");
if (!ether.dhcpSetup())
Serial.println("DHCP failed");
}
static word homePage() {
int masik = 12 ;
int kalap = 1333 ;
bfill = ether.tcpOffset();
bfill.emit_p(PSTR(
"<html>"
"<body onload="document.createElement('form').submit.call(document.getElementById('myForm'))">"
"<form id="myForm" name="myForm" action="http://192.168.1.10/add.php" method="GET">"
"<input type="hidden" name="temp1" value="remelem">"
"<input type="hidden" name="moi1" value="mukodik">"
"</form>"
"</body>"
"<asdasdasd>"
),
masik , kalap );
return bfill.position();
}
void loop () {
word len = ether.packetReceive();
word pos = ether.packetLoop(len);
if (pos) // check if valid tcp data is received
ether.httpServerReply(homePage()); // send web page data
}Ez lenne a programom.Sajnos ilyen hibakódot kapok:
Arduino: 1.6.4 (Windows 7), Board: "Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"
In file included from C:\Users\peti\Desktop\arduino-1.6.4\hardware\arduino\avr\cores\arduino/Arduino.h:28:0,
from C:\Users\peti\Desktop\arduino-1.6.4\libraries\ethercard-master/EtherCard.h:28,
from szerver2.ino:1:
szerver2.ino: In function 'word homePage()':
szerver2:28: error: expected ')' before 'document'
expected ')' before 'document'
This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.A kód annyit csinálna hogy ha felmegyek az oldalra akkor meghív automatikusan egy php fájlt és az pedig egy mysql-be ír.
Új hozzászólás Aktív témák
- One mobilszolgáltatások
- Hardcore café
- Milyen videókártyát?
- Futás, futópályák
- Sony Xperia 1 V - kizárólag igényeseknek
- Melyik tápegységet vegyem?
- Anime filmek és sorozatok
- Amazfit Active 2 NFC - jó kör
- Kutya topik
- Motorolaj, hajtóműolaj, hűtőfolyadék, adalékok és szűrők topikja
- További aktív témák...
- BEACN MIC Dynamic Podcast RGB USB-C - Professzionális stúdióminőségű Mikrofon - Win/Mac - Ár alatt!
- Gamer-Pc, Core i5, RTX 4060 Ti, Wi-Fi, 750W, vízhűtés
- Samsung Galaxy Tab A9+ 4/64GB
- Dell Latitude 5310 i5 10310u I 16GB I 256SSD I IPS 13,3" FHD I HDMI I W11 I jó akku
- Gigabyte RX 6800 16Gb Aorus (LCD kijelzős)
- DELL PowerEdge R740 rack szerver - 2xGold 6130 (16c/32t, 2.1/3.7GHz), 64GB RAM, 10Gbit HBA330, áfás
- AKCIÓ! Lenovo Thinkpad P15 Gen1 15 FHD notebook - i7 10750H 16GB RAM 512GB SSD Quadro T1000 W11
- REFURBISHED és ÚJ - Lenovo ThinkPad 40AS USB-C docking station (akár 3x4K felbontás)
- Telefon felvásárlás!! iPhone 11/iPhone 11 Pro/iPhone 11 Pro Max
- LENOVO ThinkBook 13s - 13.3" FullHD IPS - i5-10210U - 8GB - 256GB SSD - Win11 - MAGYAR
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest