Skocz do zawartości

PrimeSoul

Użytkownicy
  • Zawartość

    21
  • Rejestracja

  • Ostatnio

Reputacja

1 Neutralna

O PrimeSoul

  • Ranga
    2/10

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Września
  • Zainteresowania
    Programowanie C/C++, Sport, Robotyka, Film
  • Zawód
    technik elektronik
  1. Yup, dokładnie tego samego. Nawet system mam Win10, choć początkowo planowałem zrobić kurs na Ubuntu. Dzisiaj w wolnej chwili spróbuję zrobić reinstalację wszystkiego, co wczoraj wgrywałem. Informacja, jaka może być jeszcze przydatna, to fakt, że korzystałem z czystego Eclipse z dwoma plug-in'ami (System Workbench + CubeMX), zamiast gotowego, skonfigurowanego Eclipse'a ze strony ST. Dzisiaj zamierzam zrobić podejście już na gotowcu + Cube'a jako oddzielny program, może tym razem pójdzie bez problemów. EDIT: Jak powiedziałem, tak zrobiłem. I tym razem działa. Szkoda, bo liczyłem na to, że będę miał jednego Eclipse'a skonfigurowanego zarówno pod STMy i AVRy, ale nie jest źle, można przeżyć. EDIT2: Kolejny problem - po wgraniu pierwszego programu, następne wgrywania są ... puste. Mam namyśli, że gdy już wygeneruję plik *.hex (a generowałem ich mnóstwo), to potem wrzucam go do ST-linka i startuję programming. Czas wgrywania trwa 0s 0ms, a zachowanie STMa się nie zmienia, tzn. działa tak, jakby program nie został wczytany na mikrokontroler. "Erase chip" z ST-linka zadziałał i usunął poprzedni program, ale to też nie pomogło przy wgrywaniu nowego. Ktoś coś wie na ten temat? EDIT3: Problem z edit 2 leży w CubeMXie. Przeczesałem komentarze wcześniejsze i zasugerowany nimi spróbowałem zrobić od nowa konfigurację sprzętową. Zadziałało od razu. No i każda edycja kodu daje radę do momentu, gdy próbuję zmienić cokolwiek w projekcie w CubeMXie. Jest na to jakaś recepta czy trzeba się z tym męczyć?
  2. Cześć, Mam problem przy kompilacji pierwszego programu. W konsoli po kliknięciu na builda wyświetla mi błąd "make: *** No rule to make target `clean'. Stop.". Zdążyłem po necie już popatrzeć, że to potencjalnie może być problem z brakiem lub błędami w makefile'u. Coś ktoś wie jak to rozwiązać? EDIT: Po rozwinięciu okna błędu do detali pojawia się jeszcze komunikat "Invalid thread access".
  3. Gregory_59, to znaczy, że spaliła Ci się część 3.3V - nie do końca pamiętam jak elektrycznie to rozwiązano w Arduino, ale możliwe, że to jest tylko jeden stabilizator. Jak często się czegoś takiego używa? Mi trudno powiedzieć, osobiście nie używałem 3.3V ani razu, ale ja też z Arduino nie czaruję za wiele, bo nie mam obecnie czasu sięz tym bawić :/.
  4. Podepnij pomiędzy 3.3V i GND jakiś duży rezystor, najlepiej min. 100 kiloomów i zmierz na nim spadek. Jeśli nie ma ok. 3V DC, to spaliłeś zasilanie. Możesz jeszcze sprawdzić w taki sam sposób czy 5V jest obecne. Jeśli nie, to niestety czeka Cię lutowanie SMD, tak jak wspomniał Treker stablizatora (to na pewno, możliwe, że czegoś jeszcze). Ale i tak nie ma wtedy gwarancji, że po przywróceniu zasilania będzie wszystko znowu hulać - mikroprocki to bardzo wrażliwe na fluktuacje zasilania ustrojstwa i z nimi nigdy nic nie wiadomo. P.S. A tak na przyszłość - zanim podepniesz komponent, warto by poczytać chociaż o nim jaką ma zasadę działania... Wtedy wiedziałbyś, że diody mają bardzo małą rezystancję w stanie przewodzenia (w praktyce zakłada się, że nawet zerową) i może przez nie popłynąć wtedy tzw. prąd zwarciowy. Tam, gdzie pracuję, prądy zwarciowe w urządzeniach klientów nie raz powodowały nawet spalenie się ścieżek na PCB, przez co nie nadawały się nawet do naprawy.
  5. Treker, nie ma wbudowanego generatora, sprawdziłem. Odtwarza częstotliwości zaprogramowane z Arduino, ale jeśli go podłączyć do zasilacza prądu stałego o regulowanym płynnie napięciu, to nie daje żadnej częstotliwości dźwięku, niezależnie od napięcia (zaczynałem od 0, skończyłem na 20V). Stąd mój wniosek, że to buzzer pasywny, bez generatora. Zdziwiło mnie jedynie, że podłączony przez MOSFET nie zatkał się tak jak na kursie, tylko brzęczał nawet głośniej, aż trzeszczał na częstotliwości rezonansowej. Wiem, że prościej byłoby korzystać z komponentów z zestawu z Botlanda, ale muszę z zakupem się wstrzymać, przynajmniej do listopada. Niestety, studia zapasem, trzeba wydatki ciąć :/.
  6. Teraz dopiero po poście Mechano widzę, że można było mnie nie zrozumieć . W kursie było napisane, że buzzer przy połączeniu przez MOSFET na wyższe napięcie grał słabiej niż na 5V, jeśli nie połączono z nim rezystora równolegle, ponieważ akumulował energię. U mnie takie zjawisko nie nastąpiło, tylko buzzer po prostu grał głośniej i tak jak Mechano napisał po podłączeniu rezystora nawet nieznacznie przycichł (prawie niezauważalnie). Stąd wysunąłem swoje przypuszczenie, że mam buzzer elektromagnetyczny a nie na piezoelektryku. No i rzecz w tym, że chciałbym swoje przypuszczenie albo potwierdzić albo odrzucić
  7. Treker, mam taką kwestię. Gdy buzzer podłączy się na wyższe napięcie bez rezystora.. gra głośniej. Co prawda nie znam specyfikacji buzzera, bo to jakiś mój z zapasów dawnych i dawniejszych, ale przypuszczam w takim razie, że to buzzer nie piezoelektryczny, a elektromagnetyczny? Zwłaszcza, że po podłączeniu rezystora nic specjalnie zauważalnego się nie stało. A co do zadania dla chętnych - na moim sprzęcie wyższe napięcie dość mocno ograniczyło "odtwarzalność" częstotliwości wyższych. Ale nie jestem pewien czy to efekt buzzera czy przypadkiem pojemności pasożytnicze na mosfecie nie spowodowały utworzenia się "niechcianego" filtru dolnoprzepustowego. Używałem tranzystora IRF540N jakby coś, bo akurat IRL nie miałem pod ręką. Musiałbym to kiedyś pomierzyć jakoś profesjonalniej na głośnikach..
  8. Treker, jeśli mam być szczery to nie miałem pomysłu na nazwanie tych funkcji . To taki typ programu, "napisz, sprawdź czy działa i więcej przy nim nie grzeb" . Trochę przy nim się pobawiłem, potworzyłem kombinacje wizualne na diodkach, potrenowałem kodowanie, ale do niczego więcej (na szczęście) się on już nie przyda
  9. Forma zadania dla chętnych - kombinacja wizualna: (Sorry, że bez przypisów, ale nie miałem czasu ich zrobić, a program pisałem jednym ciągiem ) #include <Adafruit_NeoPixel.h> #define ledstrip A0 int i = 0, j = 0; Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, ledstrip, NEO_GRB + NEO_KHZ800); void setup() { strip.begin(); strip.show(); randomSeed(analogRead(A0)); } void setred() { for (i=1; i<=8; i++) { strip.setPixelColor(i-1, strip.Color(255, 0 , 0)); } strip.show(); } void turningoff() { for (i=8; i>=1; i--) { strip.setPixelColor(i-1, strip.Color(0, 0, 0)); strip.show(); delay(50); } } void function1(int x, int y, int z) { for (i=1; i<=300; i++) { strip.setPixelColor (random(0, 8), strip.Color(x, y, z)); strip.setPixelColor (random(0, 8), strip.Color(x, y, z)); strip.setPixelColor (random(0, 8), strip.Color(x, y, z)); strip.show(); delay(8); strip.clear(); } } void function2(int x, int y, int z, int a, int b, int c) { for (i=1; i<=300; i++) { strip.setPixelColor (random(0, 8), strip.Color(x, y, z)); strip.setPixelColor (random(0, 8), strip.Color(x, y, z)); strip.setPixelColor (random(0, 8), strip.Color(a, b, c)); strip.setPixelColor (random(0, 8), strip.Color(a, b, c)); strip.show(); delay(8); strip.clear(); } } void loop() { setred(); delay(500); turningoff(); delay(200); for (i=1; i<=8; i++) { strip.setPixelColor(i-1, strip.Color(0, 255, 0)); strip.show(); delay(50); } delay(200); turningoff(); delay(200); for (i=1; i<=8; i++) { strip.setPixelColor(i-1, strip.Color(0, 0, 255)); strip.show(); delay(50); } delay(200); for (j=1; j<=255; j++) { for (i=1; i<=8; i++) { strip.setPixelColor (i-1, strip.Color(0, j, 255)); } strip.show(); delay(5); } for (j=1; j<=255; j++) { for (i=1; i<=8; i++) { strip.setPixelColor (i-1, strip.Color(j, 255, 255)); } strip.show(); delay(5); } for (j=255; j>=1; j--) { for (i=1; i<=8; i++) { strip.setPixelColor (i-1, strip.Color(255, 255, j)); } strip.show(); delay(5); } for (j=255; j>=1; j--) { for (i=1; i<=8; i++) { strip.setPixelColor (i-1, strip.Color(255, j, 0)); } strip.show(); delay(5); } delay(1000); function1 (255, 0, 0); function2 (255, 0, 0, 0, 0, 255); function1 (0, 0, 255); function2 (0, 0, 255, 0, 255, 0); function1 (0, 255, 0); function2 (255, 0, 0, 0, 255, 0); function1 (255, 0, 0); setred(); delay(2500); for (j=1; j<=255; j++) { for (i=1; i<=8; i++) { strip.setPixelColor(i-1, strip.Color(255-j, 0, 0)); } strip.show(); delay(5); } for (j=1; j<=255; j++) { for (i=1; i<=8; i++) { strip.setPixelColor(i-1, strip.Color(0, 0, j)); } strip.show(); delay(5); } for (j=1; j<=255; j++) { for (i=1; i<=8; i++) { strip.setPixelColor(i-1, strip.Color(0, 0, 255-j)); } strip.show(); delay(5); } for (j=1; j<=255; j++) { for (i=1; i<=8; i++) { strip.setPixelColor(i-1, strip.Color(0, j, 0)); } strip.show(); delay(5); } for (j=1; j<=255; j++) { for (i=1; i<=8; i++) { strip.setPixelColor(i-1, strip.Color(0, 255-j, 0)); } strip.show(); delay(5); } delay (10000); }
  10. Treker, może zadam trochę dziwne pytanie, ale jakiś konkretny powód sprawił, że właśnie na pinie A0 podłączany był pin sterujący taśmą led? Miało to jakieś przełożenie na pracę układu czy też Arduino?
  11. Chumanista - z programami do projektowania schematów i obwodów PCB to jest tak, że jeden woli córkę, drugi matkę, a trzeci ciotkę. Każdy używa tego, w czym się lepiej czuje. Osobiście zaczynałem od KiCAD-a, ale jak dla mnie był on totalnie... "nieużywalny" jak napisał deshipu wyżej. Szybko przerzuciłem się do Eagle'a i w nim już zostałem. Myślę też, że KiCAD odstrasza trochę początkujących formą, która dla laików do prostych nie należy, przynajmniej takie jest moje subiektywne zdanie. A od czegoś w końcu trzeba zacząć, jeśli myśli się o rozwoju w dziedzinie elektroniki.
  12. Żeby stworzyć w pełni iteracyjną jeśli chodzi o liczbę diod wersję programu potrzebowałbym tablicy o bliżej nieokreślonej pojemności. O ile dobrze gdzieś doczytałem chodzi o tablicę dynamiczną. Ale niestety to już wyższa sztuka jazdy w porównaniu ze zwykłymi statycznymi jednowymiarowymi, które dość łatwo jest mi stosować już. Cóż, przerabiam kursy dalej i po cichu gdzieś tam liczę, że tablice dynamiczne pokażą się prędzej lub później
  13. Może jest to mocno po czasie - w końcu kurs został zakończony kilka miesięcy temu, a kontynuacja już się rozpoczęła, to jednak składam wielkie oklaski dla autora. Przejrzysta, przyjemna dla oka i duszy nauka, która sprawia, że chce się człowiekowi rozwijać dla samej przyjemności . Co do propozycji kursów to może powielę, ale myślę, że dość ciekawym i pożądanym tematem jest proces tworzenia układów pracujących z "gołym" procesorem, np. gdzieś w terenie. Mogłoby to obejmować zakres materiału od konstrukcji schematu, poprzez wytrawianie i wgrywanie programu poprzez programator zewnętrzny (lub wewnętrzny). Pozdrawiam i gratuluję wykonania pomysłu z Arduino PrimeSoul
  14. Zadanie nr 1 float read1 = 0, read2 = 0; void setup() { Serial.begin(9600); // transmission start while(!Serial) {}; } void loop() { delayMicroseconds(2); read1=analogRead(A0)/204.8; // left fotoresistor(V) read2=analogRead(A1)/204.8; // right fotoresistor (V) Serial.print(read1); Serial.print('\t'); Serial.println(read2); delay(50); } I zdjątko monitora: Zadanie 2. - dla niezmiennego seed'a nie zmienia się kolejność "randomowych" liczb. Jeśli ręcznie zmieniać seed'y - to oczywiście wszystko się zmienia. Zadanie 3. #define button 2 int x; void setup() { Serial.begin(9600); pinMode(button, INPUT_PULLUP); randomSeed(analogRead(A0)); while(!Serial); } void loop() { Serial.println("Push the button"); while (digitalRead(button)!=LOW) {}; x = random(1, 7); Serial.println(x); delay(1000); } Zadanie nr 4.1 int x = 0; void setup() { Serial.begin(9600); randomSeed(analogRead(A0)); } void loop() { x = random(0, 101); Serial.println(x); if (x<10 || x>90) { Serial.println("Number's meeting assumption"); while(1) {}; } else { Serial.println("Number isn't meeting assumption. Next try"); delay(1000); } } Zadanie nr 4.2 if (x>50 && !(x<85 && x>70)) - zmiana warunku, reszta kodu identyczna Zadanie nr 4.3 if (x==50 || x==40 || x==30 || x==20) Zadanie nr 4.4 if ((x>=10 && x<=40) || (x>=60 && x<=100))
  15. Powrót po pewnym czasie do Arduino okazał się być bolesny, aczkolwiek wszystkiego chyba nie zapomniałem . Zadanie 9.1 float jasnosc = 0; float zmiana = 2.5; #define LED 9 void setup() { pinMode(LED, OUTPUT); } void LaunchLed(){ while(jasnosc!=255){ analogWrite(LED, jasnosc); jasnosc+=zmiana; delay(20); } } void DelaunchLed(){ while(jasnosc!=0){ analogWrite(LED, jasnosc); jasnosc-=zmiana; delay(20); } } void loop() { LaunchLed(); DelaunchLed(); } Zadanie 9.2 int i, tablica[4], j, liczby = 0; String zmienne; void setup() { Serial.begin(9600); while (!Serial) {}; wpisanie_zmiennych(); LED(tablica[0], tablica[1], tablica[2], tablica[3]); } void LED(int on, int off, int count, int pin) { pinMode(pin, OUTPUT); for(i=1; i<=count; i++) { digitalWrite(pin, HIGH); delay(on); digitalWrite(pin, LOW); delay(off); } } void wpisanie_zmiennych() { for (j=1; j<=4; j++) { switch(j) { case 1: Serial.println("Wyslij czas, jaki ma swiecic dioda(w msek)"); break; case 2: Serial.println("Wyslij czas, jaki ma byc zgaszona dioda(w msek)"); break; case 3: Serial.println("Wyslij liczbe, ile razy ma mrugnac dioda"); break; case 4: Serial.println("Do ktorego pinu podlaczyles diode"); break; } while (Serial.available()<=0) {}; zmienne=Serial.readStringUntil('\n'); liczby = zmienne.toInt(); tablica[j-1]=liczby; } } void loop() { } Zadanie 9.1 #include <math.h> String dane; int tablica [ 3 ]; String figura; void setup() { Serial.begin(9600); while(!Serial) {}; } int prostokat(int a, int b) { int wynik = 0; wynik = a*b; return wynik; } float kolo (int r) { float wynik = 0; wynik = 3.14 * r * r; return wynik; } float trojkat (int a, int b, int c) { float wynik = 0; float p = (a+b+c)/2; wynik = sqrt(p*(p-a)*(p-b)*(p-c)); return wynik; } void loop() { int wynik = 0; Serial.println("Podaj nazwe figury, jakiej pole chcesz otrzymac"); while(Serial.available()<=0) {}; figura=Serial.readStringUntil('\n'); if(figura=="prostokat"){ Serial.println("Podaj dlugosc pierwszego boku"); while(Serial.available()<=0) {}; dane=Serial.readStringUntil('\n'); tablica[0]=dane.toInt(); Serial.println("Podaj dlugosc drugiego boku"); while(Serial.available()<=0) {}; dane=Serial.readStringUntil('\n'); tablica[1]=dane.toInt(); Serial.print("Pole wynosi: "); Serial.println(prostokat(tablica[0], tablica[1])); } else if (figura=="kolo") { Serial.println("Podaj dlugosc promienia kola"); while (Serial.available()<=0) {}; dane=Serial.readStringUntil('\n'); Serial.print("Pole wynosi: "); Serial.println(kolo(dane.toInt())); } else if (figura=="trojkat") { Serial.println("Podaj dlugosc pierwszego boku"); while (Serial.available()<=0) {}; dane=Serial.readStringUntil('\n'); tablica[0]=dane.toInt(); Serial.println("Podaj dlugosc drugiego boku"); while (Serial.available()<=0) {}; dane=Serial.readStringUntil('\n'); tablica[1]=dane.toInt(); Serial.println("Podaj dlugosc trzeciego boku"); while (Serial.available()<=0) {}; dane=Serial.readStringUntil('\n'); tablica[2]=dane.toInt(); Serial.print("Pole wynosi: "); Serial.println(trojkat(tablica[0], tablica[1], tablica[2])); } else { Serial.println("Bledna nazwa figury. Podaj ja jeszcze raz"); loop();} while(1) {}; } EDIT: Dodanie rozw. Zadanie 9.3 - drobna edycja - pozwoliłem sobie dodać parę funkcji; tak skonstruowane i zaprogramowane urządzenie mogłoby pełnić funkcję czujnika parkowania w samochodzie Budowa to oczywiście linijka led, czujnik + buzzer równolegle do ostatniej diody ostrzegawczej. Niestety nie udało mi się wykonać w pełni iteracyjnej wersji programu dla dowolnej liczby diod, brak mi umiejętność dotyczących działania na tablicach . #define trig 12 #define echo 13 int number = 0, i = 0, order = 0, security = 0, distance = 0; int table [9]; // there's only 9 free output pins in Arduino void setup() { // except pin RX, TX, trig and echo clearingtable(); // table reset Serial.begin(9600); pinMode(trig, OUTPUT); pinMode(echo, INPUT); digitalWrite(trig, LOW); number = Led_number(); // counting of connected diodes for (i=1;i<=number;i++) { // ascribing numbers to diodes Serial.print("Write pin of diode number "); // question Serial.println(i); // number of led while(Serial.available()<=0) {}; // waiting for an answer order = converseString(); // converting string to integer pinMode(order, OUTPUT); table[i-1]=order; // writing data about led to table } Serial.println("Announce security distance (cm)"); while(Serial.available()<=0) {}; // value security distance security = converseString(); } void clearingtable() { // table reset function i = 1; for (i=1;i<=9;i++) { table [i-1] = 0; } } int converseString() { // converting string to integer function int x = 0; String info; info = Serial.readStringUntil('\n'); x = info.toInt(); return x; } int Led_number() { // counting leds function int y = 0; while(!Serial) {}; Serial.println("How many diodes have you connected?"); while(Serial.available()<=0) {}; y = converseString(); return y; } int determine_distance(int x, int y) { // function, which measures int measurment = 0; // actual value of distance delayMicroseconds(2); digitalWrite(trig, HIGH); delayMicroseconds(10); digitalWrite(trig, LOW); measurment = (pulseIn(echo, HIGH))/58; Serial.print("Measurment amounts "); Serial.println(measurment); measurment = 450 - measurment; // data conversions measurment = map(measurment, 0, 450-y, 1, x); return measurment; } void show(int x) { // switching on leds with buzzer function int j = 1; for(j=1;j<=x;j++) { digitalWrite(table[j-1], HIGH); } } void negateshow(int x) { // switching off leds with buzzer function int j=1; for(j=1;j<=x;j++) { digitalWrite(table[j-1], LOW); } } void loop() { distance = determine_distance(number, security); // measurment show(distance); // leds on delay(500); // waiting negateshow(distance); // led off } Next edit: Program wzbogaciłem jeszcze o zabezpieczenie przy "szalejącym" czujniku, gdy odległość większa niż 4,5m za pomocą funkcji if, czego nie uwzględniłem jeszcze w powyższym kodzie.
×
×
  • Utwórz nowe...