Skocz do zawartości

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


Pomocna odpowiedź

8 godzin temu, merinum napisał:

pytałem raczej w kwestii tego by zaoszczędzić pamięci płytki, ale w sumie jeśli to wyjdzie na to samo to nie ma tematu

Tak jeszcze dodam na marginesie, że kwestia optymalizacji pod użycie zasobów lub prędkość to jedno. Ale to, by nie robić "roboty głupiego" przy pisaniu kodu i by kod był potem czytelny i łatwy do zmian, też jest ważne.

Link do komentarza
Share on other sites

14 godzin temu, merinum napisał:

bo sprawa wygląda tak, że tych powtórzeń będzie około 15, w sumie to pytałem raczej w kwestii tego by zaoszczędzić pamięci płytki, ale w sumie jeśli to wyjdzie na to samo to nie ma tematu

To robisz funkcję która pobiera dane z tablicy, lub jej określonego obszaru. Tablica może być w FLASU lub EEPROM.

Link do komentarza
Share on other sites

(edytowany)

2.4

#define zielona 9
#define czerwona 8
 
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); 
    }
    
    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("zły kolor");}
     }
}

 

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

witam udało mi sie zrobic zadanie z gwiazdka

#define zielona 8
#define czerwona 9

String odebraneDane = "";

bool dane1 = false;
bool dane2 = false;

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, !dane1);
      dane1=!dane1;
      }
    if (odebraneDane == "czerwona"){
      digitalWrite(czerwona, !dane2);
      dane2=!dane2;
      }
    }
}

tutaj kod jagby ktos chciał podejrzec 

jestem tez ciekaw czy dobrze zastosowałem tutaj ta funkcje bool

Link do komentarza
Share on other sites

14 godzin temu, solowkidamian napisał:

witam udało mi sie zrobic zadanie z gwiazdka


#define zielona 8
#define czerwona 9

String odebraneDane = "";

bool dane1 = false;
bool dane2 = false;

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, !dane1);
      dane1=!dane1;
      }
    if (odebraneDane == "czerwona"){
      digitalWrite(czerwona, !dane2);
      dane2=!dane2;
      }
    }
}

tutaj kod jagby ktos chciał podejrzec 

jestem tez ciekaw czy dobrze zastosowałem tutaj ta funkcje bool

Chyba dobrze zastosowałes bool.

Dobrze jest znać wiele wariantów zastosowan danej funkcji języka.

Zastosowan może być jeszcze więcej.

Ja lubię poćwiczyć sobie czasem jakieś alternatywy, traktuje to jak zabawę.

 

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

(edytowany)
7 godzin temu, farmaceuta napisał:

@solowkidamian dobrze wszystko z tym że nie musisz dwa razy stosować negacji, bo po każdym spełnionym warunku zmieniasz stan bool...

własnie w tym rzecz ze trzeba bo gdy jest tylko jedna bool i załacze np dide zielona to nie załacze od razu diody czerwonej bo bool jest ustawiony na true czyli jego pzreciwienstwem jest falsz wiec nie zalaczy drugiej diody

Edytowano przez solowkidamian
Link do komentarza
Share on other sites

@solowkidamian chyba trochę źle się zrozumieliśmy...mi chodzi o to że nie musisz robić dwa razy negacji tej samej zmiennej... można tak 

if (odebraneDane == "zielona"){
     dane1=!dane1;
     digitalWrite(zielona, dane1);
      }
    if (odebraneDane == "czerwona"){
     dane2=!dane2;
     digitalWrite(czerwona, dane2);
      }

czyli na starcie masz np. false i ledy są zgaszone

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

26 minut temu, solowkidamian napisał:

@farmaceuta a  okej teraz rozumiem, faktycznie mogłem tak zrobic

ale to nie jest aż taka różnica w prędkości wykonywania programu... chociaż czasem w przyszłości takie "podwójne" negowanie może spowodować że trudniej bedzie to zlokalizować i będzie błąd...ale to tak tylko na marginesie mówię 😉 ważne że działa!😊

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

(edytowany)

Osobiście nieco "zaszalałem" i zrobiłem zadanie 2.5 z dodatkowymi wariantami komend: lewy, prawy, oba, razem.
Chodziło mi o to aby można było sterować każdą diodą osobno oraz wspólnie zmieniać "oba" jednocześnie lub zapalać/gasić "razem".

#define PIN_Lewy 8
#define PIN_Prawy 7
#define TXT_Lewy "lewy"
#define TXT_Prawy "prawy"
#define TXT_Oba "oba"
#define TXT_Razem "razem"

String odebraneDane = "";
bool swieciLewy = false;
bool swieciPrawy = false;
bool swieciRazem = false;

void setup() {
  Serial.begin(9600);
  pinMode(PIN_Lewy, OUTPUT);
  pinMode(PIN_Prawy, OUTPUT);
  digitalWrite(PIN_Lewy, LOW);
  digitalWrite(PIN_Prawy, LOW);
}

void loop() {
  if(Serial.available() > 0) {
    odebraneDane = Serial.readStringUntil('\n'); 
    if (odebraneDane == TXT_Lewy || odebraneDane == TXT_Oba) {
      if (swieciLewy) {
        digitalWrite(PIN_Lewy, LOW); 
        swieciLewy = false;
        swieciRazem = false;
      } else {
        digitalWrite(PIN_Lewy, HIGH);
        swieciLewy = true;      
        swieciRazem = swieciLewy && swieciPrawy;
      }
    }
    if (odebraneDane == TXT_Prawy || odebraneDane == TXT_Oba) {
      if (swieciPrawy) {
        digitalWrite(PIN_Prawy, LOW);
        swieciPrawy = false;
        swieciRazem = false;
      } else{
        digitalWrite(PIN_Prawy, HIGH);
        swieciPrawy = true;
        swieciRazem = swieciPrawy && swieciLewy;
      }
    }
    if (odebraneDane == TXT_Razem) {
      if (swieciRazem) {
        digitalWrite(PIN_Lewy, LOW); 
        digitalWrite(PIN_Prawy, LOW);
        swieciRazem = false;
        swieciLewy = false;
        swieciPrawy = false;
      } else{
        digitalWrite(PIN_Lewy, HIGH); 
        digitalWrite(PIN_Prawy, HIGH);
        swieciRazem = true;
        swieciLewy = true;      
        swieciPrawy = true;
      }
    }
    if (odebraneDane != TXT_Lewy && odebraneDane != TXT_Prawy && odebraneDane != TXT_Oba && odebraneDane != TXT_Razem) {
      Serial.println("Nie ma takiej diody: \""+odebraneDane+"\" !");
    }
    delay(1000);
  }
}

 

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