Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'c++'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - roboty
    • Projekty - DIY
    • Projekty - DIY (początkujący)
    • Projekty - w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Zawody/Konkursy/Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie
    • Kosz

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Znaleziono 4 wyniki

  1. Ten wpis bierze udział w konkursie na najlepszy artykuł o elektronice lub programowaniu, którego partnerem jest firma PCBWay (popularny producent prototypów PCB). W puli nagród karty podarunkowe Allegro o wartości 2300 zł. Sprawdź więcej informacji na temat konkursu » Python to język wysokopoziomowy, który ma bardzo szerokie zastosowanie. Można w nim napisać grę (PyGame) albo zrobić komunikację mikrokontrolera z programem na komputerze/laptopie (PySerial), aby na przykład wysyłać komendy. W tym kursie zajmiemy się tą drugą biblioteką. W starszych komputerach istnieją porty szeregowe RS-232. W nowszych komputerach portu tego raczej się nie uraczy. Jest jednakże światełko w tym ciemnym tunelu, gdyż sterowniki niektórych urządzeń USB emulują port szeregowy COM umożliwiając tym samym proste komunikowanie się z takim urządzeniem na nowszych maszynach. Do takich urządzeń należą płytki rozwojowe Arduino RS-232(rys. 1) Prosta komunikacja pomiędzy uC (mikrokontrolerem) a PC (rys. 2) 1.Wysyłanie informacji z mikrokontrolera do komputera/laptopa. Konfiguracja połączenia z portem COM Zanim zacznie się przygodę z komunikacją za pośrednictwem portu COM konieczne jest zapoznanie się z podstawami jego działania. Port ten przesyła dane dwukierunkowo za pomocą jednego pinu przesyłającego i jednego odczytującego dane. Dane przesyłane są zawsze z określoną prędkością mierzoną w bitach na sekundę. Standardowe ustawienie prędkości transmisji z urządzeniem wynosi 9600 bitów na sekundę. Ważne aby, wysyłać i odbierać dane z taką samą częstotliwością w przeciwnym przypadku dane nie będą odbierane przez urządzenie w sposób poprawny jak również program nie będzie w stanie poprawnie odbierać danych. Przy podstawowej konfiguracji konieczne jest również posiadanie wiedzy o nazwie portu. Pod Windowsem nazwy portów zaczynają się od COM i kończą liczbą określającą numer portu. Można sprawdzić w systemie, jakie porty COM są dostępne w Menadżerze urządzeń co też i widać na poniższym rysunku (rys. 3) rys. 3 Przygotowanie środowiska na komputerze/laptopie Tak jak już mówiłem, będziemy potrzebować biblioteki PySerial omówię jej instalację w środowisku PyCharm: Wchodzimy w terminal, następnie wpisujemy: "pip install pyserial" Naciskamy enter Powinniśmy zobaczyć coś takiego (rys. 4) rys. 4 teraz przejdzmy do Arduino. Przygotowywanie Arduino (oczywiście zadziała komunikacja zadziała wszędzie gdzie użyjemy UART'a, nie tylko Arduino) Na razie jedyne co napiszemy to: void setup() { Serial.begin(9600); // Ustawienie Baud Rate(prędkość transmisji) na 9600Hz } void loop() { Serial.println("Proba Komunikacji"); delay(1000); } Wgrywamy nasz program, uruchamiamy Monitor Portu Szeregowego gdzie powinno sie pojawić się (rys. 5) rys. 5 i tak co około sekundę (przy okazji widzimy, że funkcja delay nie jest taka dokładna (dlatego nie stosuje sie jej gdy robimy na przykład zegar)) Teraz można przejść do PyCharma import serial arduino = serial.Serial('COM5', 9600, timeout=0.1) while True: data = arduino.readline() if data: data = data.decode() print(data) Można powiedzieć, że właśnie zrobiliśmy monitor portu szeregowego z ArduinoIDE Omówienie kodu: Importujemy bibliotekę, Ustawiamy port do któego mamy podłączone Arduino oraz Baud Rate, Przypisujemy do zmiennej to co aktualnie jest przesyłane, Jeżeli zmienna nie jest pusta to ją dekodujemy i wyświetlamy na ekranie. ZAWSZE MUSIMY PAMIĘTAĆ O ZDEKODOWANIU (tylko na komputerze)!!! Wyłączamy monitor portu szeregowego (ten z ArduinoIDE), kompilujemy program i naszym oczom powinno ukazać się (rys. 6) rys. 6 2. Wysyłanie komend z komputera/laptopa do mikrokontrolera. Przejdźmy do PyCharma import serial import time arduino = serial.Serial('COM5', 9600, timeout=0.01) while True: arduino.write('wlacz'.encode()) time.sleep(1) arduino.write('wylacz'.encode()) time.sleep(1) Importujemy bibliotekę time (nie trzeba jej instalować) oraz wysyłamy "wiadomości": "wlacz" oraz "wylacz" To by było na tyle w PyCharmie, przejdźmy więc do ArduinoIDE rys. 7 Jako że robimy komunikację używając UART'a, który może wysyłać maksymalnie jeden znak, ponieważ (rys. 7) jeden znak to jeden bajt (bajt ma 8bitów) a my wysyłamy komendy: "wlacz" oraz "wylacz" to musimy zrobić taki mały myczek elektryczek i użyć zmiennej oraz pętli. Będzie wyglądać to tak: wysyłamy: w Arduino: "odbiera" i zapisuje do zmiennej wysyłamy: l Arduino: "odbiera" i zapisuje do zmiennej wysyłamy: a Arduino: "odbiera" i zapisuje do zmiennej wysyłamy: c Arduino: "odbiera" i zapisuje do zmiennej wysyłamy: z Arduino: "odbiera" i zapisuje do zmiennej nie wysyłamy nic Arduino: wychodzi z pętli oraz porównuje zawartość zmiennej z komendami które ma zapisane Arduino: wykonuje komendę Arduino: czyści zawartość zmiennej z komendą Takie wybrnięcie z sytuacji int i = 12; //pin do którego podłączymy diodę String komenda=""; void setup() { Serial.begin(9600); pinMode(i, OUTPUT); digitalWrite(i, HIGH); } void loop() { if(Serial.available() > 0) { while(Serial.available() > 0) { komenda += char(Serial.read()); } Serial.println(komenda); if(komenda == "wlacz") { digitalWrite(i, HIGH); } if(komenda == "wylacz") { digitalWrite(i, LOW); } komenda = ""; } delay(100); } Oczywiście można wysłać do komputera/laptopa "informację zwrotną" na przykład: Dioda jest wlaczona Dioda jest wylaczona Tylko musimy pamiętać aby użyć .decode(), ale tak jak mówiłem, tylko w programie na komputrzez/laptopie Jeżeli nasze komendy będą miały tylko 1 znak na przykład: a, A, 1, B, c, C ,4 (ogólnie to dowolny znak z tabeli ASCII) nie trzeba używać pętli tylko: if(Serial.read() == 's') oczywiście też w tym ifie: if(Serial.available() > 0) Jeżeli wstawilibyśmy tam więcej znaków dostalibyśmy taki komuniukat: warning: multi-character character constant [-Wmultichar]. 3. Podsumowanie Wysyłanie oraz odbieranie informacji jest bardzo przydatne, nie musi być to tylko pomiędzy uC, a komputerem. Może to być komunikacja pomiędzy dwoma uC na przykład: karta microSD ma w sobie procesor który komunikuje sie z uC używając SPI, termometr DS18B20 który komunikuje z uC używając protokołu komunikacji OneWire (rys. 8), czujnik podczerwieni, procesor w naszych komputerach z mostkiem, pamięcią i GPU, ładowarka z telefonem, aby ustalić jaki prąd i napięcie. Komunikacja jest wszędzie (można powiedzieć, że urządzenia są bardziej komunikatywne od nas ). rys. 8
  2. Czesc, Mam problem z programem a mianowicie nie działa mimo poprawnej składni. Konsultowałem go już z kilkoma osobami, jednak nikt nie był mi w stanie pomóc. W C działa jak jest zapisany w programie a w C++ w ogóle nie mogłem go odpalić. Pomogliście mi w 2014 to mam i nadzieję że pomożecie dzisiaj ;D #include <stdio.h> #include <stdlib.h> //Generator liczb pierwszych do 535 liczb. //Maksymalna deklaracja tablicy 124 999 999; //Dziala do zakresu 3856 - powyzej sie zaawiesza. //Wyswietlanie wszystkich liczb spowalnia //Jednakowo dziala dla CodeBlock i Dev unsigned long int tab[8048]; unsigned long int pierwsza[8048]={2,3}; //Poczštkowy zbior dwoch liczb int main() { //deklaracja zmiennych unsigned long int a,b,c,m,i,p,n; //podanie zakresu do jakiego ma szukac printf("Podaj wartosc zakresu dla wyznaczenia liczb :"); scanf("%lu", &m); //Wypelnienie tablicy liczbami z zakresu for(i=0;i<=m;i++) { tab=i; } //Wartosci poczatkowe a=1; //zakres b=2; //Ilosc liczb pierwszych c=1; while(c<=m) { //wyznaczenie zakresu na podstawie zaleznosci a=pierwsza[b-1]*2; //zerowanie w tablicy wartosci nie bedacych pierwszymi //dla danego zakresu for(i=0;i<b;i++) { n=2; while(pierwsza * n<=a) { p = pierwsza * n; tab[p]=0; n++; } } //policzenie liczb pierwszych b=0; for(i=2;i<=a;i++) { if (tab!=0) { b++; } } //Wpisanie do tablicy nowych liczb pierwszych n=0; for(i=2;i<=a;i++) { if(tab!=0) { pierwsza[n]=tab; n++; } } //c=pierwsza[b-1]; >> tak powinno być c=pierwsza[b-1]+4; //działa tylko dla 4 i więcej } printf("Liczby to:\n"); //wyswietlenie liczb for(i=0;i<b;i++) { printf("%lu\n", pierwsza); } printf("\nNajwieksza liczba pierwsza %lu\n", pierwsza[b-1]); printf("\nLiczb pierwszych jest:%lu\n", b); system("PAUSE"); return 0; }
  3. Cześć, każdy z nas musi od czasu do czasu odświeżać sobie znane już wiadomości z używanego języka programowania (szczególnie, że "na co dzień" nie używamy wszystkich z zaawansowanych konstrukcji języka) lub uczyć się nowych rzeczy dla szybko zmieniających się standardów. Ja "na co dzień" używam języka C (nieobiektowego ponieważ w programowaniu mikro-kontrolerów nadal rzadko korzysta się z C++). Pomyślałem sobie, że fajnie byłoby na forum, gdybyśmy co jakiś czas zadawali sobie pytania dotyczące programowania w Językach C/C++ dotyczące jakichś trudniejszych do zrozumienia konstrukcji języka. Oto moje pierwsze pytanie: Załóżmy, że mamy definicję tablicy tab: int tab[5][4] = { {23, 2, 7, 1}, {4, 1}, {[2]=2, 11}, {[1]=27, 0, 7}, {9, 2, 1} }; Kto wie jaka będzie wartość wyrażenia: *(*(tab+2)+1) Zakładamy, że używamy kompilatora C zgodnego przynajmniej ze standardem C99 np. popularnego gcc (Linux, można go też uzywać pod Windows instalując pakiet "mingw"). Proszę, o krótkie uzasadnienie teoretyczne odpowiedzi (ponieważ można napisać prosty program i sprawdzić wartość). Czekam też na ciekawe pytania dotyczące programowania w C/C++ od Was Pozdrawiam
  4. Poszukujemy wykwalifikowanych inżynierów, którzy zdobyli doświadczenie w tworzeniu oprogramowania dla układów wbudowanych i chcą je pogłębić pracując na projektami w branży motoryzacyjnej. Jeżeli lubisz samochody, chcesz codziennie widzieć wyniki swojej pracy obserwując pojazdy na drogach całego świata dołącz do naszego zespołu! Jeśli jesteś osobą, która posiada: Wykształcenie wyższe (elektronika, automatyka, informatyka, telekomunikacja lub pokrewne) Bardzo dobrą znajomość języka C Umiejętność tworzenia oprogramowania dla systemów wbudowanych (doświadczenie komercyjne 5+ lat) Znajomość architektury i zasady działania mikroprocesorów Dobrą znajomość języka angielskiego Znajomość systemów operacyjnych czasu rzeczywistego Dlaczego warto do nas dołączyć: U nas rozwijasz swoją pasję do motoryzacji, pracując nad najnowszymi technologiami, które dopiero pojawią się na drogach Bierzesz udział w długoterminowych projektach realizowanych dla światowych marek samochodowych Oferujemy możliwość nieustającego doskonalenia swoich umiejętności i wiedzy Ciągły kontakt z najnowszymi technologiami z dziedziny samochodowych systemów wbudowanych Krótki proces rekrutacyjny - 1 rozmowa F2F Atrakcyjne widełki finansowe 15 000 - 18 000 PLN netto
×
×
  • Utwórz nowe...