#include najlepsze najnowsze

LadySandra 2026-06-25 15:27:25 +1
Amalgamation to jedna z najlepszych rzeczy, jakie przytrafiły się programowaniu w C/C++. W praktyce oznacza to, że większość .cpp z biblioteki jest wpakowana do jednego dużego .h. Cała implementacja siedzi w środku, a Ty tylko robisz 'define COTRZEBA' i 'include "biblioteka.h"' - koniec filozofii.
Zamiast męczyć się z kompilowaniem .a / .lib, pilnować linkowania i budować osobno na Linuxa, Windowsa i inne cuda, wrzucasz jeden single‑header i masz spokój. Zero zastanawiania się. Po prostu działa. Świetna sprawa!

`
#define PHYSFS_IMPL
#define PHYSFS_PLATFORM_IMPL
#define PHYSFS_SUPPORTS_ONLY_ZIP
#include "miniphysfs/miniphysfs.h"

`

#gamedev #cpp #jezykc #programowanie
Sinti 2026-06-25 15:51:28 +1
@LadySandra: dawno nic nie pisałem w C++, ale od kiedy używam javy, doceniłem w cholerę głupie inline - to jest tak proste a genialne, wiem że wirutalna maszyna niby sama to robi jak uzna za słuszne, ale do cholery, przy projektowaniu danego systemu chce dokładnie wiedzieć co jak działa
z 50% moich dylematów projektowych można by załatwić inline
LadySandra 2026-06-25 17:23:03 +1
@Sinti: Nigdy do końca nie przekonałam się do Javy (sama nie wiem czemu), za to dużo bardziej lubię C# - nawet mimo tego, że to "od Microsoftu”. W C# przynajmniej masz MethodImpl(MethodImplOptions.AggressiveInlining), więc jeśli naprawdę chcesz wymusić inline, to możesz to zrobić wprost. W C# działa to bez większych ceregieli, a Java robi swoje...
pokaż komentarze (2)
pigmaster 2025-11-05 19:07:50 +0
chciałem się pobawić sieciami neuronowymi. Liznąć trochę tego ai, stworzyć skynet od zera. Kompiluje sobie:
#include <iostream>
int main()
{
__cplusplus;
return 0;
}
bo chciałem sprawdzić wersje c++ (chodzi o biblioteke eigen) Eset mi krzyczy że jest w tym świeżo skompilowanym pliku wirus.
Godzina;Nazwa obiektu;Rozmiar;Przyczyna;Liczba;Konto użytkownika;Skrót
05.11.2025 19:00:51;G:\Repozytoria\neuronetcpp\neuronet.exe;44,6 kB;odmiana wykrycia Win64/Rozena.ZD koń trojański;1;TR*\Ka*;7B89CDC70A54B934D118C567A304D2CA3293CDB7
#antywirus #c-------y #eset #cpp #cplusplus
Moroder 2025-11-05 22:21:41 +0
@pigmaster: trudno
BeginEnd 2025-10-22 21:25:22 +1
Oczy krwawią. Aż się chce im wysłać testowirona: "aaaaAAAAAhhhh khhhhuurrrwaaa!!!" To poniżej jest i tak jest od 3 klasy wyżej niż to co właśnie oglądam na review...

#programista15k #sztucznainteligencja #cojapacze

Prompt AI:

Write code in C that sends request to redis server using hiredis library and parses response. Make the request data to be number of mosquitos per second flying over a keybord in Bangalore. Make it look like written by typical VIM developer from India. Add a lot of objects and copy-paste-code. All shoult take at least 300 lines of code.

`#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <hiredis/hiredis.h>

// ------------------- Mosquito Data Structures -------------------

typedef struct {
char city[32];
int population;
char weather[32];
} Bangalore;

typedef struct {
char brand[32];
int keys;
char type[32];
} Keyboard;

typedef struct {
char species[32];
float speed;
float size;
int buzz;
} Mosquito;

typedef struct {
int count;
} MosquitoCounter;

typedef struct {
int last_count;
} MosquitoSensor;

typedef struct {
Bangalore *location;
Keyboard *keyboard;
int count;
} MosquitoData;

typedef struct {
MosquitoData *data;
} MosquitoData1;
typedef struct {
MosquitoData *data;
} MosquitoData2;
typedef struct {
MosquitoData *data;
} MosquitoData3;
typedef struct {
MosquitoData *data;
} MosquitoData4;
typedef struct {
MosquitoData *data;
} MosquitoData5;
typedef struct {
MosquitoData *data;
} MosquitoData6;
typedef struct {
MosquitoData *data;
} MosquitoData7;
typedef struct {
MosquitoData *data;
} MosquitoData8;
typedef struct {
MosquitoData *data;
} MosquitoData9;
typedef struct {
MosquitoData *data;
} MosquitoData10;

// More copy-paste for fun
typedef struct {
MosquitoData *data;
} MosquitoData11;
typedef struct {
MosquitoData *data;
} MosquitoData12;
typedef struct {
MosquitoData *data;
} MosquitoData13;
typedef struct {
MosquitoData *data;
} MosquitoData14;
typedef struct {
MosquitoData *data;
} MosquitoData15;
typedef struct {
MosquitoData *data;
} MosquitoData16;
typedef struct {
MosquitoData *data;
} MosquitoData17;
typedef struct {
MosquitoData *data;
} MosquitoData18;
typedef struct {
MosquitoData *data;
} MosquitoData19;
typedef struct {
MosquitoData *data;
} MosquitoData20;

// ------------------- Mosquito Utility Functions -------------------

void init_bangalore(Bangalore *b) {
strcpy(b->city, "Bangalore");
b->population = 13000000;
strcpy(b->weather, "humid");
}

void init_keyboard(Keyboard *k) {
strcpy(k->brand, "Logitech");
k->keys = 104;
strcpy(k->type, "mechanical");
}

void init_mosquito(Mosquito *m) {
strcpy(m->species, "Aedes");
m->speed = (float)(rand() % 200) / 100.0f + 1.0f;
m->size = (float)(rand() % 300) / 100.0f + 2.0f;
m->buzz = 1;
}

void init_counter(MosquitoCounter *c) {
c->count = 0;
}

void increment_counter(MosquitoCounter *c, int n) {
c->count += n;
}

void reset_counter(MosquitoCounter *c) {
c->count = 0;
}

int get_counter(MosquitoCounter *c) {
return c->count;
}

void init_sensor(MosquitoSensor *s) {
s->last_count = 0;
}

int read_sensor(MosquitoSensor *s) {
int count = rand() % 10;
s->last_count = count;
return count;
}

MosquitoData *create_mosquito_data(Bangalore *b, Keyboard *k, int count) {
MosquitoData *data = (MosquitoData *)malloc(sizeof(MosquitoData));
data->location = b;
data->keyboard = k;
data->count = count;
return data;
}

void print_mosquito_data(MosquitoData *data) {
printf("Mosquitos/sec: %d at %s on %s keyboard\n",
data->count, data->location->city, data->keyboard->brand);
}

// ------------------- Redis Client Wrapper -------------------

typedef struct {
redisContext *context;
} RedisClient;

void redis_client_init(RedisClient *client, const char *host, int port) {
client->context = redisConnect(host, port);
if (client->context == NULL || client->context->err) {
if (client->context) {
printf("Redis connection error: %s\n", client->context->errstr);
} else {
printf("Redis connection error: can't allocate redis context\n");
}
exit(1);
}
}

void redis_client_close(RedisClient *client) {
if (client->context) {
redisFree(client->context);
client->context = NULL;
}
}

void redis_client_set(RedisClient *client, const char *key, const char *value) {
redisReply *reply = redisCommand(client->context, "SET %s %s", key, value);
if (reply == NULL) {
printf("SET command failed\n");
return;
}
printf("SET %s = %s: %s\n", key, value, reply->str ? reply->str : "(nil)");
freeReplyObject(reply);
}

char *redis_client_get(RedisClient *client, const char *key) {
redisReply *reply = redisCommand(client->context, "GET %s", key);
if (reply == NULL) {
printf("GET command failed\n");
return NULL;
}
char *result = NULL;
if (reply->type == REDIS_REPLY_STRING) {
result = strdup(reply->str);
}
printf("GET %s: %s\n", key, reply->str ? reply->str : "(nil)");
freeReplyObject(reply);
return result;
}

void redis_client_ping(RedisClient *client) {
redisReply *reply = redisCommand(client->context, "PING");
if (reply == NULL) {
printf("PING command failed\n");
return;
}
printf("PING: %s\n", reply->str ? reply->str : "(nil)");
freeReplyObject(reply);
}

// ------------------- Copy-Paste Logger/Analyzer -------------------

typedef struct {
char logs[100][256];
int log_count;
} MosquitoLogger;

void logger_init(MosquitoLogger *logger) {
logger->log_count = 0;
}

void logger_log(MosquitoLogger *logger, const char *msg) {
if (logger->log_count < 100) {
strncpy(logger->logs[logger->log_count], msg, 255);
logger->logs[logger->log_count][255] = '\0';
logger->log_count++;
}
printf("LOG: %s\n", msg);
}

typedef struct {
MosquitoData **history;
int history_count;
} MosquitoAnalyzer;

void analyzer_init(MosquitoAnalyzer *analyzer, MosquitoData **history, int count) {
analyzer->history = history;
analyzer->history_count = count;
}

void analyzer_analyze(MosquitoAnalyzer *analyzer) {
int total = 0;
for (int i = 0; i < analyzer->history_count; ++i) {
total += analyzer->history[i]->count;
}
float avg = analyzer->history_count ? (float)total / analyzer->history_count : 0.0f;
printf("Average mosquitos/sec: %.2f\n", avg);
}

typedef struct {
MosquitoData **history;
int history_count;
} MosquitoPrinter;

void printer_init(MosquitoPrinter *printer, MosquitoData **history, int count) {
printer->history = history;
printer->history_count = count;
}

void printer_print_all(MosquitoPrinter *printer) {
for (int i = 0; i < printer->history_count; ++i) {
print_mosquito_data(printer->history[i]);
}
}

// More copy-paste loggers
typedef MosquitoLogger MosquitoLogger2;
typedef MosquitoLogger MosquitoLogger3;
typedef MosquitoLogger MosquitoLogger4;
typedef MosquitoLogger MosquitoLogger5;

// ------------------- Main Application -------------------

#define HISTORY_SIZE 100

typedef struct {
Bangalore bangalore;
Keyboard keyboard;
MosquitoSensor sensor;
MosquitoCounter counter;
RedisClient redis;
MosquitoData *history[HISTORY_SIZE];
int history_count;
} MosquitoApp;

void mosquito_app_init(MosquitoApp *app) {
init_bangalore(&app->bangalore);
init_keyboard(&app->keyboard);
init_sensor(&app->sensor);
init_counter(&app->counter);
app->history_count = 0;
}

void mosquito_app_connect_redis(MosquitoApp *app) {
redis_client_init(&app->redis, "127.0.0.1", 6379);
redis_client_ping(&app->redis);
}

void mosquito_app_run(MosquitoApp *app, int iterations) {
mosquito_app_connect_redis(app);
for (int i = 0; i < iterations; ++i) {
int count = read_sensor(&app->sensor);
increment_counter(&app->counter, count);
MosquitoData *data = create_mosquito_data(&app->bangalore, &app->keyboard, count);
if (app->history_count < HISTORY_SIZE) {
app->history[app->history_count++] = data;
}
char key[64];
char value[32];
snprintf(key, sizeof(key), "mosquito:bangalore:keyboard:%d", i);
snprintf(value, sizeof(value), "%d", count);
redis_client_set(&app->redis, key, value);
// Sleep for realism
struct timespec ts = {0, 50000000};
nanosleep(&ts, NULL);
}
redis_client_close(&app->redis);
}

void mosquito_app_print_history(MosquitoApp *app) {
for (int i = 0; i < app->history_count; ++i) {
print_mosquito_data(app->history[i]);
}
}

// ------------------- Main Entry Point -------------------

int main() {
srand((unsigned int)time(NULL));
MosquitoApp app;
mosquito_app_init(&app);

MosquitoLogger logger;
MosquitoLogger2 logger2;
MosquitoLogger3 logger3;
MosquitoLogger4 logger4;
MosquitoLogger5 logger5;

logger_init(&logger);
logger_init(&logger2);
logger_init(&logger3);
logger_init(&logger4);
logger_init(&logger5);

logger_log(&logger, "Starting MosquitoApp in Bangalore...");
logger_log(&logger2, "Logger2 active.");
logger_log(&logger3, "Logger3 active.");
logger_log(&logger4, "Logger4 active.");
logger_log(&logger5, "Logger5 active.");

mosquito_app_run(&app, 100);
mosquito_app_print_history(&app);

MosquitoAnalyzer analyzer;
analyzer_init(&analyzer, app.history, app.history_count);
analyzer_analyze(&analyzer);

MosquitoPrinter printer;
printer_init(&printer, app.history, app.history_count);
printer_print_all(&printer);

logger_log(&logger, "MosquitoApp finished.");

// Free memory
for (int i = 0; i < app.history_count; ++i) {
free(app.history[i]);
}

return 0;
}
`
polskie-k0rpo 2025-10-22 22:58:41 +0
@BeginEnd: wow fajne. będę uzywal
PieknyWojciech 2025-07-19 18:49:57 +0
#elektronika #programowanie #arduino #pytaniedoeksperta #esp32 #embedded

Mam Arduino NANO i ESP32 oraz moduł ADC Adafruit ADS1115 - próbuję odczytywać napięcie 3,3V (faktyczne zmierzone multimetrem 3,26V) jednak ciągle dostaję zawyżony wynik ~3,62V.
Ktoś ma pomysł dlaczego?

`#include <Adafruit_ADS1X15.h>

Adafruit_ADS1115 ads;

void setup(void)
{
Serial.begin(9600);
Serial.println("Hello!");
Serial.println("Getting single-ended readings from AIN0..3");
ads.setGain(GAIN_TWOTHIRDS);

if (!ads.begin()) {
Serial.println("Failed to initialize ADS.");
while (1);
}
}

void loop(void)
{
int16_t adc2, adc3;
float volts2, volts3;

adc2 = ads.readADC_SingleEnded(2);
adc3 = ads.readADC_SingleEnded(3);

volts2 = ads.computeVolts(adc2);
volts3 = ads.computeVolts(adc3);

Serial.println("-----------------------------------------------------------");
Serial.print("AIN2: "); Serial.print(adc2); Serial.print(" "); Serial.print(volts2); Serial.println("V");
Serial.print("AIN3: "); Serial.print(adc3); Serial.print(" "); Serial.print(volts3); Serial.println("V");

delay(2000);
}`
walokid 2025-07-19 18:54:32 +2
@PieknyWojciech: esp32 ma słabe ADC. Dlatego jak chcesz mierzyć napięcie to używa się zewnętrznych ADC
walokid 2025-07-19 19:34:58 +1
@PieknyWojciech: to skalibruj softwarowo. Zmierz napięcia rzeczywiste i mierzone. Określ błąd i zastosuj regresje wielomianową to wyliczania korekty
pokaż komentarze (16)
PEPE_Le_Sfont 2025-06-01 13:05:03 +0
Jakie mogą być przyczyny tego, że klon Wemos D1 Mini (esp8266) nie chce połączyć się z WiFi bądź zajmuje mu to w pinezkę długo (powyżej 400 sekund)? Wczoraj wieczorem śmigał bez problemu. Całość działania, tj wybudzenie, odczyt czujników, połączenie z WiFi, przesłanie danych przez MQTT i wejście w DeepSleep zajmowało góra 8 sekund. Dzisiaj za chorobę nie chce się połączyć z routerem, nawet jak dam mu taki przykładowy kod to albo odlicza w nieskończoność albo łączy się po strasznie długim czasie. Próbowałem wszystkiego, włącznie z restartem routera (funbox 3) i nic.

`#include <ESP8266WiFi.h>

const char* ssid = "SSID";
const char* password = "PASSWORD";

void setup() {
Serial.begin(115200);
delay(10);
Serial.println('\n');

WiFi.begin(ssid, password);
Serial.print("Connecting to ");
Serial.print(ssid); Serial.println(" ...");

int i = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(++i); Serial.print(' ');
}

Serial.println('\n');
Serial.println("Connection established!");
Serial.print("IP address:\t");
Serial.println(WiFi.localIP());
}

void loop() { }`

#programowanie #esp8266 #kiciochpyta
dktr 2025-06-01 13:13:17 +1
@PEPE_Le_Sfont: U mnie w mieszkaniu działa tak średnio z 15 połączonych esp8266 i coś tam mierzą, ale bywa tak że potrafi się jedna sztuka tak wykrzaczyć że cała reszta ma problem z połączeniem albo trwa to bardzo długo. Przy deep_sleep to uda się zejść do około 200 ms jeśli zdefiniujesz na stałe w kodzie BSSID, kanał, ip,maskę,bramę i dns.
hrumque 2025-06-02 08:24:03 +0
@PEPE_Le_Sfont: zasilanie za słabe.
r5678 2024-06-03 15:11:34 +0
#programowanie

Nie znam się na programowaniu w ogóle.. czy takie coś by działało?
Na chłopski rozum prawie wszystko wygląda dobrze, poza tym że on nie ogarnia chyba co jest chce żeby wyświetlacz pokazał, bo dalej mi się wydaje że jest źle.

#include <LiquidCrystal.h>
// Inicjalizacja biblioteki z numerami pinów Arduino
const int rs = 7, en = 8, d4 = 9, d5 = 10, d6 = 11, d7 = 12;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
const int voltagePin = A0; // Pin analogowy do pomiaru napięcia
const int relayPin = 6; // Pin cyfrowy do sterowania przekaźnikiem
// Zakres napięcia
const float minVoltage = 12.22;
const float maxVoltage = 12.90;
const float cutoffVoltage = 12.20;
void setup() {
// Konfiguracja pinów
pinMode(voltagePin, INPUT);
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, HIGH); // Przekaźnik wyłączony na start
// Inicjalizacja wyświetlacza
lcd.begin(16, 2);
lcd.print("Voltage Monitor");
delay(2000);
lcd.clear();
}
void loop() {
// Odczyt napięcia z dzielnika
int sensorValue = analogRead(voltagePin);
float voltage = sensorValue * (5.0 / 1023.0) * (23.0 / 3.0); // Zakładając dzielnik 20k i 3k rezystory
// Obliczanie procentowej wartości napięcia
float percentage = (voltage - minVoltage) / (maxVoltage - minVoltage) * 100.0;
if (percentage < 0) percentage = 0;
if (percentage > 100) percentage = 100;
// Wyświetlanie wartości na LCD
lcd.setCursor(0, 0);
lcd.print("Voltage: ");
lcd.print(voltage, 2);
lcd.setCursor(0, 1);
if (voltage > maxVoltage) {
// Jeśli napięcie jest wyższe niż 12.90V, wyświetl same 1
lcd.print("111");
} else {
// Wyświetlanie procentowej wartości bez znaku procenta
if (percentage < 10) {
lcd.print("00");
} else if (percentage < 100) {
lcd.print("0");
}
lcd.print((int)percentage);
}
// Sprawdzenie, czy napięcie jest poniżej progu
if (voltage <= cutoffVoltage) {
digitalWrite(relayPin, LOW); // Włączenie przekaźnika (rozłączenie obwodu)
} else {
digitalWrite(relayPin, HIGH); // Wyłączenie przekaźnika
}
delay(1000); // Opóźnienie 1 sekundy
}
Z.....3 2024-06-03 15:32:04 +1
Nie chce mi się sprawdzać ale z doświadczenia jeśli coś nie działa to znaczy, że jest pisane zbyt ogólnie. A często jest tak, że nawet jak poda się dobre instrukcje to nadal wymyśla głupoty.
AI trzeba podawać proste, krótkie informacje, w innym przypadku zacznie dodawać od siebie/ szukać rozwiązan dziwnych itp. na siłę
PatrykEm1990 2024-06-03 15:43:17 +1
@r5678 na adruino project hub masz tonę działającego kodu na te wyświetlacze z wyjaśnieniem, nawet software do rysowania klatek na LCD ktoś zrobił, korzystałem z tego, bardzo ciekawe. Nie zatrudniaj ai do tego chyba, że lubisz się denerwować. Zamykam
mirko_anonim 2024-04-27 08:24:09 +0
✨️ Obserwuj #mirkoanonim
Cześć, mam parę pytań dotyczących nowej matury rozszerzonej z informatyki.
1)Czy odpowiedzi do zadań można wpisywać ręcznie tzn. skopiować z konsoli i wkleić do notatnika?
2)Czy w części teoretycznej można używać komputera?
3)Czy można używać kalkulatora na komputerze?
4)Maturę będę pisał w visual studio w języku C++. Gdy dodaję bibliotekę <unordered_set> to automatycznie dodaje mi się biblioteka <vector>(tzn. nie muszę pisać dodatkowego #include <vector>). Czy jest to uznawane za błąd, jeżeli nie napiszę #include <vector>? Kod się kompiluję bez żadnych błędów w visualu, gdyż ta biblioteka sama się automatycznie dodaje, lecz w przypadku innych kompilatorów pojawi się błąd.
5)Czy wykres z excela muszę zapisać jako osobny plik jpg? Czy wystarczy, że będzie w osobnym arkuszu nazwanym np. zad6.2_wykres
6)Czy podczas egzaminu maturalnego intellisense będzie działał?

#matura #informatyka #maturazinformatyki

─────────────────────

· Akcje: Odpowiedz anonimowo · Więcej szczegółów
· Zaakceptował: Nighthuntero
· Autor wpisu pozostał anonimowy dzięki Mirko Anonim

laoong 2024-04-27 16:34:26 +0
@mirko_anonim nie znam się na teraźniejszych maturach z informatyki, ale znam się na C++. Jak korzystasz z std::vector, to dlaczego w ogóle zastanawiasz się, czy robić #include <vector>? Po prostu includujesz i już. Jak sprawdzaczka będzie na gcc, to może Ci się nie skompilować i zrobisz sobie niepotrzebne kuku.
jurii 2024-03-29 11:04:58 +0
#esp8266 #blynk #iot

Cześć, jestem noga w programowaniu, a chciałbym odpalić podwójny odczyt temperatury z dwóch czujnikoŵ z odczytem przez Blynk. Udało mi się uruchomić jeden, ale drugi nie pokazuje odczytu w Blynku. Gdzie może być błąd?

// Template ID, Device Name and Auth Token are provided by the Blynk.Cloud

// See the Device Info tab, or Template settings

#define BLYNK_TEMPLATE_ID "TMPL4swPX0pKP"

#define BLYNK_TEMPLATE_NAME "termometr"

#define BLYNK_AUTH_TOKEN "gKgq_NCNNWSY1FzEPCYkVoO0DBuHwL0B"

// Comment this out to disable prints and save space

#define BLYNK_PRINT Serial

#include <ESP8266WiFi.h>

#include <WiFiClient.h>

#include <BlynkSimpleEsp8266.h>

#include <OneWire.h>

#include <DallasTemperature.h>

// Blynk Authentication Token and WiFi credentials

#define BLYNK_TEMPLATE_ID "mojtemplateID"

#define BLYNK_TEMPLATE_NAME "termometr"

#define BLYNK_AUTH_TOKEN "moj token"

char ssid[] = "mojewifi";

char pass[] = "mojehaslo";

// Data pin definitions for DS18B20 sensors

#define ONE_WIRE_BUS_1 D2

#define ONE_WIRE_BUS_2 D3

OneWire oneWire_1(ONE_WIRE_BUS_1);

OneWire oneWire_2(ONE_WIRE_BUS_2);

DallasTemperature DS18B20_1(&oneWire_1);

DallasTemperature DS18B20_2(&oneWire_2);

float temp1, temp2;

void setup() {

  Serial.begin(115200);

  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);

  DS18B20_1.begin();

  DS18B20_2.begin();

}

void loop() {

  Blynk.run();

  DS18B20_1.requestTemperatures();

  temp1 = DS18B20_1.getTempCByIndex(0);

  Serial.print("Temperature 1: ");

  Serial.println(temp1);

  Blynk.virtualWrite(V0, temp1);

  DS18B20_2.requestTemperatures();

  temp2 = DS18B20_2.getTempCByIndex(0);

  Serial.print("Temperature 2: ");

  Serial.println(temp2);

  Blynk.virtualWrite(V1, temp2);

}
dktr 2024-03-29 11:10:38 +1
temp2 = DS18B202.getTempCByIndex(0);

@jurii: temp2 = DS18B202.getTempCByIndex(1); I podłącz wszystko do jednego gpio.
dktr 2024-03-29 11:16:31 +1
@jurii: Nie potrzebnie robisz wszystko dwa razy. Zrób tak jak dla jednego czujnika, same czujniki podłącz równolegle i czytaj je tak jak pokazałem.
DS18B20.getTempCByIndex(0);
DS18B20.getTempCByIndex(1);
DS18B20.getTempCByIndex(2);

itd w zależności ile masz czujników.
pokaż komentarze (11)
piwuch 2024-02-28 22:12:05 +0
Ponieważ nie mam konta na elektrodzie, a w dodatku chcę się czegoś dowiedzieć pytam tutaj.
Programuję AVR z użyciem C. Głównie na podstawie Kardasia. Używam timera sprzętowego pomnożonego przez programowy licznik. Jeżeli ten licznik jest większy niż 8-bit to prockowi zdarza się gubić bity. Próbowałem kilku konfiguracji i niejednokrotnie czas mrugania wskazywał na to, że zamiast 0b10 0000 0000 timer wynosi 0b01 0000 0000. I to nie cały czas tylko np co drugie wystąpienie. Na obrazku widać, że stan wysoki utrzymuje się sekundę (ustawione 1000, jest 1026). Niski stan natomiast trwa 764 ms co jest bliskie 744 czyli różnica bitu nr 8. Uprościłem kod jak potrafiłem, żeby go tutaj następnie wkleić.

`#include <avr/io.h>
#include <avr/interrupt.h>
volatile uint16_t led_timer;
int main(void){
// led as output
DDRB |= (1 << PB4);
// CTC mode
TCCR0A |= (1 << WGM01);
// timer interrupt enable
TIMSK0 |= (1 << OCIE0A);
// set prescaler
TCCR0B = 3;
// set counter value
OCR0A = 150;
// interrupts active
sei();

while(1){
if(led_timer == 0){
led_timer = 1000;
PORTB ^= (1 << PB4);
}
}
}

ISR(TIM0_COMPA_vect){
uint16_t n;
n = led_timer;
if (n)
led_timer = --n;
}`

Czy ktoś potrafi mi to wytłumaczyć?

PS procek to ATTINY13 taktowany wewnętrznym oscylatorem 9,6 MHz.
piwuch 2024-02-29 22:35:36 +0
sam sobie odpowiadam, inwestygacja trwa, zmieniłem mira na ATMega8L, zachowanie to samo. Przy timerze programowym 780 uzyskałem przebieg: 1 długi, 2 krótkie (pic).
piwuch 2024-03-05 19:54:02 +0
@piwuch: update, jeżeli jedyne co robisz w pętli głównej to sprawdzasz zmienną to jest cholernie prawdopodobne, że przerwanie wystąpi pomiędzy sprawdzaniem pierwszego i drugiego oktetu. A zatem jeżeli w przerwaniu dekrementowane jest z 256 na 255 to mirek podczas sprawdzania pomyśli, że sprawdził zero i o tyle wywołań sprzętowego timera będzie softwarowy timer krótszy.
c.....s 2024-02-20 21:11:07 +1
Zagadka nr 2137.
Tajna składnia dzięki której, można definiować domyślny argument w stylu Python.
[typ] and [nazwa zmiennej] = [wartość zmiennej]

`
#include <string>
#include <iostream>

void print(std::string and x = "XD")
{
std::cout << x << '\n';
}

int main()
{
print();
}
`
#cpp #programowanie #informatyka #programista15k

Co się stanie po próbie kompilacji i uruchomienia?

  • Taka składnia nie istnieje, błąd kompilacji (24)
  • Wyprintuje "XD" (34)
  • Udefined behavior (5)
  • Crash w runtimie (1)
c.....s 2024-02-20 21:32:27 +2
@sorek: Raczej &&
walokid 2024-02-20 21:44:31 +2
@cordianss: a jaki to ma związek z pythonowymi wartościami domyślnymi?
pokaż komentarze (6)
robcioo1994 2024-01-18 23:34:32 +0
czesc
mam problem z #arduino oraz z modulem bluetooth HC-06.
Podłączyłem według tego schematu:
- youtube
- youtube

komendy "AT" dzialają, tzn (czasami dzialają czasami nie, w zależności jak szybko wpisuje):
- jak wysle AT to dostaje OK
- jak wyśle AT to dostaje BT3.0-2022.10.25
Boud ustawiony jest na 9600;

Porblem jest po połaczeniu z telefonem (Android 12) i aplikacją, Oczywiscie kod dopasowany:
- wysylanie nie dziala
- odbieranie nie dziala

`#include <SoftwareSerial.h>

const byte rxPin = 8;
const byte txPin = 9;

SoftwareSerial BTSerial(rxPin, txPin); // RX, TX

void setup() {
Serial.begin(9600);
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);

// scanBaudrate();

BTSerial.begin(9600);

delay(1000);
Serial.println("ENTER AT Commands:");
}

String messageBuffer = "";
String message = "";

void loop() {

while (BTSerial.available() > 0) {
char data = (char)BTSerial.read();
messageBuffer += data;
if (data == ';') {
message = messageBuffer;
messageBuffer = "";
Serial.print(message); // send to serial monitor
message = "You sent " + message;
BTSerial.print(message);
}
}
}
`
Bnkpl 2024-01-18 23:36:36 +3
@robcioo1994: pewnie jesteś bardzo zadowolony ze swojego projektu. Ale pomyliłeś dział, pozatym pytanie padało już wielokrotnie. Usuwam posta.
GeDox 2024-01-18 23:49:32 +0
@robcioo1994: może komputer kup do tego? Albo epapierosa z tego zrobić? Przerost formy nad treścią. W zupełności wystarczy tego ATMEGA16.
pokaż komentarze (2)
KOxX69 2023-11-07 13:28:12 +1
Umie może ktoś podpowiedzieć czemu mi nie działa ta pętla? Chce zrobić pętle która kończy się samoistnie po 4 sekundach, lub jeśli użytkownik wciśnie Enter. Enter faktycznie kończy działanie pętli, ale pętla nie kończy się po 4 sekundach, ale trwa w nieskończoność.

#include <iostream>
#include <chrono>

using namespace std;

int main() {
auto start = std::chrono::high_resolution_clock::now();
while (std::chrono::high_resolution_clock::now() - start < 4s) {
if (cin.get() == '\n') {
cout << "Enter" << endl;
break; // Zakończ pętlę po wciśnięciu Enter
}
}
cout << "Minely 4 sekundy" << endl;

return 0;
}

#programowanie #informatyka
kuite22 2023-11-07 13:34:21 +1
@KOxX69: std::chrono::highresolutionclock::now() - start < 4s tu jest błąd
W.....l 2023-11-07 13:45:24 +1
@kuite22: no te 4s literał to weszło w standard jakiś?
pokaż komentarze (3)
mateusz-fratczak 2023-10-13 12:23:17 +0
cps hot
#include <iostream>
#include <windows.h>

int clicks = 0;

LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam) {
if (wParam == WM_LBUTTONDOWN) {
clicks++;
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}

int main() {
HHOOK mouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, NULL, 0);
std::cout << "Program mierzy kliknięcia myszki przez 10 sekund." << std::endl;
Sleep(10000);
UnhookWindowsHookEx(mouseHook);
std::cout << "Liczba kliknięć myszki przez 10 sekund: " << clicks << std::endl;
return 0;
}
Jailer 2023-10-13 15:53:11 +0
defoxe 2023-10-11 10:33:50 +1
#programowanie #cpp #pytaniedoeksperta #programista15k

Chce sprawdzić jak działa Catch2 dla C++ w Debian

przykład:

`#include <catch2/catch_test_macros.hpp>

static int Factorial( int number ) {
return number <= 1 ? number : Factorial( number - 1 ) * number; // fail
// return number <= 1 ? 1 : Factorial( number - 1 ) * number; // pass
}

TEST_CASE( "Factorial of 0 is 1 (fail)", "[single-file]" ) {
REQUIRE( Factorial(0) == 1 );
}

TEST_CASE( "Factorials of 1 and higher are computed (pass)", "[single-file]" ) {
REQUIRE( Factorial(1) == 1 );
REQUIRE( Factorial(2) == 2 );
REQUIRE( Factorial(3) == 6 );
REQUIRE( Factorial(10) == 3628800 );
}`

catch2 jest w /usr/include zainstalowane z pakietu deb
Kompiluje:
g++ -std=c++14 -Wall -I /usr/include/catch2 -o 010-TestCase 010-TestCase.cpp && 010-TestCase --success

i poszło...

/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/Scrt1.o: in function _start':
(.text+0x20): undefined reference to `main'
/usr/bin/ld: /tmp/ccFU1LF2.o: in function `CATCH2_INTERNAL_TEST_0()':
010-TestCase.cpp:(.text+0x9a): undefined reference to Catch::AssertionHandler::AssertionHandler(Catch::StringRef, Catch::SourceLineInfo const&, Catch::StringRef, Catch::ResultDisposition::Flags)'

itd.

Co ja źle robię? Co źle rozumiem?
groman43 2023-10-11 10:35:01 +3
@defoxe: Wygląda na to, że zapomniałeś o linkerze xD
MamCieNaHita 2023-10-11 10:40:39 +2
@defoxe: -I /usr/include/catch2 tym zakomunikowałeś gdzie są same headery, ale nigdzie nie dałeś informacji skąd ma sobie dolinkować "mięso" do finalnej binarki. takie coś by wystarczyło jakbyś miał bibliotekę header-only. imo ten -I /usr/include/catch2/ jest niepotrzebny w ogóle, powinien tam z automatu zerkać
pokaż komentarze (5)
7160 2023-09-20 22:34:40 +1
Serwo podłączone do pinu 2. Ma pulsować 0-20 stopni, gdy nic sie nie dzieje.
Jak na pinie A1 dam 3V - ma sie ustawić na 90 stopni, jak na pin a3 dam 3v - ma sie ustawić na 180. Tymczasem Jak na chwilę podam napiecie na a1 to się ustawi na 90 stopni i 4 sekundy stoi (mimo, że już napięcia nie ma). Ja podam napięcie na chwilę na a3 to się wychyli na 180 stopni, wróci na 90 stopni.

Czasem podam napięcie (na chwilę) wychyli się jak należy, wraca do pulsowani a i ponownie się wychyla na 180 (samoczynnie, bez podawania napięcia).

Skąd te 4 sekundy i zakłócenia? Serwa prawidłowo sterowane - potencjometrem chodzą 0-180 w zależności od pozycji potencjometru.

#arduino

#include ‹Servo.h>

Servo myservo; // Tworzy obiekt serwo
int servoPin = 2; // Pin, do którego jest podłączone serwo
int pinA1 = A1; // Pin A1
int pinA3 = A3; // Pin A3

void setup() {
myservo.attach(servoPin); // Przypisuje serwo do odpowiedniego pinu
pinMode(pinA1, INPUT); // Ustawia pin A1 jako wejście
pinMode(pinA3, INPUT); // Ustawia pin A3 jako wejście
}

void loop() {
// Odczytaj stany pinów A1 i A3
int stateA1 = digitalRead(pinA1);
int stateA3 = digitalRead(pinA3);

// Sprawdź stan pinów i odpowiednio ustaw kąt serwa
if (stateA1 == HIGH) {
myservo.write(90); // Ustaw serwo na 90 stopni
} else if (stateA3 == HIGH) {
myservo.write(180); // Ustaw serwo na 180 stopni
} else {
// Jeśli nie ma napięcia na pinach A1 i A3, serwo pulsuje w zakresie 1-20 stopni
for (int angle = 1; angle <= 20; angle++) {
myservo.write(angle);
delay(20); // Poczekaj krótki czas
}
for (int angle = 20; angle >= 1; angle--) {
myservo.write(angle);
delay(20); // Poczekaj krótki czas
}
}
}
JurnyReks79 2023-09-20 23:06:39 +1
@7160: Raz robiłem jedna pierdołe w Arduino i wydaje mi się że problemem jest konstrukcja if ELSA. Gdy dajesz napięcie na pin np a1 to nie wiesz w którym momencie pętli for jesteś czy na początku czy pod koniec. I o a musi się dokończyć dopiero wtedy robi pętlę od nowa i zaczytuje nowe podane parametry. Jak chcesz sprawdzić to w pętlach for wypisz sobie na konsole printa , wartością a1 i będziesz wiedział lepiej czemu tak się dzieje
7160 2023-09-20 23:19:53 +0
@JurnyReks79: Ja tam się nie znam. Chat GPT mi ten program napisał. Zastanawiam się czy brać się za zastosowaniem arduino do sterowania kosiarką (zmiana biegów, w lewo, w prawo), czy robić jak człowiek - na wyłącznikach krańcowych. Tylko, że serwo bardzo by ułatwiło zmianę biegów...
pokaż komentarze (2)
asdxmee 2023-08-21 18:16:18 +0
Mam strukturę plików zorganizowana w taki sposób że foldery mają w sobie cmakelists.txt, pliki cpp i pliki header. Chciałbym zrobić tak żeby pliki header były inckudowalne przez #include<nazwa_folderu/nazwa_headera>. Próbowałem w cmakelists danego folderu zrobić

add_library(nazwa_folderu ...)
target_include_directories(nazwa_folderu ${CMAKE_CURRENT_SOURCE_DIR})

Niestety to nie działa. W tutorialach na internecie widziałem że ludzie tworzą podfoldery include I tam wrzucają wszystkie headery w danym folderze, a następnie robią target_include_directories(nazwa_folderu include).

Da się to jakoś rozwiązać bez tego dodatkowego folderu? Nie chcę aż takich drastycznych zmian wprowadzać. Do tej pory było to rozwiązane przez
target_include_directories(${CMAKE_SOURCE_DIR}/s-x), gdzie src to główny folder z całym kodem. Wydaje mi się że to rozwiązanie jest złe, bo wtedy dany folder(moduł) wciąga do siebie headery z całego projektu, a nie tylko ze swojego folderu. Mam rację że tak się nie powinno robić?

#cmake #cpp
Tytanowy 2023-08-21 18:26:57 +1
W add library na pierwszym miejscu podajesz nazwę targetu, a później konkretne pliki. Analogicznie w target include directories, najpierw podajesz nazwę targetu do którego chcesz podpiąć includy.

Generalnie to wszystko zależy od tego co chcesz osiągnąć. Jeżeli to nie są nagłówki publiczne, to nie ma potrzeby wydzielać ich i mogą znajdować się w katalogu ze źródłami. Wtedy możesz je "includować" z tylko z generatorem $<BUILD INTERFACE: jak w dokumentacji: https://cmake.org/cmake/help/latest/command/target_include_directories.html

Jeśli nie chcesz mieszać zależności w dużym projekcie to można go podzielić na moduły.
H4RRY 2023-08-21 20:34:22 +1
@asdxmee: Tak, jest to dosyć standardowy schemat organizacji kodu. Każdy moduł ma swój interfejs (w twoim przypadku include) oraz src w któym jest prywatny kod dla modułu.
pokaż komentarze (4)
clubcard 2023-06-24 22:18:41 nsfw +1
`#include <avr/io.h>
#include <avr/interrupt.h>

#define LED PB0
#define BUTTON PD2

ISR(INT0_vect) {
// Rozpoczynamy odliczanie
TCNT1 = 0;
TCCR1B |= (1 << CS10) | (1 << CS11); // ustawiamy preskaler na 64
}

ISR(TIMER1_COMPA_vect) {
// Zapalamy LED
PORTB |= (1 << LED);
// Wyłączamy Timer
TCCR1B &= ~((1 << CS10) | (1 << CS11));
}

int main(void) {
// Ustawiamy LED jako wyjście
DDRB |= (1 << LED);
// Ustawiamy przycisk jako wejście
DDRD &= ~(1 << BUTTON);
// Włączamy pull-up resistor dla przycisku
PORTD |= (1 << BUTTON);

// Konfiguracja INT0
MCUCR |= (1 << ISC01); // Zestawiamy INT0 na zbocze opadające
GICR |= (1 << INT0); // Włączamy INT0

// Konfiguracja timer1 w tryb CTC
TCCR1B |= (1 << WGM12);
// Ustawiamy wartość OCR1A na 54688, co da nam 350ms
OCR1A = 54688;

// Włączamy przerwanie przy porównaniu dla timer1
TIMSK |= (1 << OCIE1A);

// Włączamy globalne przerwania
sei();

while(1) {
// Główna pętla programu
}

return 0;
}`

#gownowpis #avrxxx
kiciek 2023-06-24 22:37:16 +0
@clubcard: ostatnio avrów dotykałem z 10 lat temu, ale po komentarzach sądząc nie tak się włącza/wyłącza timer. Jakie jest pytanie?
clubcard 2023-06-25 07:34:09 +0
@kiciek: robię sobie ściągę na kolosa xD
brck89 2023-06-15 17:12:43 +4
#praca #pracbaza #programowanie #it

Hej,

Dzielę się dwoma prostymi skryptami do poruszania myszką.

Pierwszy jest w AutoIT i ten rekomenduję. Skrypt sprawdza co 20 sekund czy użytkownik użył myszki bądź klawiatury w tym czasie, jeżeli nie to robi mikro trójkąt (dla osoby postronnej przypomina to przypadkowe dgnięcie kursora myszki).

Skrypt w pamięci zajmuje jakieś 2-3 MB, więc praktycznie nie zapycha pamięci.

Do uruchomienia skryptu potrzebujesz zainstalowanego AutoIT, więc musisz mieć też prawa admina, by go zainstalować. Skrypt skopiuj do notatnika i zapisz go w formacie .au3. Potem po prostu go uruchom poprzez nowo stworzony plik.

Druga uwaga - skrypty w AutoIT są dosyć często wykrywane w AV jako potencjalne zagrożenie (w AutoIT możesz napisać malware). Miej to na uwadze instalując oprogramowanie i uruchamiając skrypt.

Jest on całkowicie bezpieczny, ale może zostać wykryty przez oprogramowanie antywirusowe.

Oto skrypt:

`#include <Misc.au3>
#include <MsgBoxConstants.au3>
#include <Timers.au3>

; Change the following variables as needed
$sleepTime = Int(1000 * 20) ; sleep for 20 sec
$scriptDurationInHours = 8 ; script will run for 8 hours

$scriptDurationInHoursInMs = Int(1000 * $scriptDurationInHours * 60 * 60)

$i=0
$j= Int($scriptDurationInHoursInMs / $sleepTime)

Func Main()
HotKeySet("{DEL}", "Quit") ; HotKey set to DEL. DEL will kill the script. You can stop it from Windows tray as well

While $i<$j
$idleTime = Int(_Timer_GetIdleTime()) ; how long the keyboard or mouse has not been used

If $sleepTime <= $idleTime Then
MoveCursor()
EndIf
Sleep($sleepTime)
$i+=1
Wend

EndFunc

Func MoveCursor()
HotKeySet("{DEL}", "Quit") ; HotKey set to DEL

GetCursorPosition()

MouseMove ( $mousePosX1, $mousePosY1, 18 )
MouseMove ( $mousePosX2, $mousePosY2, 18 )
MouseMove ( $mousePosX2, $mousePosY1, 18 )
Endfunc

Func GetCursorPosition()
$mousePos = MouseGetPos()
$mousePos[0] ; Mouse X position
$mousePos[1] ; Mouse Y position

Global $mousePosX1 = Int($mousePos[0] + 5)
Global $mousePosX2 = Int($mousePos[0])
Global $mousePosY1 = Int($mousePos[1])
Global $mousePosY2 = Int($mousePos[1] + 5)
Endfunc

Func Quit()
Exit ; exit the script
Endfunc

Main()
`
brck89 2023-06-15 17:15:36 +4
@brck89: do drugiego skryptu prawdopodobnie nie potrzebujesz żadnych uprawnień i żaden antywirus go nie wykryje.

Jest on napisany w PowerShell, który jest dostępny standardowo w Windows. Minus jest taki, że zapycha pamięć (od 100 do 200 MB). Poza tym jedyne co wykrywa to ruchy myszką (pomija pisanie na klawiaturze).

Skrypt skopiuj do notatnika i zapisz w formacie .ps1. Możesz też po prostu użyć PowerShell ISE.

Aby zastopować skrypt, użyj Task Managera albo w PowerShell kliknij na ikonkę STOP.

`Add-Type -AssemblyName System.Windows.Forms

while ($true) {
$p1 = [System.Windows.Forms.Cursor]::Position
Start-Sleep -Seconds 20
$p2 = [System.Windows.Forms.Cursor]::Position
if($p1.X -eq $p2.X -and $p1.Y -eq $p2.Y) {
write-host "User has not moved in the last 20 seconds." -fore yellow
write-host "Moving the cursor..." -fore darkyellow
$x = ($p2.X % 500) + 3
$y = ($p2.Y % 500) + 3
[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point($x, $y)
} else {
write-host "User moved the mouse in the last 20 seconds." -fore green
}
}`
FreakingAwesome 2023-06-16 00:20:52 +0
@brck89: dziękuję, potrzebowałam tego dziś (。◕‿‿◕。)
pokaż komentarze (2)
defoxe 2023-03-16 13:19:06 +0
#arduino #esp32 #programowanie

Mam problem z komunikacją po bluetooth.
Chcę wyświetlić proste menu. Pierwsza opcja to pobranie imienia i nazwiska. Pozostałe opcje to pierdoły.
Pierwszy problem: program napiernicza tym menu do klienta - no wiadomo, w pętli jest...
Jak to sensownie wyświetlić raz, gdy klient się podłączy?
Gorszy problem, wybór menu działa ale po dokonaniu wyboru opcji 1, owszem pyta o imie i nazwisko ale olewa całkiem dane z bluetooth. Nie czeka na dane, nie wczytuje aż nastąpi podanie znaku \n. Wywalone, przelatuje przez to...

#include <BluetoothSerial.h>

// utwórz obiekt BluetoothSerial
BluetoothSerial SerialBT;

void setup() {
// inicjalizuj Bluetooth SerialBT
SerialBT.begin("ESP32 Bluetooth");
}

void loop() {
// wyświetl menu
SerialBT.println("Wybierz opcję:");
SerialBT.println("1. Wprowadź imię i nazwisko");
SerialBT.println("2. Wyślij 'Witaj'");

// sprawdź, czy jest dostępny nowy strumień danych
if (SerialBT.available()) {
// odczytaj dane z Bluetooth SerialBT
String dane = SerialBT.readStringUntil('\n');

// usuń końcowy znak nowej linii
dane.trim();

// sprawdź wybraną opcję
if (dane == "1") {
// opcja 1: wczytaj imię i nazwisko
SerialBT.println("Wprowadź imię:");
String imie = SerialBT.readStringUntil('\n');
imie.trim();

SerialBT.println("Wprowadź nazwisko:");
String nazwisko = SerialBT.readStringUntil('\n');
nazwisko.trim();

SerialBT.println("Witaj, " + imie + " " + nazwisko);
}

else if (dane == "2") {
// opcja 2: wyślij "Witaj"
SerialBT.println("Witaj");
}

else {
// nieznana opcja: wyślij komunikat o błędzie
SerialBT.println("Nieznana opcja");
}
}
}
zetisdead 2023-03-16 15:38:47 +0
Jak to sensownie wyświetlić raz, gdy klient się podłączy?

@defoxe: nie da się, bo nie wiesz kiedy klient się podłącza. Możesz co najwyżej zareagować na jakiś klawisz, np. Enter, albo ctrl-l i wyświetlić ponownie menu. Możesz też po stronie klienta użyć terminala, który rozumie kody sterujące np. VT100 (putty) i wtedy przed wyświetleniem menu możesz kazać wyczyścić ekran, żeby nie było ściany tekstu.
mwicat 2023-03-17 00:19:36 +1
@defoxe: jeśli chodzi o pojedyncze wyswietlenie komuniaktu to sprobuj:
`
if (SerialBT.connected()) wyswietlKomunikat();
`

jesli chodzi o to ze kolejne wywolania readStringUntil nie zwracaja nic to pewnie problem ze bufor odbiorczy jest pusty w momencie gdy probujesz go czytac, przed kazdym odczytem musisz sprawdzic z SerialBT.available() IMO. Mozesz sprobowac wymusisz odczekanie na bufor przez dodatkowe petle:

`
while (!SerialBT.available()) sleep(50);
String imie = SerialBT.readStringUntil('\n');
`

Co do tego "jak to inni robią" to co probujesz zrobic to jest protokol komunikacyjny. Protokoly sie normalnie implementuje za pomocą maszyny stanów tzn. okreslasz jakie w jakich stanach jest twoj program w czasie dzialania np: CZEKAM_NA_KLIENTA, CZEKAM_NA_ODPOWIEDZ_MENU, CZEKAM_NA_ODPOWIEDZ_IMIE. Taki stan przypisujesz do zmiennej globalnej, i podczas dzialania na podstawie aktualnego stanu podejmujesz decyzje co zrobic i jaki powinien byc nastepny stan. Poczytaj https://ep.com.pl/files/1436.pdf jak cie to interesuje, to sie wydaje bardzo abstrakcyjne na początku, ale jak załapiesz o co chodzi to bedziesz to czesto stosowal bo pozwala na unikniecie zagłębiania sie w miliony ifow w kodzie.
pokaż komentarze (1)
mickpl 2023-02-03 20:12:39 +5
Test nowej opcji cytowania kodu, można scrollować dalej.

`#include <iostream>

int main() {
bool jestSpadkowiczem;
int oszczednosci;
bool kupilPanika;

if (jestSpadkowiczem && oszczednosci > 0) {
std::cout << "Otrzymasz dopłatę do kredytu do poziomu "
<< "oprocentowania 2%." << std::endl;
} else if (!jestSpadkowiczem && kupilPanika) {
std::cout << "Musisz spłacać zwykły kredyt po rynkowej stopie "
<< "i od czasu do czasu otrzymasz miesiąc wakacji kredytowych "
<< "albo i nie." << std::endl;
}

return 0;
}
`

#nieruchomosci #programowanie #programista15k #wykop
Wygryw_z_wyboru 2023-02-03 20:16:41 +18
@mickpl jak Ty tak ładnie programujesz to może poszukasz roboty jako dev? 5 lat i kupisz mieszkanie za gotówkę.
swagerstom 2023-02-03 20:42:48 +8
float oprocentowanie_lokaty = 0.08;

@mickpl: nie powinno tutaj być:
float oprocentowanie_lokaty = 0.105;
?
pokaż komentarze (17)
Manna5 2023-01-28 12:03:11 +1
Żeby wypróbować ChatGPT, poprosiłem automat o napisanie programu "99 bottles of beer".
`c
#include <stdio.h>

int main() {
for (int i = 99; i > 0; i--) {
printf("%d bottles of beer on the wall, %d bottles of beer.\n", i, i);
printf("Take one down, pass it around, %d bottles of beer on the wall.\n\n", i - 1);
}
return 0;
}
`

Po równo 10 poprawkach uzyskałem zadowalającą odpowiedź, co jak na AI oceniam całkiem dobrze:
`c
#include <stdio.h>

int main() {
int i = 99;
while (i)
printf("%d bottles of beer on the wall, %d bottles of beer.\n"
"Take one down, pass it around, %d bottles of beer on the wall.\n\n", i, i, --i);
puts("No more bottles of beer on the wall, no more bottles of beer.\n"
"Go to the store and buy some more, 99 bottles of beer on the wall.");
return 0;
}
`
HausHagenbeck 2023-01-06 02:02:02 nsfw +40
C++ est altioris gradus lingua programmandi quam annis 1980s Bjarne Stroustrup e lingua C creavit. Hac cum lingua obiecta spectante programmata contortuliora modo generaliori faciliorique scribi et compilari possunt, et, ob originem in C, omnia programmata C paene sine mutatione in C++ compilari etiam possunt.

// quod iussum obiectum std::cout praebet
#include

int main()
{
std::cout << "Salve, munde!" << std::endl;
}
#konkursnanajbardziejgownianymemznosaczem #sztukadlasprawiedliwych #programowanie #programista15k #gownowpis
kriskir2000 2023-01-06 11:24:34 +13
@HausHagenbeck: Tekst dolny
MrGerwant 2023-01-06 19:02:58 +5
@HausHagenbeck:
#include
#include

using namespace std;

class Pjoter
{
public:
int chitrosc;
bool czySprawiedliwy;
void sprawdzSprawiedliwosc();
}

void Pjoter::sprawdzSprawiedliwosc()
{
//losujemy chitrość Pjotera, Pjoter nie może być całkowicie wolny od chitrości, więc minimalny poziom to 30
this.chitrosc = (rand() / RAND_MAX) * (100 - 30) + 30;

if(this.chitrosc>40)
{
this.czySprawiedliwy=false;
}
else
{
this.czySprawiedliwy=true;
}
}

int main()
{
Pjoter pjoter=new Pjoter();
pjoter.sprawdzSprawiedliwosc();

` if(pjoter.czySprawiedliwy==false)
{`
cout << "WIR ŚMIERDZIELU!";
}
return 0; //zwracamy 0, bo pjoter jest zerem
}
5MinutWolnosci 2022-12-20 11:26:58 +1
Czy ten kod jest poprawny? Rtc podłączone poprawnie, wyświetla godzinę, biblioteki zainstalowane, a pin 13 ani drgnie o wyznaczonym czasie. Gdzieś coś jest pokręcone ?
`#include
#include
#include
#include // a basic DS1307 library that returns time as a time_t

const int led = 13;

void setup() {
// prepare pin as output
pinMode(led, OUTPUT);
digitalWrite(led, LOW);

Serial.begin(9600);
// wait for Arduino Serial Monitor
while (!Serial) ;

// get and set the time from the RTC
setSyncProvider(RTC.get);
if (timeStatus() != timeSet)
Serial.println("Unable to sync with the RTC");
else
Serial.println("RTC has set the system time");

// to test your project, you can set the time manually
//setTime(8,29,0,1,1,11); // set time to Saturday 8:29:00am Jan 1 2011

// create the alarms, to trigger functions at specific times
Alarm.alarmRepeat(9,0,0,MorningAlarm); // 9:00am every day
Alarm.alarmRepeat(11,26,0,EveningAlarm); // 19:00 -> 7:00pm every day
}

void loop() {
digitalClockDisplay();
// wait one second between each clock display in serial monitor
Alarm.delay(1000);
}

// functions to be called when an alarm triggers
void MorningAlarm() {
// write here the task to perform every morning
Serial.println("Tturn light off");
digitalWrite(led, LOW);
}
void EveningAlarm() {
// write here the task to perform every evening
Serial.println("Turn light on");
digitalWrite(led, HIGH);
}

void digitalClockDisplay() {
// digital clock display of the time
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.println();
}
void printDigits(int digits) {
Serial.print(":");
if (digits < 10)
Serial.print('0');
Serial.print(digits);
}`

#arduino #programowanie
5MinutWolnosci 2022-12-20 11:37:42 +2
@NoMoreTearsJustSmile: Przepraszam, już się poprawiam https://pastebin.com/MqpSf3Fg ( ͡° ͜ʖ ͡°)
KondominiumKatoSocjalistyczne 2022-12-20 11:51:07 +2
niepoprawne to jest wrzucać kod bezpośrednio na ten upośledzony portal a nie na jakiegoś pastebina ( ͡° ͜ʖ ͡°)

@NoMoreTearsJustSmile: jest to na swój sposób urocze #include ʕ•ᴥ•ʔ
pokaż komentarze (8)
maniok 2022-12-19 22:27:23 +0
Próbuję zminimalizować czas połączenia się do wifi w moim projekcie czujnika esp8266 na baterii.
Jak do tej pory z pomocą OpenAI ChatGPT udało mi się napisać kod który zapisuje i odczytuje numer kanału ale bssid mam wpisany na sztywno. Samo Wifi.begin(ssid,password) trwa około 5sekund a czasem i 10sekund. Kod który wklejam poniżej z moimi danymi sieci redukuje ten czas do 2-3 sekund. Mógłby ktoś rzucić okiem i podpowiedzieć co zrobić aby tak samo jak numer kanału zapisywać i odczytywać bssid?

#esp8266 #arduino #esp

`#include
#include

#define ssid "xxxx"
#define password "xxxx"
byte bssid[6] = {0x98, 0xDE, 0xD0, 0xF2, 0x9D, 0x6C}; // Adres MAC routera

void setup() {
Serial.begin(115200);
delay(10);
EEPROM.begin(64);
int channel = EEPROM.read(0);

WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password, channel, bssid, true );

int counter = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.println(".");
counter++;

if (counter >= 50) {
Serial.println("");
Serial.println("Polaczenie z WiFi1 nie powiodlo sie. Probuje polaczyc sie z WiFi2");
WiFi.begin(ssid, password);
counter = 0;
break;
}
if (WiFi.status() == WL_CONNECTED) {
break;
}
}

while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.println(".");
counter++;

if (counter >= 50) {
Serial.println("");
Serial.println("Polaczenie z WiFi2 nie powiodlo sie. Resetowanie urzadzenia...");
delay(5000);
ESP.restart();
}
if (WiFi.status() == WL_CONNECTED) {
break;
}
}

delay(1);
Serial.println("");
Serial.println("Połączenie nawiązane");
Serial.println(millis());

int currentChannel = WiFi.channel();
if (currentChannel != channel) {
EEPROM.write(0, currentChannel);
Serial.println("Zapisano kanał w RTC");
}
EEPROM.commit();
delay(10000);
ESP.restart();
}

void loop() {
// no loop
}`
dktr 2022-12-19 22:36:44 +1
@maniok: Ja używam tej funcji. Średnio łączy się w 30ms i kolejne 10ms wysyła posta i idzie spać. Trzeba zdefiniować wszystko, kanał, bssid, ip, maskę, bramę.
http://dktr.pl/gfx_wykop/wifi.txt
maniok 2022-12-19 22:39:33 +0
@dktr: Nie chcę predefiniować kanału i bssid. U mnie te dane mają być odczytywane z połączenia i zapisywane do RTC żeby przy następnym polączeniu sobie samemu odczytał.
A statyczne IP to będzie następny etap upgrade'u
pokaż komentarze (1)
kanarex 2022-11-24 20:24:38 +0
Mirki #programowanie od jakiegoś miesiąca uczę się od zera, traktuję to jako łamigłówki, jak gry logiczne.

Zrobiłem program który oblicza jaką max liczbę może przechować podana przez nas objętość w bitach.
Pytanie, czy użyte pętle da się zapisać jako funkcje?
Chodzi mi o to, żeby funkcja zawierała tylko warunek for(...) a wnętrze pętli było wpisywane jako parametr.
Chciałbym skrócić kod.

#include
#include
using namespace std;

long long potega( int y)
{
return pow(2,y);
}


int main()
{
int x;
long long suma;
cout << "Podaj liczbe bitow: " << endl;
cin>>x;
cout << endl;

long long tab[x];

for (int i=0;i<=x;i++)
{
tab[i]=potega(i);
}
cout << endl;
for (int i=0;i
DanteMorius 2022-11-24 20:31:10 +2
@kanarex: taka maluteńka porada - nie używaj polskiego w kodzie - ja wiem, że to ćwiczenie, do szuflady itp. Ale im wcześniej zaczniesz wyrabiać sobie dobre nawyki tym lepiej ( ͡º ͜ʖ͡º)
h.....s 2022-11-24 20:36:29 +3
long long tab[x];

@kanarex: w C++ deklarowanie tablic ze zmiennej to błąd, dodaj do kompilatora flagę "-pedantic" szczególnie jak zaczynasz z C++, powinno wypluć coś takiego

warning: ISO C++ forbids variable length array ‘arr’ [-Wvla]
pokaż komentarze (4)