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.
Gyorskeresés
Legfrissebb anyagok
- Bemutató Spyra: akkus, nagynyomású, automata vízipuska
- Bemutató Route 66 Chicagotól Los Angelesig 2. rész
- Helyszíni riport Alfa Giulia Q-val a Balaton Park Circiut-en
- Bemutató A használt VGA piac kincsei - Július I
- Bemutató Bakancslista: Route 66 Chicagotól Los Angelesig
Általános témák
LOGOUT.hu témák
- [Re:] eBay-es kütyük kis pénzért
- [Re:] [sziku69:] Szólánc.
- [Re:] [Luck Dragon:] Asszociációs játék. :)
- [Re:] [sziku69:] Fűzzük össze a szavakat :)
- [Re:] [bb0t:] Gyilkos szénhidrátok, avagy hogyan fogytam önsanyargatás nélkül 16 kg-ot
- [Re:] Spyra: akkus, nagynyomású, automata vízipuska
- [Re:] [GoodSpeed:] Windows 11 PRO FPP (Full Packaged Product) - Retail, Box, dobozos
- [Re:] [Mr Dini:] Mindent a StreamSharkról!
- [Re:] [gban:] Ingyen kellene, de tegnapra
- [Re:] Elektromos rásegítésű kerékpárok
Szakmai témák
PROHARDVER! témák
Mobilarena témák
IT café témák
Útvonal
Fórumok » Egyéb hardverek » Mikrokontrollerek Arduino környezetben (programozás, építés, tippek)Téma összefoglaló
Hozzászólások
Tankblock
aktív tag
Pontosan 8 s lesz az csak amint újra triggerelődik megint 8 (s) fog a led világitani. A feltétel vége elé egy másik késleltetést rakj be és látni fogod.
[ Szerkesztve ]
Release the Beast....
RAiN91
őstag
Köszönöm, közbe már megértettem. A PIR kb. 3-4 másodpercig adja a jelet, ez zavart meg.
A következő kérdésem. Minél olcsóbban hogy tudom megoldani, hogy egy Nokia 3210 gombjait vezérelhessem? Csak egy rövidzár kell, de sajnos direktbe gondolom nem lehet megoldani, mert csak 2 állapot van? Vagy GND vagy 3,3V a kimeneten, a feszültség nem tenne jót. Vagy rosszul gondolom, hogy 2 állapot van?
// Chaka //
tag
Hasonló Nokián CNY-74 optocsatolóval leválasztva nyomogattam a gombokat. A nyitott kollektor teljesen megfelelt neki.
Szerk: Ha Tiszaújvároshoz közel laksz, oda is tudom adni a garázsban porosodó kivezetékezett telefont
[ Szerkesztve ]
Több ezer telefonszámot tudok fejből, csak azt nem tudom, hogy melyik kié.
Ragassz pár szervó motort a készülékházra és azzal nyomasd meg a gombokat.
_q
addikt
Miért kell optocsatoló? Miért nem lehet direktbe rákötni a nyomógombot?
Janos250
őstag
Elsőre természetesen nekem is a táp volt gyanús, de erős külső táppal ugyanazt csinálja. Én nem mindig használok külső tápot, csak ha gond van. Tüskék természetesen beforrasztva, és a panel hátlapjára a külső táp csatija is. Bekapcsoláskor egy-két feltöltés gyakran sikerül, de ha egy óra múlva próbálom, sehogy se megy. Azért gyanakszom én is a baudrate stabilitására, amit az interneten is írtak, mert ha lerövidítem a csomagokat, akkor felmegy. Na, meg ha a kristályos USB-TTL átalakítót használom.
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
// Chaka //
tag
Öööö, izé, nem vezérelni kell a telefont? Pl. felhívni egy előre elmentett számot, vagy valami ilyesmi. Én erre gondoltam
Több ezer telefonszámot tudok fejből, csak azt nem tudom, hogy melyik kié.
_q
addikt
Lehet én értettem félre akkor.
choco01
addikt
Valaki próbált már ESP32-vel BME280-ból adatokat kiíratni oledre?
Valamiért 0,00-t olvas ki és azt írja ki mondjuk hőmérsékletnek..
Applikáció fejlesztés, weboldal készítés, SEO, Online marketing » https://petadev.com
MineFox54
őstag
Sziasztok!
Most jött egy kínai Nano, nem tudok feltölteni, az alábbi kódot kapom mindig... Két alkalommal sikerült, azon kívül soha (az sem az első kettő volt, kitartó próbálkozás eredménye. USB kábel csere volt. Egyébként a már feltöltött programok szépen működnek, csak nem a végleges került rá... Loopback teszt OK
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt x of 10: not in sync: resp=0x6b
[ Szerkesztve ]
Janos250
őstag
Nagyon régen használtam nanot, de mivel - úgy látom - nem nagy a tolongás válaszadásra, ezért próbálkozom, kezeld kritikával!
Nekem ez az stk500 gyanús, hogy annak nem kéne ott lenni. Biztos, hogy azzal akarod tölteni?
Biztos, hogy ha nem, akkor az uploadot nyomtad meg, nem véletlenül az upload using programmert?
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
MineFox54
őstag
Nem valószínű, ugyanazt a kódot, ugyanazzal a metódussal (Nyilván megfelelően beállítva a megfelelő porton) simán fel tudtam rakni Unora
"Biztos, hogy azzal akarod tölteni?"
Mi más lehetőségem van / hogy tudnék beleszólni?
[ Szerkesztve ]
Janos250
őstag
Biztos, hogy az uploadot nyomtad meg, nem véletlenül az upload using programmert?
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
_q
addikt
Én HDC1080-al próbáltam és nem volt gond oled kiíratással. Szerintem először serial monitoron próbáld kiíratni és csak utána menj tovább az oledre, Lépésről lépésre. Ha serial monitor is 0-t ír ki akkor a kóddal lesz a gond. Nem tudom hogy magad írtad-e meg a kommunikációt vagy arduino könyvtárat használsz. Ha utóbbi akkor egy minta kódot érdemes nézni pl.: ezt vagy ezt. Emellett érdemes megnézni a bekötés jó-e az szokott még gond lenni.
choco01
addikt
Mintakoddal működik és a saját kódomat is az alapján építettem fel és működik, csak amint meghivom a kijelzo függvényenet akkor hal le a dolog.. Ugyan azokon a lábakon érdemes az i2c-t vagy másikon? Gépről majd benyomom a kódot!
Applikáció fejlesztés, weboldal készítés, SEO, Online marketing » https://petadev.com
vargalex
félisten
Az i2c egyik előnye, hogy több eszközt köthetsz a buszra. Én is így használom esp8266-on a BMP280-at és oled kijelzőt.
Alex
_q
addikt
Igen, ahogy (#8666) vargalex mondja ugyan arra az i2c-re kösd rá a kijelzőt, mint amire a szenzort is kötöd. Ezek után csak el kell küldeni neki amit ki akarsz íratni. Én mikor teszteltem külön teszteltem a szenzort, külön a kijelzőt, majd a végén raktam össze a kettőt.
Valószínű a kódban lehet valami. Amikor megvan pl. hőmérséklet, akkor a következő függvénnyel tudod elküldeni a kijelzőnek:
display.drawString(0,0, "Temp: " + String(readtemp));
Ahol a Temp: konstans szövegként kerül a kijelzőre, majd a kettőspont után a kiolvasott hőmérséklet, ugyan az amit serial monitoron is kiíratsz. Illetve az elején a 0, 0 adja meg hogy melyik sorba/oszlopba legyen kiíratva.
[ Szerkesztve ]
choco01
addikt
+vargalex:
Most így néz ki a kód közös i2c-n 21 és 22-es lábon:
#include <Wire.h>
#include "Adafruit_BME280.h"
#include "SSD1306.h"
#define I2C_SDA 21
#define I2C_SCL 22
#define SEALEVELPRESSURE_HPA (1013.25)
#define BME280_ADD 0x76
Adafruit_BME280 bme(I2C_SDA, I2C_SCL);
SSD1306 display(0x3c, 21, 22);
double pt,lny,hp,hom;
/*double lny=1015.20;
double hp=-32.12;
double hom=-32.12;
double pt=62.07;*/
void idojaras(void);
void kijelzo(void);
void setup() {
Serial.begin(115200);
Serial.println("Program Start");
idojaras();
delay(100);
kijelzo();
delay(100);
}
void loop()
{
idojaras();
delay(1000);
kijelzo();
delay(3000);
}
void idojaras()
{
pt = bme.readHumidity();
hom = bme.readTemperature();
hp = hom - 0.36 * (100.0 - pt);
lny = bme.readPressure() / 100.0F ;
delay(1000);
}
void kijelzo()
{
display.init();
display.drawString(0, 0, "Hömérséklet:");
display.drawString(62, 0,String(hom) );
display.drawString(90, 0, " °C");
display.drawString(0, 10, "Páratartalom:");
display.drawString(65, 10, String(pt));
display.drawString(90, 10, " %");
display.drawString(0, 20, "Harmatpont:");
display.drawString(62, 20, String(hp));
display.drawString(90, 20, " °C");
display.drawString(0, 30, "Légnyomás:");
display.drawString(60, 30, String(lny));
display.drawString(98, 30, " hPa");
display.drawString(0, 40, "Légszenny.:");
display.drawString(60, 40, "nA");
display.drawString(85, 40, " %");
display.drawString(0, 50, "UV sugárzás:");
display.drawString(65, 50, "nA");
display.display();
}
[ Szerkesztve ]
Applikáció fejlesztés, weboldal készítés, SEO, Online marketing » https://petadev.com
vargalex
félisten
Szia!
Szerintem csak egy
bme.begin()
hiányzik.
Alex
choco01
addikt
Szia,
A setupba?
szerk.: azt hiszem ezt már próbáltam de ilyenkor meg nem indul el az egész..
[ Szerkesztve ]
Applikáció fejlesztés, weboldal készítés, SEO, Online marketing » https://petadev.com
vargalex
félisten
Igen, elég a setupba. Viszont kötelező, hiszen az inicializálál.
Alex
choco01
addikt
Igen, így el sem indul..
Megpróbálom másik libekkel..
szerk.: Azt te megtudtad oldani hogy ne 80-as porton menjen?
[ Szerkesztve ]
Applikáció fejlesztés, weboldal készítés, SEO, Online marketing » https://petadev.com
_q
addikt
Próbáld meg ezeket a setup-ba tenni:
bme.begin();
bme.init();
_q
addikt
Adafruit_BME280.h-ban írd át a címét a szenzornak 0x76-ra. 0x77-en van és ezért elvileg nem tud kommunikálni. 77 SPI esetén, 76 I2C esetén használatos. Adafruit mintakód SPI-ra van így a header fájlban is ezért szerepel 77-es cím. Ettől függetlenül a bme.begin() kelleni fog az inicializálás miatt.
[ Szerkesztve ]
choco01
addikt
Na most letöltöttem egy másikat a ami direkt esp32 és i2c és abban már át van írva alapból így már megy!
Elvileg mennie kéne mellette a webservernek is?Itt elindul kiírja serialra az IP-t de csak tölti az oldalt nem jön be..meg így mellette a kijelző sem frissül mint ha megakadna a net függvény..
8266-on ment simán, itt valamiért nem akar pedig lefutni lefut ez a kód:
void net()
{
WiFi.enableSTA(true);
delay(2000);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
delay(300);
server.begin();
Serial.println ( "HTTP server started" );
WiFiClient client;
client.println( "<!DOCTYPE html>");
client.println( "<html>");
client.println( "<head><META HTTP-EQUIV=\"refresh\" CONTENT=\"15\"></head>");
client.println( "<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\" />");
client.println( "<body>");
client.println("<br><br>");
client.println("<body><h1>Időjárás adatok:</h1>");
client.println("<table border=\"2\" width=\"456\" cellpadding=\"10\"><tbody><tr><td>");
client.print("</td><td colspan=\"2\"><h2>Hőmérséklet = ");
client.println(hom);
client.print("<h2>Páratartalom = ");
client.println(pt);
client.print("%</h2></td></tr><tr>");
client.print("<h2>Harmatpont = ");
client.println(hp);
client.print("°C</h2></td>");
client.print(" <h2>Légnyomás = ");
client.println(lny);
client.print("hPa</h2></td></tr><tr>");
client.println("</h3>");
client.print("<br>");
client.print("</body>");
client.print("</html>");
delay(100);
client.stop();
Serial.println("Lecsatlakoztatva.");
}
[ Szerkesztve ]
Applikáció fejlesztés, weboldal készítés, SEO, Online marketing » https://petadev.com
_q
addikt
Szerinetm a wifi inicializálás és weboldal kiíatás nem egy helyen kellene legyen. Mert így minden egyes net függvény hívásnál ismét csatlakozik wifire, inicializál stb. Nem mondom, hogy ez a hiba, de elsőre ezt vettem észre.
Plusz egy ilyen is hiányzik szerintem a WiFiClient client után:WiFiClient client = server.available(); // listen for incoming clients
Meg egy ilyen:
while (client.connected()) { // loop while the client's connected
if (client.available()) { // if there's bytes to read from the client,
Tehát a net függvényt így kellene kezdeni szerinetm:
WiFiClient client = server.available(); // listen for incoming clients
while (client.connected()) { // loop while the client's connected
if (client.available()) { // if there's bytes to read from the client,
[ Szerkesztve ]
choco01
addikt
Most szétszedtem kettő fv-re, de most meg erre dob hibát:
WiFiClient client = server.available();
'class WebServer' has no member named 'available' hibával..
Applikáció fejlesztés, weboldal készítés, SEO, Online marketing » https://petadev.com
_q
addikt
Wifi.h a kód elején hozzá van adva?
choco01
addikt
Igen, bár az még 8266os projekthez volt letöltve, az számít?
Applikáció fejlesztés, weboldal készítés, SEO, Online marketing » https://petadev.com
_q
addikt
Igen, mert az a 8266-os wifi-jét használja, ESP32nek sima Wifi.h fájl kell az tartalamzza a wifihez szükséges függvényeket. Lehet a legtöbb ugyan azt csinálja, de a függvények neve máshogy van elnevezve.
[ Szerkesztve ]
choco01
addikt
Most ilyen: De ugye hibát dob annál a sornál..
Lehet a WebServer server ( 80 );-vel van baj? WifiServer server(80) is létezik..
#include <ESP32WebServer.h>
#include <Wire.h>
#include "Adafruit_BME280.h"
#include "SSD1306.h"
#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
WebServer server ( 80 );
const char* ssid = "esp";
const char* password = "12345678";
#define I2C_SDA 21
#define I2C_SCL 22
#define SEALEVELPRESSURE_HPA (1013.25)
#define BME280_ADD 0x76
Adafruit_BME280 bme(I2C_SDA, I2C_SCL);
SSD1306 display(0x3c, 21, 22);
double pt,lny,hp,hom;
/*double lny=1015.20;
double hp=-32.12;
double hom=-32.12;
double pt=62.07;*/
void idojaras(void);
void kijelzo(void);
void html(void);
void setup() {
Serial.begin(115200);
Serial.println("Program Start");
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
bme.begin();
idojaras();
delay(100);
kijelzo();
delay(100);
}
void loop()
{
idojaras();
delay(1000);
kijelzo();
delay(1000);
html();
delay(100);
}
void idojaras()
{
pt = bme.readHumidity();
hom = bme.readTemperature();
hp = hom - 0.36 * (100.0 - pt);
lny = bme.readPressure() / 100.0F ;
lny=lny+13;
delay(1000);
}
void kijelzo()
{
display.init();
display.drawString(0, 0, "Hömérséklet:");
display.drawString(62, 0,String(hom) );
display.drawString(90, 0, " °C");
display.drawString(0, 10, "Páratartalom:");
display.drawString(65, 10, String(pt));
display.drawString(90, 10, " %");
display.drawString(0, 20, "Harmatpont:");
display.drawString(62, 20, String(hp));
display.drawString(90, 20, " °C");
display.drawString(0, 30, "Légnyomás:");
display.drawString(60, 30, String(lny));
display.drawString(98, 30, " hPa");
display.drawString(0, 40, "Légszenny.:");
display.drawString(60, 40, "nA");
display.drawString(85, 40, " %");
display.drawString(0, 50, "UV sugárzás:");
display.drawString(65, 50, "nA");
display.display();
}
void html()
{
WiFiClient client = server.available();
while (client.connected())
{
if (client.available())
{
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE HTML><html><head>");
client.println("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"></head>");
client.println("<h1>ESP32 - Web Server</h1>");
client.println("</html>");
break;
client.println( "<body>");
client.println("<br><br>");
client.println("<body><h1>Időjárás adatok:</h1>");
client.println("<table border=\"2\" width=\"456\" cellpadding=\"10\"><tbody><tr><td>");
client.print("</td><td colspan=\"2\"><h2>Hőmérséklet = ");
client.println(hom);
client.print("<h2>Páratartalom = ");
client.println(pt);
client.print("%</h2></td></tr><tr>");
client.print("<h2>Harmatpont = ");
client.println(hp);
client.print("°C</h2></td>");
client.print(" <h2>Légnyomás = ");
client.println(lny);
client.print("hPa</h2></td></tr><tr>");
client.println("</h3>");
client.print("<br>");
client.print("</body>");
client.print("</html>");
delay(10);
client.stop();
Serial.println("client disconnected");
}
}
}
[ Szerkesztve ]
Applikáció fejlesztés, weboldal készítés, SEO, Online marketing » https://petadev.com
_q
addikt
Ha minden igaz ez a mintakód neked is meg van, az esp32-vel települ fel. Itt csak a wifi.h kell. Webserver, Webclient nem. Nem tudom ezek mennyire "official" fájlok, de próbáld meg csak a wifi.h-t használni többi wifi-s header fájlt kommentezd ki, lehet másikban is van hasonló és bezavar.
WebServer server ( 80 );
Ezt pedig ne így nevezd el hanem: WiFiServer server(80);
[ Szerkesztve ]
choco01
addikt
Na igen így most lefut, köszi, de nem érem el és a kijelző frissítést is lefagy..ha meg kihúzom akkor el sem indul újra a kijelző.. szóval megáll valahol az egész
Applikáció fejlesztés, weboldal készítés, SEO, Online marketing » https://petadev.com
_q
addikt
Be kellene pár serial monitorozást tenni a kódba, ahol úgy gondolom megáll a kód, így lehetne debugolni. Illetve megnézni, hogy először is ki tudsz-e olvasni a szenzorból, utána ki tudsz-e íratni a kijelzőre fix-en számokat, utána a kettőt egybe, ezután a wifi rész. Ha minden egybe van úgy a legnehezebb. Ha külön megy és egybe nem akkor megint csak serial monitorozni kell.
choco01
addikt
Szerintem is elölről kezdem ezt a webserver dolgot mert minden más flottul megy már az UV kiolvasas is a VEML6070 szenzorbol meg ki is irja a kijelzore..
Nem tudod véletlen hogy ez amit kiir az UV szenzor érték miben értendő mert most az udvaron ilyen 180as értéket ír ki és ugye én 1-11 ig szeretném látni az UV indexet majd ha süt a nap.. Erre alkalmas lehet?
[ Szerkesztve ]
Applikáció fejlesztés, weboldal készítés, SEO, Online marketing » https://petadev.com
_q
addikt
Igen az a leginkább célravezető, hogy külön próbálgatni, így nem akad össze más szoftver modullal és ha úgy megy akkor összeilleszthető a többivel.
Adafruit könyvtárat használod az UV szenzorhoz?
choco01
addikt
Igen az volt eddig mindig a leg eredményre vezetőbb..
Igen azt töltöttem le,csak ugye sokkal magasabb értékeket ad ki, amikor kisütött a nap akkor ilyen 670 körüli értéket adott vissza..
Applikáció fejlesztés, weboldal készítés, SEO, Online marketing » https://petadev.com
_q
addikt
Ha minden igaz az UV fény intenzitását adja vissza. Ebből kellene neked UV indexet számolni, adatlap valamiért erre nem ad képletet.
choco01
addikt
Igen én is így értelmeztem ebből: solar UV light intensity de sehol sem találtam eddig UV index képletet..
Túl sokan nem csináltak ezzel projketet meg aki csinált is annál sem látom az átváltást hogy mi alapján cisnálta..
Egy másik fajta szenzornál így cisnálták:
String readSensor()
{
String UVIndex = "0";
int sensorValue = 0;
sensorValue = analogRead(0); //connect UV sensor to Analog 0
int voltage = (sensorValue * (5.0 / 1023.0))*1000; //Voltage in miliVolts
if(voltage<50)
{
UVIndex = "0";
}else if (voltage>50 && voltage<=227)
{
UVIndex = "0";
}else if (voltage>227 && voltage<=318)
{
UVIndex = "1";
}
else if (voltage>318 && voltage<=408)
{
UVIndex = "2";
}else if (voltage>408 && voltage<=503)
{
UVIndex = "3";
}
[ Szerkesztve ]
Applikáció fejlesztés, weboldal készítés, SEO, Online marketing » https://petadev.com
choco01
addikt
Ez a dokksi beszél róla, de most azt sem tudom hogy ezen melyik kivitel van a 270K-s szerintem de ott a 1 vagy 2 vagy 4T mit takar?
Applikáció fejlesztés, weboldal készítés, SEO, Online marketing » https://petadev.com
lappy
őstag
Segítséget szeretnék kérni tőletek!
egy 5x7 led matrixot szeretnék feléleszteni
találtam hozzá működő kódot de valahogy nem megy!
valószínű az <EEPROM.h> hiányzik és sajnos nem tudom hogy oda mi kellene bele?
esetleg épített már vki hasonló led mátrixot?
Bámulatos hol tart már a tudomány!
Sokimm
senior tag
Sziasztok!
Elakadtam, és szeretném kikérni a véleményeteket.
Arduino 1.8.5-el egy NodeMCU-t val játszok, és próbálom külső header file-okra osztani a feladatot (csupán a móka kedvéért), és ha visszatérő érték nélküli utasítást írok, szépen lefut osztály szerű szerkezettel, de ha szeretnék visszatérő értéket is (void nélkül), akkor nem jó.
cpp file tartalma:SZAMOL::osszeadas2 (int A, int B) {
//ha az összeadas2 elé beteszem az int-et, akkor meg
//expected unqualified-id before 'int' hibaüzenetet kapok
//ha nem teszem be, akkor meg:
//ISO C++ forbids declaration of 'osszeadas2' with no type [-fpermissive]
int C = A + B;
return C;
}
h file tartalma:class SZAMOL {
int A;
int B;
public:
int osszeadas2 (int A, int B);
// int szorzas_pivel ();
};
A main-be így hívom meg a dolgokat:SZAMOL osszeadas2;//példányosítás?
int A, B;
A = 1;
B = 2;
Serial.print(osszeadas2.osszeadas2(A, B));//végrehajtás
Amúgy innen lopom a sorokat, és nem értem mi a gond: (első hasznos válaszban a példa kód)
[link]
Ha hülyeség a kérdés, jelezzétek mivel pótoljam az információkat, ha kevés az infó, bátran jelezzétek, mindennemű segítséget előre is köszönök!
[ Szerkesztve ]
Tankblock
aktív tag
Hello,
ez c++ kérdés.
valami.h:
#ifndef VALAMI_H_
#define VALAM_H_
class SZAMOL {
private:
int A;
int B;
public:
SZAMOL(int A, int B);
int osszeadas2 (int C, int D);
};
Akkor lássunk a .cpp filet:
#include "valami.h"
SZAMOL(int A, int B){
this->A = A;
this->B = B;
}
int SZAMOL::osszeadas2(int C, int D) {
return C+D;
}
SZAMOL szamol(3,4);
void main()
{
int A, B;
A = 1;
B = 2;
Serial.print(szamol.osszeadas2(A, B));
}
Ha nem rontottam el....
Release the Beast....
Sokimm
senior tag
Köszönöm a válaszod! Vissza kérdeznék, kommentelek, és kérlek javíts ki ahol tévedek, vagy nem értek valamit!
valami.h:
#ifndef VALAMI_H_
#define VALAM_H_
class SZAMOL {
private:
int A;
int B;
public:
SZAMOL(int A, int B); //ez a SZAMOL osztály két input tagja, amit nem lehetne feltenni a
//class SZAMOL (int A, int B) { mögé?
int osszeadas2 (int C, int D);
//ez a SZAMOL osztály egyik metódusa, ami osszadas2 néven fut, és kér két változót?
};
Akkor lássunk a .cpp filet:#include "valami.h"
SZAMOL(int A, int B){
this->A = A; //ezt a this részt nem értem, hogy mit csinál
this->B = B; // és sajnos az angol forrásokból sem jövök rá az értelmére :(
}
int SZAMOL::osszeadas2(int C, int D) { // a SZAMOL osztály osszeadas2 metódusának a valós működését leírjuk itt
return C+D;
}
SZAMOL szamol(3,4); //majd adunk neki valami input értéket... (ez már a loop előtti setup részbe tartozik nem (Arduino strukturára épülve)?)
//Ez itt a példányosítás? A bemenő inputok (3,4) változnak a main alatt futtatott A és B paraméter értékadása miatt?
void main()
{
int A, B;
A = 1;
B = 2;
Serial.print(szamol.osszeadas2(A, B));
//A szamol példányon lefuttatjuk az osszeadas2 metódust, az A és B input értékekkel, amit átadunk az osszeadas2 metódusnak, ami (C+D érték végeredményeként kiköpi a megoldást?)
}
[ Szerkesztve ]
Janos250
őstag
Kutyafuttában pár megjegyzés:
1.Ne az osszeadas2 elé, hanem a SZAMOL elé tedd!
2.
A hibatkozott példád:
class A2DD
{
int gx;
int gy;
public:
A2DD(int x,int y);
int getSum();
};
Tehát KELL lenni egy public:
"A2DD(int x,int y);" -nek, azaz az osztály nevével megegyezően (konstruktor a neve)
a getSum()-nak nincs paramétere, mert a példányosításnál megadod.
"osszeadas2.osszeadas2(A, B)"
nagyon szerencsétlen a példánynak ugyanazt a nevet adni, amit egy tagfüggvénynek. Adj neki más nevet!
Közben látom, újabb is van:
- "nem lehetne feltenni a
//class SZAMOL (int A, int B) { mögé?"
Nem!
- vagy az osszeadsnak legyen paramétere, vagy a szamolnak. Mindkettőnek: konfúz!
- " this->A = A; //ezt a this részt nem értem, hogy mit csinál
this->B = B; /"
Egyelőre ne is használd, szerintem (tudod, pap, papné)
Helyi változónak lehetőleg ne legyen az a neve, ami a paraméternek!
Többit legközelebb, mert most rohanok.
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
Tankblock
aktív tag
Hello,
Csak az eredeti példádat szerettem volna szabvány szerűvé tenni.
Nem szükséges az A, B változó az osztályba, ekkor a példányosításnál sem szükséges a 2 érték adás.
A this-> a változó nevet oldja fel az osztály és a bemeneti paraméter között.
Ha jól selytem az eredeti példád ott volt elrontva, hogy a .h file nem volt includeolva.
Tutorial amit eddig sohasem hagyott cserben/tölgyben: [link]
Release the Beast....
A linkelt oldalon jött szembe az első példa:class class_name {
access_specifier_1:
member1;
access_specifier_2:
member2;
...
} object_names;
Mi a fene az az "object_names" a végén?
Tankblock
aktív tag
Hello,
object_names is an optional list of names for objects of this class.
Ez egy opcionális lista amit a forditó a fordítási időben létrehoz mint példányt.
Keresnem kellene egy magyar forrást, az telefonról nehéz lesz.
Release the Beast....
Az eredeti szövegben a "fordítási időben" nem szerepelt, ezért nem értettem. És mitől jobb ez, mint futásidőben létrehozni? Gyorsít?
Tankblock
aktív tag
Hello
Ha a
MyFancyClass s(3,5);
ként deklarálod azt is forítási időben csinálja a fordító pl a memória foglalást.
Futásidőben fogja memóriát foglalni:
MyFancyClass s = new MyFancyClass (3,5);
// itt fogod a művelelteket végezni
delete s; // törlés
Upsz kimaradt: Memória foglalás lassú és ha már elfogyott akkor a new vége NULL lesz.
Másra való. Nézz utána a tervezési sémáknak. PL egy Singletont kifejezetten csak 1 szer kell h létrejöjjön.
Pl ha adatfolyam csak időszakosan jön és nem szeretnéd mindig a memóriában tárolni a teljes structúrát akkor lehet a new - delete párossal játszani uControllereknél.
[ Szerkesztve ]
Release the Beast....
Mai Hardverapró hirdetések
prémium kategóriában
- EDIFIER R1700BTS hangfal pár makulátlan, új állapotban, 2 év hivatalos garanciával, alkalmi áron
- LG OLED55B23LA 2 Év GYÁRI GARANCIA
- Apple iPhone XR 128GB, Kártyafüggetlen, 1 Év Garanciával
- Gamer PC , i7 12700KF , RTX 3080 Ti , 64GB DDR5 , 960GB NVME , 1TB HDD
- Intel PC , i5 8500 , 1660 6GB , 32GB DDR4 , 512GB NVME , 500GB HDD