#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 BLYNKTEMPLATEID "TMPL4swPX0pKP"

#define BLYNKTEMPLATENAME "termometr"

#define BLYNKAUTH
@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.
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
piwuch - Ponieważ nie mam konta na elektrodzie, a w dodatku chcę się czegoś dowiedzie...

źródło: Logic_MGGN4PEmsA

Pobierz
  • 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.
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 40.0% (24)
  • Wyprintuje "XD" 51.7% (31)
  • Udefined behavior 6.7% (4)
  • Crash w runtimie 1.7% (1)

Oddanych głosów: 60

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
@S0Cool: Komendy wysyłam z kompa z serial portu(Android studio)
wtedy kod wygląda inaczej:

void loop() {
// put your main code here, to run repeatedly:
if(BTSerial.available()){
Serial.write(BTSerial.read());
}
if(Serial.available()){
BTSerial.write(Serial.read());
}
}

Problem raczej jest w komunikacji telefon <> moduł
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::highresolutionclock::now();
while (std::chrono::highresolutionclock::now() - start < 4s) {
if (cin.get() == '\n') {
  • 1
Już wiem czemu, pętla się nie kończy bo czeka na dowolny znak po rozpoczęciu pętli. Musze cokolwiek podać na wejściu w konsoli żeby sprawdziło ifa i przeszło dalej
cps hot
#include <iostream>
#include <windows.h>

int clicks = 0;

LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam) {
if (wParam == WMLBUTTONDOWN) {
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;
#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 );
@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ć
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ę
@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
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<nazwafolderu/nazwaheadera>. Próbowałem w cmakelists danego folderu zrobić

addlibrary(nazwafolderu ...)
targetincludedirectories(nazwafolderu ${CMAKECURRENTSOURCEDIR})

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
Czy dobrze rozumiem że include trzyma tylko te headery, które powinny być dostępne na zewnątrz modułu, a folder src trzyma wszystkie pliki cpp oraz te headery, które są wewnętrzna (prywatną) implementacja modułu?


@asdxmee: to jest jedno z rozwiązań, najczęściej stosowane. można zrobić "internalheaders" z PRIVATE i "externalheaders" z PUBLIC

dodatkowe rzeczy jak np nie wiem, mniejsze pliki binarne albo szybsza kompilacja


@asdxmee: teoretycznie kompilatorowi krócej zajmie znalezienie "dupa.h"
@asdxmee Nie wiem niestety jak z kompilacją, ale publiczne nagłówki warto wydzielić również dlatego, że możesz je później zainstalować razem z biblioteką za pomocą cmake install, gdy np. udostępniasz komuś model w postaci binarnej + api.
Poza tym publiczne nagłówki łatwiej się używa jeżeli leżą w mocno pogrupowanym i posegregowanym drzewie katalogów, wtedy łatwiej znaleźć odpowiedni plik używając cudzej biblioteki. Osobiście wolę w src trzymać jeden wielki wór, a w include takie
#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
#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
  • 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
#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
via Android
  • 0
@zetisdead z tego co wyczytalem, da sie rozpoznac kiedy klient sie podlacza. Natomiast dalej mam problem z sensownym wczytywaniem tekstow. Powoli problem koslawo rozwiazuje ale jestem ciekaw jak to inni robia, moze bardziej poprawnie.
@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
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."
Ż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
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
HausHagenbeck - C++ est altioris gradus lingua programmandi quam annis 1980s Bjarne S...

źródło: comment_1672966794trQgOABUtFnDQCKHAAFGjv.jpg

Pobierz
@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
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
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
@dktr: ze statycznym IP schodzę do 1 sekundy ale za to nie mogę wysłać http posta. łączę się z routerem i dalej dupa. response code to -1
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