Skocz do zawartości

Kurs Arduino - #6 - kontynuacja UART, serwomechanizmy


Komentator

Pomocna odpowiedź

Dnia 4.03.2019 o 12:31, Treker napisał:

"Czepiam" się dlatego, że jeśli ktoś zamieszcza ogólnie poprawny i ładnie sformatowany kod to warto wytknąć nawet małe drobiazgi, które sprawią, że będzie jeszcze lepiej. Jak ktoś początkujący wkleja kompletnie źle sformatowany program, ale ma on z tego wielką radość, bo siedział nad tym 5 godzin i jest to jego drugi program w życiu, to wytykanie mu takich drobiazgów na tym etapie wiele nie zmieni (może go jedynie zniechęcić). Dlatego każdy kod staram się ocenić trochę inaczej. Tutaj widać, że @jogaszu radzi sobie całkiem dobrze, to się uczepiłem drobiazgu 😉

Dobrze jest na początku nabyć dobre nawyki od doświadczonych osób. Czy może ukazał się jakiś artykuł na temat podstaw formatowania kodu? Jeżeli nie to myślę, że jest to dobry pomysł na nowy artykuł.

Link do komentarza
Share on other sites

Dnia 5.03.2019 o 22:26, jogaszu napisał:

Czy może ukazał się jakiś artykuł na temat podstaw formatowania kodu? Jeżeli nie to myślę, że jest to dobry pomysł na nowy artykuł.

Od dawna mam taki plan, ale odkładam go w nieskończoność, bo wiem, że publikacja tego artykułu to będzie jak wsadzenia kija w mrowisko. Znajdzie się grono ekspertów, które nigdy wcześniej nie odezwało się nawet jednym słowem na forum, a będą za wszelką cenę udowadniali, że ich konwencja jest lepsza. To coś jak "walka" użytkowników Windows vs. Linux - każdy ma swoją rację 😉

Link do komentarza
Share on other sites

6.3

#include <Servo.h> 
 
Servo serwomechanizm;  
byte pozycja = 0; 
int pozycjaPoprzednia = 0;
int mini=500;
int maxi=500;
 
void setup() { 
  serwomechanizm.attach(11);  
  Serial.begin(9600);
} 
 
void loop() 
{ 
  int odczytCzujnika = analogRead(A5); 
  if(mini>odczytCzujnika){
    mini=odczytCzujnika;
  }
  if(maxi<odczytCzujnika){
    maxi=odczytCzujnika;
  }
  
  pozycja = map(odczytCzujnika, mini, maxi, 0, 180); 
  
  if (abs(pozycja-pozycjaPoprzednia) > 3) { 
    serwomechanizm.write(pozycja); 
    pozycjaPoprzednia = pozycja; 
  }
  
  Serial.println(pozycja);
  Serial.print("mini");
  Serial.println(mini);
  Serial.print("maxi");
  Serial.println(maxi); 
  Serial.println();
  delay(500); 
}

 

  • Lubię! 2
Link do komentarza
Share on other sites

W 6.2 miałem ten sam problem co poprzednicy ale po zastosowaniu pętli while działa prawie idealnie

#define zielona 8
#define czerwona 9

int odebraneDane = 0; //Pusty ciąg odebranych danych

void setup() {
 Serial.begin(9600); //Uruchomienie komunikacji
 pinMode(zielona, OUTPUT); //Konfiguracja wyjść
 pinMode(czerwona, OUTPUT);

 digitalWrite(zielona, LOW); //Wyłączamy diody
 digitalWrite(czerwona, LOW);
}

void loop()  {
  while(Serial.available() ==0);
   odebraneDane = Serial.read(); 


   switch (odebraneDane) { 
     case 'z':  //Jeśli odebrano "z"
       digitalWrite(zielona, HIGH); //To włączamy diodę zieloną
       delay(1000);
       digitalWrite(zielona, LOW); 
       delay(1000);
     break;

     case 'r':  //Jeśli odebrano "r"
       digitalWrite(czerwona, HIGH); //To włączamy diodę czerwoną
       delay(1000);
       digitalWrite(czerwona, LOW); 
       delay(1000);
     break;

     default:
       Serial.println("Podano zly kolor, podaj [z] dla diody zielonej, [r] dla diody czerwonej");
     break;
   }
   delay(1000);
 }


 

dziękuje za pomoc 🙂

Edytowano przez Kuba2053
Już lepiej ;)
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

To przed switchem umieść sobie Serial.println(odebraneDane).

Uważaj, bo to może być trauma 🙂

Tak przy okazji - po to masz taki pizdryk opisany "zamieść kod" żeby za pomocą tego pizdryka kody zamieszczać. Następnym razem jak tego nie zrobisz zostaniesz po prostu zignorowany, nikomu się nie chce analizować kodu który wygląda jak ścierka wyjęta z taniej pralki.

Edytowano przez ethanak
  • Lubię! 1
  • Pomogłeś! 1
Link do komentarza
Share on other sites

A jeszcze jedno, dlaczego pomimo spełniania case'a, wykonania bloku instrukcji i wyjścia poprzez 'break' bez względu na to co wpisze za każdym razem bez wyjątku wykonywana jest funckja default albo od razu lub po  wykonaniu case ?

 

Z tym od razu to wiadomo bo żaden warunek nie jest spełniony ale gdy zostanie wykonany 

Edytowano przez Kuba2053
Link do komentarza
Share on other sites

Ja tak delikatnie to zasugerowałem  ale uważałem że kolega sam na to wpadnie:)

Dla tych co nie rozumieją proponuję rozszyfrowanie skrótu GIGO.

Cóż - informatyka to nauka ścisła, komputer zrobi dokładnie to  co od niego chcesz. Tylko trzeba nauczyć się chcieć...

  • Lubię! 1
Link do komentarza
Share on other sites

Sprawdziłem forum na poprzednich stronach bo chciałem zobaczyć czy kogoś innego kod tez będzie miał ten błąd i natknąłem się że był ten sam problem gdzie koledze terminal dodawał coś tylko za bardzo nie wiem jak to sprawdzić

Cytat

Chumanista napisał:

Zobacz czy terminal ci czegoś nie dodaje, na przykład \r\n.

BINGO:) Miałeś rację, teraz działa jak należy. Moja nieuwaga. Pozdrawiam

kod jest dobry z tego wynika tylko czy to tak ma zostać czy da się to jakoś zmienić

Edytowano przez Kuba2053
Link do komentarza
Share on other sites

Zadanie 6.1 w moim wykonaniu🙂:

#define przycisk 2

int klik = 0;

void setup() {
  Serial.begin(9600); 
  pinMode(przycisk, INPUT_PULLUP);
} 
 
void loop() {
  int potencjometr = analogRead(A4);
  int fotorezystor1 = analogRead(A5);
  int fotorezystor2 = analogRead(A3);

  if (digitalRead(przycisk) == LOW) {
    klik = klik + 1;
    Serial.print("Odczyt: ");
    Serial.print(potencjometr);
    Serial.print("\t");
    Serial.print(fotorezystor1);
     Serial.print("\t");
    Serial.print(fotorezystor2);
     Serial.print("\t");
    Serial.print(klik);
     Serial.print("\n");
    while(digitalRead(przycisk) == LOW);
    }
    delay(100);
}

PS: Czy wam też strasznie hałasuje servo?

Edytowano przez Dami12250
Link do komentarza
Share on other sites

13 godzin temu, Dami12250 napisał:

PS: Czy wam też strasznie hałasuje servo?

W serwie znajduje się stosunkowo duża przekładnia (składająca się z wielu kół zębatych), więc element ten zawsze będzie wydawał dźwięk 🙂 Taki urok tych napędów (są głośniejsze od silników z przekładniami). To całkowicie normalna sprawa.

  • Lubię! 1
Link do komentarza
Share on other sites

Jak chodzi o koła zębate w serwie to wiem że wydają dźwięk taki jak na początku załączonego filmu ale chodziło mi o dźwięk taki jak w końcówce filmu.

I jeszcze jedna rzecz. Robiłem wskaźnik natężenia światła przepisałem kod dokładnie tak jak w kursie, wyregulowałem a wskaźnik (czasami)  drga jak najeżdżam na fotorezystor latarką. Co może być tego przyczyną?

 

Link do komentarza
Share on other sites

54 minuty temu, Dami12250 napisał:

Jak chodzi o koła zębate w serwie to wiem że wydają dźwięk taki jak na początku załączonego filmu ale chodziło mi o dźwięk taki jak w końcówce filmu.

Wszystko zależy od tego, w której pozycji jest serwo - przy skrajnych pozycjach takie dźwięki są normalne. Jeśli serwo działa to bym się tym zbytnio nie przejmował, jak się uszkodzi to najwyżej zareklamujesz i otrzymasz nowe 😉

55 minut temu, Dami12250 napisał:

I jeszcze jedna rzecz. Robiłem wskaźnik natężenia światła przepisałem kod dokładnie tak jak w kursie, wyregulowałem a wskaźnik (czasami)  drga jak najeżdżam na fotorezystor latarką. Co może być tego przyczyną?

Arduino w połączeniu z fotorezystorem są bardzo czułym czujnikiem światła. Jeśli chcesz wyeliminować takie drgania to masz dwie opcje. Pierwsza to napisanie prostego filtru, czyli czegoś co będzie sprawiało, że małe zmiany oświetlenia będą ignorowane (wtedy wskazówka będzie ruszała się tylko przy większych skokach oświetlenia). Druga opcja to wprowadzenie większego opóźnienia na końcu pętli loop 😉

  • Lubię! 1
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.