Skocz do zawartości
Komentator

Kurs Arduino - #8 - Sterowanie silnikami DC, pętla for

Pomocna odpowiedź

Dlaczego zwieramy masy 4 i 5 z 12 i 13 na L293D? Nie sterują one dwoma różnymi silnikami?

Udostępnij ten post


Link to post
Share on other sites

@Emerid witam na forum 🙂

4 godziny temu, Emerid napisał:

Dlaczego zwieramy masy 4 i 5 z 12 i 13 na L293D? Nie sterują one dwoma różnymi silnikami?

Masa to masa, wszystkie punkty GND w całym układzie powinny być połączone. Nie ma to nic wspólnego ze sterowaniem dwóch różnych silników 🙂 Zasilanie dla silników doprowadzane jest za pomocą jednego pinu (+ masa). Odpowiednie sterowanie silnikami jest realizowane wewnątrz mostka.

Udostępnij ten post


Link to post
Share on other sites

Zadanie 8.1


void setup() { 
  pinMode(6, OUTPUT); 
  digitalWrite(6, HIGH); 
  
  pinMode(9, OUTPUT);
  digitalWrite(9, HIGH);
 
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
} 
 
void loop()  {   
  digitalWrite(8, LOW); 
  digitalWrite(7, HIGH); 
  digitalWrite(11, HIGH);
  digitalWrite(10, LOW); 
  delay(3000);  

  digitalWrite(8, HIGH); 
  digitalWrite(7, LOW);   
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW); 
  delay(3000);                   
}

Bardzo fajny kurs 😉😀

Udostępnij ten post


Link to post
Share on other sites

@Dami12250 dzięki, miło słyszeć!

PS pamiętaj o komentarzach w programie, bo to ważny element życia programisty. Z czasem sam zapomnisz co miał ten program robić 😉 

Udostępnij ten post


Link to post
Share on other sites

Mam pytanie do zadania 8.4

Dokładniej problem w tym że dioda zapala się gwałtownie i powoli przygasa i tak w kółko

Wydaje mi się że w kodzie coś jest nie tak ale nie wiem co

bool par = true;
int i = 0;

void setup() { 
  pinMode(6, OUTPUT); //Sygnał PWM silnika nr 1
  
  pinMode(7, OUTPUT); //Sygnały sterujące kierunkiem obrotów silnika nr 1
  pinMode(8, OUTPUT);
  
  digitalWrite(7, LOW); //Silnik nr 1 - obroty w lewo
  digitalWrite(8, HIGH);
  analogWrite(6, 0);
} 
 
void loop()  { 

 for (i; par = false; i++) {
      analogWrite(6, i); //Spokojne rozpędzanie silnika
      delay(25);
  }
 
  for (i; par = true; i--) {
      analogWrite(6, i); //Spokojne chamowanie silnika
      delay(25);
  }
  if(i = 1) {  //jeżeli i to 0 rozjaśnij
    par = false;
  }
  if(i = 254) { //jeżeli i to 254 przygaśnij
    par = true;
  }
}

 

Udostępnij ten post


Link to post
Share on other sites

Coś dokładnie pokręciłeś.

for (i; par = false; i++) {
      analogWrite(6, i); //Spokojne rozpędzanie silnika
      delay(25);
  }
 
  

Ta pętla nigdy nie zostanie wykonana, bo w warunku masz par = false (czyli kończ pętlę)

for (i; par = true; i--) {
      analogWrite(6, i); //Spokojne chamowanie silnika
      delay(25);
  }
  

Ta pętla nigdy się nie skończy, bo w warunku masz par = true (co oznacza "kręć się w kółko"). W efekcie na pinie 6 masz bardzo ładny przebieg piłokształtny i taki właśnie widzisz na diodzie.

Kompilator Ci tego nie wykryje, bo sprawdza tylko poprawność składni, a nie sens. Podobnie zdanie "ciotkę parowozu przetaczaj na sznyclach" jest z punktu widzenia gramatyki całkowicie poprawne - i całkowicie pozbawione sensu 🙂

Wyobraź sobie że jesteś mikrokontrolerem - spróbuj ręcznie "wykonać" ten program, a sam zobaczysz o co chodzi.

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

Cześć, mam taki problem:

Chciałem napisać prosty program. Miał on działać w ten sposób:

Są 4 Diody każda w innym kolorze (zdjęcie 1) po wciśnięciu przycisku zapala się pierwsza dioda (zielona) po wciśnięciu go drugi raz zapala się dioda druga dioda (żółta) i tak dalej. (WSZYSTKO W TEJ CZĘŚCI DZIAŁA) Następnie chciałem aby liczba kliknięć przycisku wyświetlała się na wyświetlaczu LCD więc dopisałem kilka linijek kodu ale zamiast liczby kliknięć wyświetlały mi się takie znaki . Potem szukałem błędu w kodzie parę rzeczy pozmieniałem, wgrałem program i na LCD wyświetlił się ten kwadracik (zdjęcie 2, zaznaczony niebieską strzałką ). Cofnąłem wszystko co pozmieniałem, w grałem program i zamiast zniknąć pojawił się kolejny taki sam kwadracik. Odłączyłem zasilanie od Arduino ( kabel łączący Arduino z komputerem) i podłączyłem jeszcze raz. Nie pomogło. Teraz nie wyświetla się nic oprócz prostokątów (zdjęcie 3). Próbowałem wgrać program jeszcze raz ale to też nie pomogło.

KOD : 

#include<LiquidCrystal.h>

#define zielona 2
#define czerwona 4
#define zolta 3
#define niebieska 5
#define przycisk 6

int klik = 0;

String klik2 = "";

void setup() {
 pinMode(zielona, OUTPUT);  //KONFIGURACJA WEJŚĆ I WYJŚĆ
 pinMode(czerwona, OUTPUT);
 pinMode(niebieska, OUTPUT);
 pinMode(zolta, OUTPUT);
 
 pinMode(przycisk, INPUT_PULLUP);
 
 digitalWrite(zielona, LOW);  //USTAWIENIE WSZYSTKICH LEDÓW NA STAN NISKI
 digitalWrite(czerwona, LOW);
 digitalWrite(niebieska, LOW);
 digitalWrite(zolta, LOW);

 LiquidCrystal lcd(12,11,10,9,8,7); //USTAWIENIE LCD
 lcd.begin(16, 2);
 lcd.println("Liczba :"); // WYŚWIETLENIE NA LCD LICZBA :
 
lcd.println(klik2);  //WYŚWIETLENIE NA LCD ILOŚCI KLIKNIĘĆ PRZYCISKU
}

void loop() {
  klik2 = String(klik);  //ZAMIANA Z INT NA STRING
  
  if(digitalRead(przycisk) == LOW) {  //JEŻELI PRZYCISK WCIŚNIĘTY KLIK +1
    klik++;
  }
  while(digitalRead(przycisk) == LOW) {} // PUSTA PĘTLA DLA ZATRZYMANIA
  
  switch (klik) {   //JEŻELI PRZYCISK WCIŚNIĘTY 0 RAZY ZGAŚ WSZYSTKIE DIODY
    case 0 :
 digitalWrite(zielona, LOW);
 digitalWrite(czerwona, LOW);
 digitalWrite(niebieska, LOW);
 digitalWrite(zolta, LOW);
 break;
delay(50);             
     
 case 1 :                         //JEŻELI PRZYCISK WCIŚNIĘTY 1 RAZ ZAPAL TYLKO ZIELONĄ DIODE
 digitalWrite(zielona, HIGH);
 digitalWrite(czerwona, LOW);
 digitalWrite(niebieska, LOW);
 digitalWrite(zolta, LOW);
 break;
delay(50);

 case 2 :                         //JEŻELI PRZYCISK WCIŚNIĘTY 2 RAZ ZAPAL TYLKO ZOLTĄ DIODE
 digitalWrite(zielona, LOW);
 digitalWrite(czerwona, LOW);
 digitalWrite(niebieska, LOW);
 digitalWrite(zolta, HIGH);
 break;
delay(50);

  case 3 :                        //JEŻELI PRZYCISK WCIŚNIĘTY 3 RAZ ZAPAL TYLKO CZERWONĄ DIODE
 digitalWrite(zielona, LOW);
 digitalWrite(czerwona, HIGH);
 digitalWrite(niebieska, LOW);
 digitalWrite(zolta, LOW);
 break;
delay(50);

  case 4 :                      //JEŻELI PRZYCISK WCIŚNIĘTY 4 RAZ ZAPAL TYLKO NIEBIESKĄ DIODE
 digitalWrite(zielona, LOW);
 digitalWrite(czerwona, LOW);
 digitalWrite(niebieska, HIGH);
 digitalWrite(zolta, LOW);
 break;
 delay(50);
 
 case 5 :                         // JEŻELI PRZYCISK WCIŚNIĘTY 5 RAZ USTAW KLIK NA 0
 klik = 0;
 break;
 delay(50);
  }
  delay(50);
}

Zdjęcia:

73482664_523414055175541_2140682197919596544_n.thumb.jpg.1f897dfbccfaf16fe8b5a7c83d9a2652.jpg1583977561_75246706_782648075524077_3906404946215436288_n(1).thumb.jpg.c758e37d89a7ea301dfa29760edc273e.jpg76609868_3375776129162801_4502295331702046720_n.thumb.jpg.e794c1bf35e136c139ca98ad7a4eca6b.jpg

Udostępnij ten post


Link to post
Share on other sites

@Dami12250 wyświetlanie samych prostokątów to najczęściej efekt błędnego podłączenia. Sprawdź czy przypadkiem nic Ci się nie poluzowało podczas tych wszystkich eksperymentów 😉 Wgraj też dla testu jakiś prosty program z kursu, który tylko wyświetla tekst, będziesz miał mniej miejsc, które mogę generować błąd.

Udostępnij ten post


Link to post
Share on other sites

Witam,

Można prosić o wyjaśnienie, w jakim celu w kodzie znajdują się linijki zaznaczone na czerwono?

pytanienaforumforbot.thumb.PNG.8b3c14d6eb15f1238310218f394419ee.PNG

Wydaje mi się, że jeśli nie zmieniamy stanu wyjść cyfrowych to można je usunąć.... Ale już kilka razy coś mi się wydawało a niekoniecznie miałem rację - stąd prośba o wyjaśnienie.

Pozdrawiam, Łukasz.

Udostępnij ten post


Link to post
Share on other sites

@Lukasz1979 tak, masz rację - w tym konkretnym przypadku nie są potrzebne, ale też nie szkodzą 🙂 To tak na wypadek, jakby jednak ktoś chciał zmieniać też kierunek obrotów.

Udostępnij ten post


Link to post
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!

Gość
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...