Skocz do zawartości
Komentator

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

Pomocna odpowiedź

(edytowany)

@ethanak Specjalnie dla Ciebie, zrobię to jeszcze raz i wyśle tu zdjęcie.

@ethanak Oto skompilowany kod, który nie ma prawa być skompilowany.

obraz.png

Edytowano przez Panda
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

OK - nie wiedziałem, że autorzy Arduino IDE doszli już do tego, że napisanie "&&" może być zbyt trudne... fakt, zacofany trochę jestem.

Co nie znaczy, że Twój kod ma jakikolwiek sens. Zdanie "ciotkę parowozu przetaczać po sznyclach" jest całkiem poprawne gramatycznie, prawda?

Udostępnij ten post


Link to post
Share on other sites

@Treker Ok, dzięki. Jestem na razie przy 4, więc trochę minie zanim do 10 dojdę.

Udostępnij ten post


Link to post
Share on other sites

Witam. Mam pytanie, jeżeli sprawdzam czy Arduino otrzymało dane za pomocą:

if (Serial.available() > 0);

To rozumiem, że dane wysyłane są do płytki dopiero po naciśnięciu przycisku "Wyślij" w terminalu, a nie podczas wpisywania. Mam rację? Jeśli tak, to czemu w terminalu zaraz po wgraniu programu wyświetla mi się "Zła komenda" co sekundę? Poniżej mój kod:

#define red 8
#define green 9

String komenda = "";

void setup() {
  Serial.begin(9600);
  pinMode(red, OUTPUT);
  pinMode(green, OUTPUT);

  digitalWrite(red, LOW);
  digitalWrite(green, LOW);
  }

void loop() {

  if (Serial.available() > 0); {
  komenda = Serial.readStringUntil('\n');

  if (komenda == "zielona") {
    digitalWrite(green, HIGH);
    delay(500);
    digitalWrite(green, LOW); }
 else if (komenda == "czerwona") {
    digitalWrite(red, HIGH);
    delay(500);
    digitalWrite(red, LOW); } 
  else {
    Serial.println("Zła komenda!");
  }
 }
}

 

01.PNG

Udostępnij ten post


Link to post
Share on other sites

@emilzazaza, 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.

1 godzinę temu, emilzazaza napisał:

To rozumiem, że dane wysyłane są do płytki dopiero po naciśnięciu przycisku "Wyślij" w terminalu, a nie podczas wpisywania. Mam rację?

Tak, masz rację, ale w Twoim programie jest błąd. Między warunek, a nawias klamrowy wstrzeliłeś sobie średnik. To sprawia, że warunek właściwie nic nie robi. Usuń zbędny średnik i zobacz jak wtedy będzie działało 😉

  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites

Cześć.Podpowie ktoś jak zrobić zadanie 2.4? dwóch automatyków nie mogło dojść, pewnie przez jakiś banał ale nie mam pomysłów już. Pozdrawiam i czekam na odpowiedź

Udostępnij ten post


Link to post
Share on other sites

@harry1998 witam na forum 🙂

Wstaw swój program, chętnie sprawdzimy i coś doradzimy.

Udostępnij ten post


Link to post
Share on other sites

Wszystkie zadania zrobione 🙂 .  Przy zadaniu z gwiazdką trzeba było trochę dłużej pomyśleć ale też się samodzielnie udało. 
Pozdrawiam 😉 

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

odnośnie zadania domowego 2.2 zauważyłem ,że gdy zmienną przeniesiemy do pętli loop to przestaje być ona widoczna dla całej funkcji.

Problem rozwiązuje umieszczenie jej nad funkcją , ale nie wewnatrz niej i mam teraz pytanie odnośnie tego czy jeżeli zapiszę int zaraz nad pętlą loop to czy będzie to zmienna lokalna widoczna tylko dla niej.

Udostępnij ten post


Link to post
Share on other sites

@SanZamoyski tak i nie 😉 W zestawach do kursu znajdują się przyciski przystosowane do płytek stykowych - one mają tylko 2 wyprowadzenia (zamiast 4), więc nie ma opcji, aby się pomylić. Niefortunnie wykorzystaliśmy na tym schemacie bibliotekę normalnego przycisku. Wiem, że jeśli ktoś działa z innymi elementami to może mieć tam problem, będziemy to zmieniać podczas aktualizacji kursu.

 

7 godzin temu, krzym2 napisał:

Wszystkie zadania zrobione 🙂 .  Przy zadaniu z gwiazdką trzeba było trochę dłużej pomyśleć ale też się samodzielnie udało. 
Pozdrawiam 😉 

@krzym2 super, że się udało 🙂 Powodzenia w dalszych eksperymentach!

 

4 godziny temu, down napisał:

czy jeżeli zapiszę int zaraz nad pętlą loop to czy będzie to zmienna lokalna widoczna tylko dla niej.

@down zmienne deklarowane poza funkcjami (czyli np. tuż nad loop() lub na samej górze programu) będą zmiennymi globalnymi - będzie widać je w każdym miejscu programu. Jeśli chcesz, aby zmienna była widoczna tylko wewnątrz funkcji to musisz ją zadeklarować wewnątrz danej funkcji.

Udostępnij ten post


Link to post
Share on other sites

Witam.

Miałem niestety dłuższą wymuszoną przerwę w nauce Arduino i przez to skończyłem naukę na 3 rozdziale bez zrobienia pracy domowej.

Dzisiaj wznowiłem naukę 😀 i chcę się podzielić swoim rozwiązaniem zadanie 2.5*. Może komuś takie rozwiązanie się bardziej spodoba :

#define zielona 8
#define czerwona 9
String odebraneDane = "";
int licznik_zielony = 0;
int licznik_czerwony = 0;

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"){
      digitalWrite(zielona,HIGH);
      licznik_zielony = licznik_zielony + 1;
      if (licznik_zielony % 2 == 0){
         digitalWrite(zielona,LOW);
      }
    }

    if( odebraneDane == "czerwona"){
      digitalWrite(czerwona,HIGH);
      licznik_czerwony = licznik_czerwony + 1;
      if (licznik_czerwony % 2 == 0){
         digitalWrite(czerwona,LOW);
      }
    }
   
  }
 }

Pozdrawiam. 

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Cześć, 

czemu w funkcji void loop  ,   'zmienna3' jest bez int ? 

int Zmienna = 0; //Zmienna globalna - widoczna w każdym miejscu programu
 
void setup() {
  int Zmienna2 = 0; //Zmienna lokalna - widoczna tylko w funkcji setup()
}
 
void loop() {
  Zmienna3 = 0; //Zmienna lokalna - widoczna tylko w funkcji loop()
}

edit

2.4. z instrukcja return(0)

#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); //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"
      digitalWrite(zielona, HIGH); //To włączamy diodę zieloną
      delay(1000);
      digitalWrite(zielona, LOW); 
       return(0);
    }
     
    
    if (odebraneDane == "czerwona") { //Jeśli odebrano słowo "czerwona"
      digitalWrite(czerwona, HIGH); //To włączamy diodę czerwoną
      delay(1000);
      digitalWrite(czerwona, LOW); 
    }
 else{
  Serial.println("zle dane");
  return(0);
 }
  }
}

 

Edytowano przez miki61
  • Lubię! 1

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ść
Napisz odpowiedź...

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