Skocz do zawartości

Kurs Arduino - #3 - UART (komunikacja z PC), zmienne


Pomocna odpowiedź

Ja mógłbym jeszcze polecić taki system stawiania nawiasów, który w połączeniu z tabulacją i komentarzami czyni kod jeszcze bardziej moim zdaniem czytelnym:

if(warunek)
{
  while(a==10)
  {
    // cos tam, cos tam
    if(b==12)
    {
      //cos tam, cos tam
    }
    else
    {
      //cos tam, cos tam
    }
    a--;
  }//koniec while
}
else
{
 Serial.println("Hello");
 z=0;
}

 

Edytowano przez Belferek
Link do komentarza
Share on other sites

Tak, taka wersja też jest poprawna, ale we wszystkich kursach Arduino trzymamy się jednego standardu (wspomnianego przeze mnie wyżej), więc nie chciałbym już tutaj mieszać. Szczególnie, że Twoja wersja stwarza (moim zdaniem) również pewne zagrożenie podczas kopiowania/wklejania fragmentów kodów - można sobie "wstrzelić coś"  między nawiasy,  a if/else. Oczywiście każdy może pisać jak mu wygodnie, ale w przypadku początkujących lepiej sprawdza się chyba wersja pokazywana w kursie.

Link do komentarza
Share on other sites

Wgrałem ten program do Arduino, niestety w oknie Monitor portu szeregowego nie wyświetla się "Witaj w Forbocie!", lecz od razu "Minęło 5 sekund!". Ktoś wie dlaczego?

void setup(){

  Serial.begin(9600); //Ustawienie prędkości transmisji

  Serial.println("Witaj na Forbocie!"); //Jednorazowe wysłanie tekstu

}

void loop() {

  delay(5000);

  Serial.println("Minelo 5 sekund!"); //Wysyłanie w pętli

}

 

Link do komentarza
Share on other sites

W setup() po Serial.begin() możesz dać krótkie delay(500) chociaż Arduino z pewnością wysyła komunikat powitalny lecz chyba nie nadążasz z włączeniem monitora. W moim arduino jest przycisk reset. Przy włączonym monitorze zresetuj moduł  (lub wgraj szkic)- powinieneś zobaczyć ten komunikat

Edytowano przez Belferek
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

Wpisałem wszystko od początku, tym razem delay(500) w setup() działa lecz to nic nie zmieniło. Komunikatu "Witaj na Forbocie!" nadal nie ma.

void setup(){
  Serial.begin(9600); //Ustawienie prędkości transmisji
  delay(500);
  Serial.println("Witaj na Forbocie!"); //Jednorazowe wysłanie tekstu
}
void loop() {
  delay(2000);
  Serial.println("Minelo 5 sekund!"); //Wysyłanie w pętli
}

 

Edytowano przez Treker
Poprawiłem formatowanie.
Link do komentarza
Share on other sites

@kamilzazi, witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start:

  • Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników.
  • Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć?
  • Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości.

Pamiętaj proszę jeszcze, że kody programów należy umieszczać przez narzędzie KOD (znajdziesz je w edytorze pod ikonką "<>"). Dzięki niemu programy są odpowiednio formatowane i kolorowane, a wtedy wszystkim znacznie łatwiej analizować wklejone programy. Tym razem poprawiłem to za Ciebie, ale pamiętaj o tym w przyszłości - z góry dziękuję za zrozumienie i pomoc przy utrzymaniu porządku na forum 🚀

11 godzin temu, kamilzazi napisał:

Wgrałem ten program do Arduino, niestety w oknie Monitor portu szeregowego nie wyświetla się "Witaj w Forbocie!", lecz od razu "Minęło 5 sekund!". Ktoś wie dlaczego?

Dodawanie sztucznego opóźnienia nie zawsze zadziała. Jeśli masz taki problem, to dodaj w programie taka instrukcję:

  Serial.begin(9600);
  while (!Serial) {}

Pętla while wstrzyma działanie programu do momentu, gdy połączenie przez UART zostanie poprawnie nawiązane. Wtedy wszystko powinno działać poprawnie 🙂

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Zadanie 2.5 - sterowanie dwoma diodami z zapamiętaniem stanu 

#define zielona 8
#define czerwona 9

String kolor = ""; // odebrana komenda
boolean stanZ = false; // stan diosy zielonej
boolean stanC = false; // stan diody czerwonej

void setup() 
{
  Serial.begin(9600);

  pinMode(zielona, OUTPUT);
  pinMode(czerwona, OUTPUT);

  digitalWrite(zielona, LOW);
  digitalWrite(czerwona, LOW);
}

void loop()
{
  if(Serial.available() > 0)
  {
    kolor = Serial.readStringUntil('\n');

    if(kolor == "zielona") // jezeli komenda "zielona"
    {
      if(stanZ == false) // wylaczona -> wlacz
      {
        digitalWrite(zielona, HIGH);
        stanZ = true;
      }
      else if(stanZ == true) // wlaczona -> wylacz
      {
        digitalWrite(zielona, LOW);
        stanZ = false;
      }
    }
    
    else if(kolor == "czerwona") // jezeli komenda "czerwona"
    {
      if(stanC == false) // wylaczona -> wlacz
      {
        digitalWrite(czerwona, HIGH);
        stanC = true;
      }
      else if(stanC == true) // wlaczona -> wylacz
      {
        digitalWrite(czerwona, LOW);
        stanC = false;
      }
    }
    
    else // inna komenda
    {
      Serial.println("Blad");
    }
  }
}

 

Edytowano przez Masteroreo13
Link do komentarza
Share on other sites

#define czerwona 9
#define zielona 8

String odebraneDane = "";

void setup() {
  Serial.begin(9600);
  pinMode(czerwona, OUTPUT);
  pinMode(zielona, OUTPUT);

  digitalWrite(czerwona, LOW);
  digitalWrite(zielona, LOW);

}

void loop() {
  if(Serial.available() > 0)
  {
    odebraneDane = Serial.readStringUntil('\n');
  

  if(odebraneDane == "czerwona")
  {
    digitalWrite(czerwona, HIGH);
    delay(1000);
    digitalWrite(czerwona, LOW);
  }

  if(odebraneDane == "zielona")
  {
    digitalWrite(zielona, HIGH);
    delay(1000);
    digitalWrite(zielona, LOW);
  }

  else if(odebraneDane != ("czerwona") && ("zielona"))
  {
    Serial.println("zly kolor");
  }
  }
}

zadanie 2.4

#define czerwona 9
#define zielona 8

boolean stanCzerwonej = false;
boolean stanZielonej = false;


String kolor = "";

void setup() {
  Serial.begin(9600);
  pinMode(czerwona, OUTPUT);
  pinMode(zielona, OUTPUT);

  digitalWrite(czerwona, LOW);
  digitalWrite(zielona, LOW);

}

void loop() {
  if(Serial.available() > 0)
  {
    kolor = Serial.readStringUntil('\n');
  

  if(kolor == "czerwona")
  {
    if(stanCzerwonej == false)
    {
      digitalWrite(czerwona, HIGH);
      stanCzerwonej = true;
    }
    else if(stanCzerwonej == true)
    {
      digitalWrite(czerwona, LOW);
      stanCzerwonej = false;
    }
  }

  else if(kolor == "zielona")
  {
    if(stanZielonej == false)
    {
      digitalWrite(zielona, HIGH);
      stanZielonej = true;
    }
    else if(stanZielonej == true)
    {
      digitalWrite(zielona, LOW);
      stanZielonej = false;
    }
  }
}
}

zad 2.5

mam problem z używaniem boolean. nie do końca rozumiem jak z tego korzystać i pisząc to zadanie sięgałem po pomoc forum

dodam ze to moje poczatki z programowaniem

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

@arek2007100, witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start:

  • Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników.
  • Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć?
  • Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości.

Dnia 7.02.2019 o 17:10, arek2007100 napisał:

mam problem z używaniem boolean. nie do końca rozumiem jak z tego korzystać i pisząc to zadanie sięgałem po pomoc forum

dodam ze to moje poczatki z programowaniem

Czego dokładnie nie rozumiesz w przypadku zmiennych typu boolean? To raczej nic trudnego - po prostu przyjmują tylko dwie wartości fałsz lub prawda 😉

Link do komentarza
Share on other sites

Musisz pamiętać, że:

  • 1 = TRUE = HIGH
  • 0 = FALSE = LOW

Te określenia można stosować praktycznie zamiennie, równie dobrze możesz sobie zapisać, że stan diody na początku to LOW. To tylko kwestia nazewnictwa 🙂

Link do komentarza
Share on other sites

Hej, mam oto taki program 

int zielona = 1;
int zolta = 2;
int czerwona = 3;
String odebraneDane = "";
void setup() {
  // put your setup code here, to run once:
pinMode(5,OUTPUT);
Serial.begin(9600);

}

void loop() {

  // put your main code here, to run repeatedly:
if(Serial.available() > 0) {
  odebraneDane = Serial.readStringUntil('\n');
  if(odebraneDane == "zielony") {
    if(zielona == 1) {
      digitalWrite(5, HIGH);
      zielona = zielona + 1;
    }else if(zielona == 2) {
      digitalWrite(5, LOW);
      zielona = zielona - 1;  
      }
    }
      if(odebraneDane == "zolty") {
    if(zolta == 2) {
      digitalWrite(6, HIGH);
      zolta = zolta + 1;
    }else if(zolta == 3) {
      digitalWrite(6, LOW);
      zolta = zolta - 1;  
      }
    }
      if(odebraneDane == "czerwony") {
    if(czerwona == 3) {
      digitalWrite(7, HIGH);
      czerwona = czerwona + 1;
    }else if(czerwona == 4) {
      digitalWrite(7, LOW);
      czerwona = czerwona - 1;  
      }
    }
  }  
}

Jego zadaniem jest włączać i wyłączać diody jednak i działa jednak nie mogę wyjaśnić tego że dioda zielona świeci mocno, czerwona średnio a żółta tak słabo. Ktoś może wytłumaczyć dlaczego tak się stało?

51538298_2241367589258559_2317005586266324992_n.jpg

Wyjaśniło się, nie ustawiłem pinów jako wyjście ale i tak to jest ciekawe że i tak prąd płynie pomimo, że nie ustawiłem pinów.

Edytowano przez Karliko
Link do komentarza
Share on other sites

Dlaczego w przykładzie z odczytem z terminala nie mam żadnej reakcji po wysłaniu którejś literki? I w mega 2560 i w nano ten sam objaw 😞

Screenshot_207.png

Screenshot_206.png

PS. przy switch wszystko działa jak należy 

Screenshot_209.png

Edytowano przez radex324
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.