Skocz do zawartości

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


Pomocna odpowiedź

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

@Gieneq  Po włączeniu monitoru portu szeregowego z zakładki narzędzia, uruchamia mi okno jednak nie mogę go odpalić. A próba najechania na niego kursorem skutkuje brakiem reakcji, to jakby monitor się uruchamiał i natychmiastowo zawieszał i nie reagował. Na dołączonej grafice najechałem na okno z moniotorem (COM3) jednakże pokazuje od razu mój pulpit.

Bez tytułu.jpg

Link do komentarza
Share on other sites

Cześć,

chciałem pochwalić się działającymi kodami.

Choć zrobiłem zadania i kody rzeczywiście działają, to nie bardzo rozumiem działania boolean, a szczególnie składni (zakładam, że to jeszcze pojawi się na kursie)

boolean cosTam = false

Czy to oznacza, że na wstępie wszystko wyłączamy, a później stan podlega modyfikacjom?

 

Poniżej kod:

 

[code]
//Zadanie 2.4
//Włączanie diody i komunikat o błędzie

#define zielona 8
#define czerwona 9

String odebraneDane = ""; //Pusty ciąg odebranych danych

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

  digitalWrite(zielona, LOW); //Wylaczamyg diody
  digitalWrite(czerwona, LOW);
}

void loop() {
  if (Serial.available() > 0) { //Czy Arduino odebrało dane
    //Jesli tak, to odczytujemy jes do znaku konca linii i zapisz w zmiennej odebraneDane
    odebraneDane = Serial.readStringUntil('\n');

    if (odebraneDane == "zielona") { //Jesli odebrano slowo "zielona"
      digitalWrite(zielona, HIGH); //To wlaczamy diode zielona
      delay(1000);
      digitalWrite(zielona, LOW);
    } else    if (odebraneDane == "czerwona") { //Jesli odebrano slowo "czerwona"
      digitalWrite(czerwona, HIGH); //To wlaczamy diode czerwona
      delay(1000);
      digitalWrite(czerwona, LOW);
    } else { //Jesli inne slowo
      digitalWrite(czerwona, LOW); //pozostaw czerwoną zgaszoną
      Serial.println("Uwaga! Błędne polecenie!"); //Wyswietla komunikat o bledzie

    }
  }
}
[/code]

oraz

[code]
//Zadanie domowe 2.5
//Przeciwny kolor diody lub komunikat o błędzie

#define zielona 8
#define czerwona 9

String odebraneDane = ""; //Pusty ciąg odebranych danych
boolean stanZielonej = false;
boolean stanCzerwonej = false;

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

  digitalWrite(zielona, LOW); //Wylaczamy diody
  digitalWrite(czerwona, LOW);
}

void loop() {
  if (Serial.available() > 0) { //Czy Arduino odebrało dane
    //Jesli tak, to odczytujemy jes do znaku konca linii i zapisz w zmiennej odebraneDane
    odebraneDane = Serial.readStringUntil('\n');

    if (odebraneDane == "zielona") { //Jesli odebrano slowo "zielona"
      stanZielonej = !stanZielonej; //zmiana stanu diody zielonej na przeciwny
      
    } else if (odebraneDane == "czerwona") { //Jesli odebrano slowo "czerwona"
       stanCzerwonej = !stanCzerwonej;
      
    } else { //Jesli inne slowo
       Serial.println("Uwaga! Błędne polecenie!"); //Wyswietla komunikat o bledzie

    }
    digitalWrite(zielona, stanZielonej);
    digitalWrite(czerwona, stanCzerwonej);
  }
}
[/code]

 

Z programowaniem dopiero zaczynam i pewnie moje pytania są "oczywiste", ale może się czegoś nauczę;)

 

Edytowano przez ebucior
Link do komentarza
Share on other sites

52 minuty temu, ebucior napisał:

nie bardzo rozumiem działania boolean, a szczególnie składni (zakładam, że to jeszcze pojawi się na kursie)

boolean cosTam = false

Czy to oznacza, że na wstępie wszystko wyłączamy, a później stan podlega modyfikacjom?

boolean to typ zmiennej (jak int/char/float/etc) ktory moze przechowywac tylko dwa stany..."false" i " true"... false to to samo co stan niski i "0"...natomiast true to to samo co stan wysoki i "1" 

W twoim przypadku jak najbardziej mozesz modyfikowac te zmienne..nawet musisz zeby kod dzialal tak jak ma dzialac...

Na starcie diody sa zgaszone (czyli false)

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

Niestety słabo się trochę przegląda te watki więc nie wiem czy moje pytanie już nie padło (jeśli padło to przepraszam), w zadaniu 2.5 sugerujesz użycie dodatkowej zmiennej ale to chyba nie jest konieczne ? czy może błędem jest używanie do output portów polecenia digitalRead ?

mój kod poniżej

#define zielona 8
#define czerwona 9
 
String odebraneDane = "";
 
void setup() {
  Serial.begin(9600);
  pinMode(zielona, OUTPUT);
  pinMode(czerwona, OUTPUT);
  
  digitalWrite(zielona, LOW);
  digitalWrite(czerwona, LOW);
}
 
void loop() {
  if(Serial.available() > 0) {
    odebraneDane = Serial.readStringUntil('\n'); 
    
    if (odebraneDane == "zielona") {
      if (digitalRead(zielona) == LOW){
      digitalWrite(zielona, HIGH);
      }else{
      digitalWrite(zielona, LOW); 
      }
    }
    
    else if (odebraneDane == "czerwona") {
      if (digitalRead(czerwona) == LOW){
      digitalWrite(czerwona, HIGH);
      }else{
      digitalWrite(czerwona, LOW); 
      }
    } else{
      Serial.println("zle dane " +odebraneDane);
    }
  }
}

 

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

String odebraneDane = ""; //Pusty ciąg odebranych danych
boolean czyCzerwonaZapalona = false;
boolean czyZielonaZapalona = false;
 
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() {
  if(Serial.available() > 0) { //Czy Arduino odebrało dane
    //Jeśli tak, to odczytujemy je do znaku końca linii i zapisz w zmiennej odebraneDane
    odebraneDane = Serial.readStringUntil('\n'); 
    
    if (odebraneDane == "zielona") { //Jeśli odebrano słowo "zielona"
      if(czyZielonaZapalona==false){
        digitalWrite(zielona, HIGH); //To włączamy diodę zieloną
        czyZielonaZapalona=true;
        } else {
           digitalWrite(zielona, LOW); 
           czyZielonaZapalona=false;
          }
    }
    
   else if (odebraneDane == "czerwona") { //Jeśli odebrano słowo "czerwona"
     if(czyCzerwonaZapalona==false){
        digitalWrite(czerwona, HIGH); 
        czyCzerwonaZapalona=true;//To włączamy diodę zieloną
        } else {
           digitalWrite(czerwona, LOW); 
           czyCzerwonaZapalona=false;
          }
    } 
    else {
      Serial.println("Podany zły kolor diody!");
    
      }
  }
}

Jakby ktoś potrzebował kodu z zadaniami domowymi to tak to u mnie wygląda :)

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

Witam chciałbym się dowiedzieć się jaka jest różnica w działaniu takiego kodu

if (digitalRead(przycisk == LOW)){

w stosunku do takiego kodu

if (digitalRead(przycisk) == LOW){

 

Link do komentarza
Share on other sites

34 minuty temu, Krawi92 napisał:

ale dla mnie nie ma żadnej różnicy w działaniu

Zakladajac ze prxycisk ma wartosc 10...

if (digitalRead(10 == LOW)){

Jako argument podaje warunek ktory sie nie jest prawdziwy bo 10 nie jest rowne LOW (czyli 0) wiec rozwineie sie to do postaci

if (digitalRead(false)){

A nastepnie..

if (digitalRead(0))

Czyli chyba nie o to nam chodzilo...😉 no tak mi sie wydaje...

  • 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.