Hirdetés

2024. május 5., vasárnap

Gyorskeresés

Téma összefoglaló

Téma összefoglaló

  • Utoljára frissítve: 2023-03-11 00:46:52

LOGOUT.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.

Összefoglaló kinyitása ▼

Hozzászólások

(#8651) Tankblock válasza RAiN91 (#8649) üzenetére


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....

(#8652) RAiN91 válasza Tankblock (#8651) üzenetére


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?

(#8653) // Chaka // válasza RAiN91 (#8652) üzenetére


// 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é.

(#8654) Aryes válasza RAiN91 (#8652) üzenetére


Aryes
nagyúr

Ragassz pár szervó motort a készülékházra és azzal nyomasd meg a gombokat. :DDD

(#8655) _q válasza // Chaka // (#8653) üzenetére


_q
addikt

Miért kell optocsatoló? Miért nem lehet direktbe rákötni a nyomógombot?

(#8656) Janos250 válasza Tankblock (#8650) üzenetére


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.

(#8657) // Chaka // válasza _q (#8655) üzenetére


// Chaka //
tag

Öööö, izé, nem vezérelni kell a telefont? Pl. felhívni egy előre elmentett számot, vagy valami ilyesmi. Én erre gondoltam :U

Több ezer telefonszámot tudok fejből, csak azt nem tudom, hogy melyik kié.

(#8658) _q válasza // Chaka // (#8657) üzenetére


_q
addikt

Lehet én értettem félre akkor.

(#8659) choco01


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.. :F

Applikáció fejlesztés, weboldal készítés, SEO, Online marketing » https://petadev.com

(#8660) MineFox54


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 ]

(#8661) Janos250 válasza MineFox54 (#8660) üzenetére


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.

(#8662) MineFox54 válasza Janos250 (#8661) üzenetére


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? :D

[ Szerkesztve ]

(#8663) Janos250 válasza MineFox54 (#8662) üzenetére


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.

(#8664) _q válasza choco01 (#8659) üzenetére


_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.

(#8665) choco01 válasza _q (#8664) üzenetére


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

(#8666) vargalex válasza choco01 (#8665) üzenetére


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

(#8667) _q válasza choco01 (#8665) üzenetére


_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 ]

(#8668) choco01 válasza _q (#8667) üzenetére


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

(#8669) vargalex válasza choco01 (#8668) üzenetére


vargalex
félisten

Szia!

Szerintem csak egy

bme.begin()

hiányzik.

Alex

(#8670) choco01 válasza vargalex (#8669) üzenetére


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

(#8671) vargalex válasza choco01 (#8670) üzenetére


vargalex
félisten

Igen, elég a setupba. Viszont kötelező, hiszen az inicializálál.

Alex

(#8672) choco01 válasza vargalex (#8671) üzenetére


choco01
addikt

Igen, így el sem indul.. :(((

Megpróbálom másik libekkel.. :U

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

(#8673) _q válasza choco01 (#8670) üzenetére


_q
addikt

Próbáld meg ezeket a setup-ba tenni:

bme.begin();
bme.init();

(#8674) _q válasza choco01 (#8670) üzenetére


_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 ]

(#8675) choco01 válasza _q (#8674) üzenetére


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! :C :R

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

(#8676) _q válasza choco01 (#8675) üzenetére


_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 ]

(#8677) choco01 válasza _q (#8676) üzenetére


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.. :U

Applikáció fejlesztés, weboldal készítés, SEO, Online marketing » https://petadev.com

(#8678) _q válasza choco01 (#8677) üzenetére


_q
addikt

Wifi.h a kód elején hozzá van adva?

(#8679) choco01 válasza _q (#8678) üzenetére


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

(#8680) _q válasza choco01 (#8679) üzenetére


_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 ]

(#8681) choco01 válasza choco01 (#8679) üzenetére


choco01
addikt

Most ilyen: De ugye hibát dob annál a sornál.. :F

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

(#8682) _q válasza choco01 (#8681) üzenetére


_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 ]

(#8683) choco01 válasza _q (#8682) üzenetére


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ő.. :F szóval megáll valahol az egész

Applikáció fejlesztés, weboldal készítés, SEO, Online marketing » https://petadev.com

(#8684) _q válasza choco01 (#8683) üzenetére


_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.

(#8685) choco01 válasza _q (#8684) üzenetére


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

(#8686) _q válasza choco01 (#8685) üzenetére


_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?

(#8687) choco01 válasza _q (#8686) üzenetére


choco01
addikt

Igen az volt eddig mindig a leg eredményre vezetőbb.. :DD

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.. :F

Applikáció fejlesztés, weboldal készítés, SEO, Online marketing » https://petadev.com

(#8688) _q válasza choco01 (#8687) üzenetére


_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.

(#8689) choco01 válasza _q (#8688) üzenetére


choco01
addikt

Igen én is így értelmeztem ebből: solar UV light intensity de sehol sem találtam eddig UV index képletet.. :F

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

(#8690) choco01 válasza choco01 (#8689) üzenetére


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

(#8691) lappy


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!

(#8692) Sokimm


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 ]

(#8693) Tankblock válasza Sokimm (#8692) üzenetére


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....

(#8694) Sokimm válasza Tankblock (#8693) üzenetére


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 ]

(#8695) Janos250 válasza Sokimm (#8692) üzenetére


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.

(#8696) Tankblock válasza Sokimm (#8694) üzenetére


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....

(#8697) Aryes válasza Tankblock (#8696) üzenetére


Aryes
nagyúr

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?

(#8698) Tankblock válasza Aryes (#8697) üzenetére


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....

(#8699) Aryes válasza Tankblock (#8698) üzenetére


Aryes
nagyúr

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?

(#8700) Tankblock válasza Aryes (#8699) üzenetére


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....

Copyright © 2000-2024 PROHARDVER Informatikai Kft.