Skocz do zawartości
Komentator

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

Pomocna odpowiedź

Autsajder1983, pokaż swój program. Opisz co dokładnie nie działa - wtedy będzie łatwiej pomóc.

Udostępnij ten post


Link to post
Share on other sites

Nie wiem co zrobić aby tylko raz wypisywał wiadomość o otwartym oknie.

Pusta pętla while w tym wypadku nie dzdiała ( lub nie wiem jak ją zastosować)

Program wygląda tak.

#define led1 3
#define led2 4
#define led3 11
#define led4 10
#define przycisk1 2 
#define przycisk2 12

void setup() {
 Serial.begin(9600); 
 pinMode(led1, OUTPUT); 
 pinMode(led2, OUTPUT);
 pinMode(led3, OUTPUT);
 pinMode(led4, OUTPUT);
 pinMode(przycisk1, INPUT_PULLUP); 
 pinMode(przycisk2, INPUT_PULLUP); 
 digitalWrite(led1, LOW); 
 digitalWrite(led2, LOW); 
 digitalWrite(led3, LOW); 
 digitalWrite(led4, LOW); 
}


void loop() {
 if (digitalRead(przycisk1) == LOW) { 
   digitalWrite(led4, HIGH); 
   digitalWrite(led1, LOW); 
 } else {
   digitalWrite(led4, LOW); 
   digitalWrite(led1, HIGH); 
   Serial.println("Uwaga! Alarm! Okno nie jest zamkniete!");

 }
 if (digitalRead(przycisk2) == LOW) { 
   digitalWrite(led3, HIGH); 
   digitalWrite(led2, LOW); 
 } else { 
   digitalWrite(led3, LOW);
   digitalWrite(led2, HIGH); 
   Serial.println("Uwaga! Alarm! Okno 2 nie jest zamkniete!");

   }
} 

__________

Komentarz dodany przez: Treker

Kody programów zamieszczamy w tagach . Popraw proszę.

Udostępnij ten post


Link to post
Share on other sites

Autsajder1983, spróbuj wykorzystać dodatkowe zmienne, które będą zapamiętywały, czy wyświetlono już komunikat. Jeśli nie, to zostanie wyświetlony, w przeciwnym wypadku będziemy czekać do zamknięcia okna w spokoju.

Udostępnij ten post


Link to post
Share on other sites

Nie bardzo wiem w jaki sposób zaprogramować aby sprawdzać czy już ostrzeżenie zostało wysłane.

Mogę liczyć na jakąś podpowiedź??

Kombinowałem ale coś nie wychodzi

Udostępnij ten post


Link to post
Share on other sites

Możesz przykładowo zaraz za linijką wysyłającą komunikat ustawić wartość zmiennej CzyWyslano na 1. Nie chce dawać Ci od razu gotowego rozwiązania - próbuj dalej z tą podpowiedzią 🙂

Udostępnij ten post


Link to post
Share on other sites

Właśnie tu jest problem bo do końca nie wiem gdzie wysyłany jest komunikat.

W sensie jak jest adresowany Serial.println ??

Udostępnij ten post


Link to post
Share on other sites

Witam, wpisałem poniższe komendy:

Serial.begin(9600);

Serial.println("Witaj na Forbocie!");

i niestety w terminalu, zamiast liter, pojawiają mi się cyfry.

Dodam, że mam płytkę DFRobot UNO V3.

Co mam zrobić, aby mieć poprawne komunikaty? W terminalu mam ustawione 9600 baud (czyli jest zgodna wartość)

Udostępnij ten post


Link to post
Share on other sites

ubusek, pokaż cały program i zamieść go w tagach . Przy okazji witam na forum 🙂

Udostępnij ten post


Link to post
Share on other sites

Już wszystko jasne... (choć nie do końca).

Komunikaty zamknąłem w pojedynczym ' a nie w podwójnym "

Jaka jest różnica miedzy ' a " ?

Udostępnij ten post


Link to post
Share on other sites
Serial.println("Witaj na Forbocie!");

To mi wygląda na cudzysłów, a nie apostrof? Więc o co chodzi z:

Komunikaty zamknąłem w pojedynczym ' a nie w podwójnym "
?

Między ' a " jest duża różnica w języku C. Więc ma prawo źle działać.

Udostępnij ten post


Link to post
Share on other sites

Podczas kompilacji programu z wpisywanym imieniem arduino wypluwa błąd o treści:

czesc2Zmienne.ino:19:25: error: 'class HardwareSerial' has no member named 'readStringUntill'

Kod programu tutaj:

String odebraneDane = ""; //pusty ciag odebranych znakow
void setup() {
 // put your setup code here, to run once:
Serial.begin(9600); //ustawienie predkosci transmisji
}

void loop() {
 // put your main code here, to run repeatedly:
if(Serial.available() > 0) { //czy arduino odebrało dane
 odebraneDane = Serial.readStringUntill('/n'); //jesli tak to
// odczytaj je do znaku końca linii i zapisz w zmiennej 
//odebraneDane
 Serial.println("Witaj " + odebraneDane + "!"); //wyswietl komunikat
 }
}

To samo mam przy drugim programie sterującym diodami led przez terminal błąd ten sam, kod tutaj:

#define zolta 8
#define czerwona 10

String odebraneDane = ""; //pusty ciag odebranych znakow
void setup() {
 // put your setup code here, to run once:
Serial.begin(9600); //ustawienie predkosci transmisji

pinMode(zolta, OUTPUT);
pinMode(czerwona, OUTPUT);

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

void loop() {
 // put your main code here, to run repeatedly:
if(Serial.available() > 0) { //czy arduino odebrało dane
 odebraneDane = Serial.readStringUntill('/n'); //jesli tak to
// odczytaj je do znaku końca linii i zapisz w zmiennej 
//odebraneDane
if (odebraneDane == "zółta" ) {
  digitalWrite(zolta, HIGH); //wlacz diode zielona
  delay (1000);
  digitalWrite(zolta, LOW);
}
 if (odebraneDane == "czerwona") {
   digitalWrite(czerwona, HIGH);
   delay(1000);
   digitalWrite(czerwona, LOW);
 }
}
}

Z góry dzięki za pomoc, wcześniej nie miałem żadnych problemów z kursem 😃

Udostępnij ten post


Link to post
Share on other sites

Mechano, która wersja Arduino IDE i skąd pobierana?

Na pewno masz wybraną dobrą płytkę podczas kompilacji?

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Prawidłowa nazwa tej funkcji to: readStringUntil czyli jedno L na końcu.

Co ciekawe w dokumentacji Arduino, na liście funkcji klasy Stream, readStringUntil występuje chyba jako artefakt. W opisie składni jest już tylko readString(terminator) co by znaczyło, że w zależności od sposobu wywołania readString może czekać albo do timeoutu gdy jest wywołana bez argumentu lub aż do napotkania znaku terminator, gdy dostała go od nas w argumencie.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

marek1707, jak zawsze jesteś Marku niezastąpiony. Dzięki, nie zwróciłem uwagi na literówkę...

Mechano, teraz wszystko powinno działać. Rozumiem, że kod pisałeś samodzielnie? Bo w artykule nie widzę tego błędu.

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ść
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...