Skocz do zawartości

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


Pomocna odpowiedź

Aby powyższy program działał, konieczne jest wysyłanie znaków końca linii, które mogą być automatycznie dodawane do wpisywanego przez nas ciągu znaków. W tym celu należy wybrać odpowiednią opcję z rozwijanego menu w monitorze portu szeregowego.

Aby powyższy program działał, konieczne jest wysyłanie znaków końca linii, które mogą być automatycznie dodawane do wpisywanego przez nas ciągu znaków. W tym celu należy wybrać odpowiednią opcję z rozwijanego menu w monitorze portu szeregowego

  • 2 tygodnie później...

Oto mój kod po dzisiejszej lekcji z zadaniami dodatkowymi

#define czerwonadioda 8
#define zielonadioda 9

boolean czerwona = false;
boolean zielona = false;
String OdebraneDane = "";

void setup() {
  Serial.begin(9600); //uruchamiamy uart
  pinMode(czerwonadioda, OUTPUT); //przypisujemy diody
  pinMode(zielonadioda, OUTPUT);
  
  digitalWrite(czerwonadioda, LOW); //wyłączamy diody
  digitalWrite(zielonadioda, LOW);
}

void loop() {
  if(Serial.available() > 0) { //czy odebrano dane
    OdebraneDane = Serial.readStringUntil('\n'); //jeśli tak to odbieramy dane i przypisujemy je do zmiennej

    if(OdebraneDane == "zielona") {
      delay(100);
      zielona = !zielona;
      digitalWrite(zielonadioda, zielona);
    } else if(OdebraneDane == "czerwona") {
      delay(100);
      czerwona = !czerwona;
      digitalWrite(czerwonadioda, czerwona);
    } else {
      Serial.println("Błędny wpis, spróbuj wpisać zielona lub czerwona.");
    }
  }
}

 

  • Lubię! 2
  • 1 rok później...
#include <Arduino.h>

const int ledGreenPin = 8; // Pin number for the Green LED
const int ledRedPin = 9; // Pin number for the Yellow LED
bool ledGreenOn = true;
bool ledRedOn = true;

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

void setup() {
  Serial.begin(9600); //Uruchomienie komunikacji
  pinMode(ledGreenPin, OUTPUT); //Ustawienie pinu diody zielonej jako wyjście 
  pinMode(ledRedPin, OUTPUT); //Ustawienie pinu diody czerwonej jako wyjście

  digitalWrite(ledGreenPin, HIGH); //Wyłączenie diody zielonej
  digitalWrite(ledRedPin, HIGH); //Wyłączenie diody czerwonej
}

void loop() {
  if(Serial.available() > 0) { //Czy Arduino odebrało dane
    odebraneDane = Serial.readStringUntil('\n');
    odebraneDane.trim(); //Usunięcie białych znaków z początku i końca odebranych danych
    Serial.println("Odebrano dane: " + odebraneDane); //Wyświetlenie odebranych danych w monitorze portu szeregowego
    if (odebraneDane == "zielona") {

      if (ledGreenOn) {
        Serial.println("Wyłączam diodę zieloną");
        digitalWrite(ledGreenPin, LOW);
        ledGreenOn = false;
      } else {
        Serial.println("Włączam diodę zieloną");
        digitalWrite(ledGreenPin, HIGH);
        ledGreenOn = true;
      }

    }
    else if (odebraneDane == "czerwona") {

      if (ledRedOn) {
          Serial.println("Wyłączam diodę czerwona");
          digitalWrite(ledRedPin, LOW);
          ledRedOn = false;
        } else {
          Serial.println("Włączam diodę czerwona");
          digitalWrite(ledRedPin, HIGH);
          ledRedOn = true;
        }
      }
    else {
        Serial.println("Wybrałeś zły kolor: " + odebraneDane + ". Wybierz kolor: zielona lub czerwona");
    }
  }
  }

Hej podrzucam mój kod, który rozwiązuj oba zadania 2.4 i 2.5 
Linijka nr 1 jest potrzebna w moim przypadku bo programuję w Visual Studio Code + Platform IO. Ustawiłem również .trim() (usuwanie białych znaków ponieważ w zintegrowanym seril monitor dodawał się znak bodaj '\r' i sprawdzanie warunków nie działało prawidłowo).

Dzięki za świetny kurs 🙂

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...