Treker (Damian Szymański) Listopad 9, 2015 Udostępnij Listopad 9, 2015 Autsajder1983, pokaż swój program. Opisz co dokładnie nie działa - wtedy będzie łatwiej pomóc. Cytuj Link do komentarza Share on other sites More sharing options...
Autsajder1983 Listopad 10, 2015 Udostępnij Listopad 10, 2015 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ę. Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Listopad 10, 2015 Udostępnij Listopad 10, 2015 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. Cytuj Link do komentarza Share on other sites More sharing options...
Autsajder1983 Listopad 10, 2015 Udostępnij Listopad 10, 2015 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 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
Treker (Damian Szymański) Listopad 10, 2015 Udostępnij Listopad 10, 2015 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ą 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
Autsajder1983 Listopad 10, 2015 Udostępnij Listopad 10, 2015 Właśnie tu jest problem bo do końca nie wiem gdzie wysyłany jest komunikat. W sensie jak jest adresowany Serial.println ?? Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Listopad 10, 2015 Udostępnij Listopad 10, 2015 Autsajder1983, co masz na myśli dokładnie pod "adresowany"? Jeśli nie wiesz, w którym miejscu wyświetlany jest tekst, to przeczytaj ten artykuł jeszcze raz od początku. Wszystko powinno się wyjaśnić: Kurs Arduino – #3 – UART (komunikacja z PC), zmienne Cytuj Link do komentarza Share on other sites More sharing options...
ubusek Grudzień 29, 2015 Udostępnij Grudzień 29, 2015 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ść) Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Grudzień 29, 2015 Udostępnij Grudzień 29, 2015 ubusek, pokaż cały program i zamieść go w tagach . Przy okazji witam na forum 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
ubusek Grudzień 29, 2015 Udostępnij Grudzień 29, 2015 Już wszystko jasne... (choć nie do końca). Komunikaty zamknąłem w pojedynczym ' a nie w podwójnym " Jaka jest różnica miedzy ' a " ? Cytuj Link do komentarza Share on other sites More sharing options...
Elvis Grudzień 29, 2015 Udostępnij Grudzień 29, 2015 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ć. Cytuj Link do komentarza Share on other sites More sharing options...
Mechano Grudzień 30, 2015 Udostępnij Grudzień 30, 2015 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 😃 Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Grudzień 31, 2015 Udostępnij Grudzień 31, 2015 Mechano, która wersja Arduino IDE i skąd pobierana? Na pewno masz wybraną dobrą płytkę podczas kompilacji? 1 Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Grudzień 31, 2015 Udostępnij Grudzień 31, 2015 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. 1 Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Grudzień 31, 2015 Udostępnij Grudzień 31, 2015 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. Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!