Skocz do zawartości

pempol

Użytkownicy
  • Zawartość

    6
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    1

pempol zajął 1. miejsce w rankingu.
Data osiągnięcia: 19 maja 2015.

Treści użytkownika pempol zdobyły tego dnia najwięcej polubień!

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Wrocław/Lubartów

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

Osiągnięcia użytkownika pempol

Odkrywca

Odkrywca (4/19)

  • Za 5 postów
  • To już rok!
  • To już 5 lat!

Odznaki

5

Reputacja

  1. Dzięki, to komentarze będą już pod artykułem:)
  2. oszczędzanie? to mi się podoba:] widziałem ten zapis w referencjach na arduino.cc, ale właśnie ze względu na wspomniane przez Ciebie pilnowanie nawiasów, trochę się rozpisałem. Myślę, że spróbuję przerobić to pod else if. pozdrawiam pempol
  3. o widzisz, spróbuję ponownie 🙂 /edit Spróbowałem, zacząłem od nowa z zadaniem 2.3 i dało radę. Wcześniej miałem taką sytuację, że nawet jak wpisałem poprawny kolor to wyświetlało mi komunikat o błędzie. Po zmianie wygląda to tak. //Zadanie domowe 2.3 //Gdy wpisany zły kolor diody, wyświetla komunikat o błędzie // #define GREEN 8 #define RED 9 String odebraneDane = ""; //pusty ciąg odebranych danych void setup() { Serial.begin(9600); //Ustawienie prędkości transmisji ilość baudów //Inicjalizacja połączenia z PC pinMode(GREEN, OUTPUT); //Konfiguracja wyjść pinMode(RED, OUTPUT); digitalWrite(GREEN, LOW); //Wyłączamy diody digitalWrite(RED, LOW); } void loop() { // put your main code here, to run repeatedly: if (Serial.available() > 0) {//Czy Arduino odebrało dane //Jeśli tak, to odczytaj je do znaku końca linii i zapisz w zmiennej odebraneDane odebraneDane = Serial.readStringUntil('\n'); if (odebraneDane == "green") { //gdy wpisane 'green' digitalWrite(GREEN, HIGH); //wlaczamy diode GREEN delay(1000); digitalWrite(GREEN, LOW); } else { if (odebraneDane == "red") { //gdy wpisane 'red' digitalWrite(RED, HIGH); delay(1000); digitalWrite(RED, LOW); } else { //Wyświetla komunikat o błędnie wprowadzonym kolorze Serial.println("Blad. Wprowadzona nazwa nie jest obslugiwanym kolorem diody."); Serial.println("Obslugiwane kolory: 'green' oraz 'red'."); } } //end of else od odebraneDane=="green" } //end of if wprowadzono >0 znakow //pusty else } //end of void loop() I odpowiednio po zastosowaniu tego w połączeniu ze zmienną logiczną, mamy odpowiedź na zadanie 2.4, która prezentuje się tak //Zadanie domowe 2.4 //Napisz program, który po wysłaniu koloru diody zmieni jej stan na przeciwny. //Jeśli dioda jest włączona, to zostanie wyłączona i na odwrót. #define GREEN 8 #define RED 9 String odebraneDane = ""; //pusty ciąg odebranych danych boolean AreGreenON = false; //zmienna logiczna, czy GREEN (8) ON boolean AreRedON = false; //zmienna logiczna, czy Red (9) ON void setup() { Serial.begin(9600); //Ustawienie prędkości transmisji ilość baudów //Inicjalizacja połączenia z PC pinMode(GREEN, OUTPUT); //Konfiguracja wyjść pinMode(RED, OUTPUT); digitalWrite(GREEN, LOW); //Wyłączamy diody digitalWrite(RED, LOW); } void loop() { // put your main code here, to run repeatedly: if (Serial.available() > 0) {//Czy Arduino odebrało dane //Jeśli tak, to odczytaj je do znaku końca linii i zapisz w zmiennej odebraneDane odebraneDane = Serial.readStringUntil('\n'); if (odebraneDane == "green") { //jak wpisane 'green' delay(100); AreGreenON = !AreGreenON; //negacja wartosc AreGreenOn digitalWrite(GREEN, AreGreenON); //To włączamy lub wyłaczamy diodrę GREEN delay(500); Serial.println("AreGreenON = "); Serial.println(AreGreenON); Serial.println(""); } else { //w przeciwnym wypadku if (odebraneDane == "red") { //gdy wpisane 'red' delay(100); AreRedON = !AreRedON; //negacja wartosci AreRedOn digitalWrite(RED, AreRedON); //To wl/wyl diodę RED w zaleznosci od AreRedOn delay(500); Serial.println("AreRedON = "); Serial.println(AreRedON); Serial.println(""); } else { //w przeciwnym wypadku - od 'red' i takze od 'green' //Wyświetla komunikat o błędnie wprowadzonym kolorze Serial.println("Blad. Wprowadzona nazwa nie jest obslugiwanym kolorem diody."); Serial.println("Obslugiwane kolory: 'green' oraz 'red'."); } //end of else 'red' } //end of else od 'green' } //end of if gdy wprowadzono wiecej niz 0 znakow } //end of void loop() Miłego dnia i czekam na kolejne lekcje:] pempol
  4. Witam. I jak kursanci, ktoś podzieli się rozwiązaniami zadań domowych? Ja swoje wrzucam poniżej. Ad. Na początku rozwiązałem to za pomocą rozbudowania struktury if i dopisania na końcu kodu z kursu, jednego else. I działało, chodź jak się po chwili okazało nie dokładnie tak jak powinno. Dopiero zastosowanie funkcji case i odpowiednie przypisanie wartości zmiennej będącej przełącznikiem case dało pożądany rezultat:) //Zadanie domowe 2.3 //Gdy wpisany zły kolor diody, wyświetla komunikat o błędzie // #define GREEN 8 #define RED 9 String odebraneDane = ""; //pusty ciąg odebranych danych void setup() { Serial.begin(9600); //Ustawienie prędkości transmisji ilość baudów //Inicjalizacja połączenia z PC pinMode(GREEN, OUTPUT); //Konfiguracja wyjść pinMode(RED, OUTPUT); digitalWrite(GREEN, LOW); //Wyłączamy diody digitalWrite(RED, LOW); } void loop() { // put your main code here, to run repeatedly: if (Serial.available() > 0) {//Czy Arduino odebrało dane //Jeśli tak, to odczytaj je do znaku końca linii i zapisz w zmiennej odebraneDane odebraneDane = Serial.readStringUntil('\n'); int wybor = 0; if (odebraneDane == "green") { wybor = 1; } else { if (odebraneDane == "red") { wybor = 2; } } Serial.println("wybor = '"); Serial.println(wybor); Serial.println("'"); switch (wybor) { case 1: digitalWrite(GREEN, HIGH); //To włączamy diodrę GREEN delay(1000); digitalWrite(GREEN, LOW); break; case 2: digitalWrite(RED, HIGH); //To włączamy diodrę RED delay(1000); digitalWrite(RED, LOW); break; default: //Wyświetla komunikat o błędnie wprowadzonym kolorze Serial.println("Blad. Wprowadzona nazwa nie jest obslugiwanym kolorem diody."); Serial.println("Obslugiwane kolory: 'green' oraz 'red'."); } } } //end of void loop() I dalej. Ad. Tak jak w podpowiedzi, skorzystałem z dwóch zmiennych boolean. Na początku chciałem wprowadzić dodatkowe sprawdzanie warunku jaki stan logiczny ma dana zmienna, i na tej podstawie sterować diodą - ale rozrosło się to do wielu if'ów 🙂 Na stronce oficjalnej arduino w dziale references znalazłem przykład zastosowania zmiennej typu boolean i po przeanalizowaniu tego, wrzuciłem kod do mojego szkicu. Ostatecznie po modyfikacji wcześniejszego zadania domowego, która polegała na zastosowaniu instrukcji case, użyłem tego także w tym kodzie. Całość poniżej: //Zadanie domowe 2.4 //Napisz program, który po wysłaniu koloru diody zmieni jej stan na przeciwny. //Jeśli dioda jest włączona, to zostanie wyłączona i na odwrót. #define GREEN 8 #define RED 9 String odebraneDane = ""; //pusty ciąg odebranych danych boolean AreGreenON = false; //zmienna logiczna, czy GREEN (8) ON boolean AreRedON = false; //zmienna logiczna, czy Red (9) ON void setup() { Serial.begin(9600); //Ustawienie prędkości transmisji ilość baudów //Inicjalizacja połączenia z PC pinMode(GREEN, OUTPUT); //Konfiguracja wyjść pinMode(RED, OUTPUT); digitalWrite(GREEN, LOW); //Wyłączamy diody digitalWrite(RED, LOW); } void loop() { // put your main code here, to run repeatedly: if (Serial.available() > 0) {//Czy Arduino odebrało dane //Jeśli tak, to odczytaj je do znaku końca linii i zapisz w zmiennej odebraneDane odebraneDane = Serial.readStringUntil('\n'); int wyborlabel = 0; //zmienna wyborlabel do funkcji case //przydzielenie numerow w zaleznosci od wpisanego koloru if (odebraneDane == "green") { //Jeśli odebrano słowo "green" wyborlabel = 1; Serial.println("Wpisano slowo 'green'. wyborlabel= "); Serial.println(wyborlabel); } else { //w przeciwnym wypadku if (odebraneDane == "red") { //Jeśli odebrano slowo "red" wyborlabel = 2; Serial.println("Wpisano slowo 'red'. wyborlabel= "); Serial.println(wyborlabel); } //pusty else } //koniec if odebrano green switch (wyborlabel) { //przelacznik case w zaleznosci od zmiennej wyborlabel case 1: //gdy wyborlabel=1, czyli wpisano green (case label:) delay(100); AreGreenON = !AreGreenON; //negacja wartosc AreGreenOn digitalWrite(GREEN, AreGreenON); //To włączamy lub wyłaczamy diodrę GREEN delay(500); Serial.println("AreGreenON = "); Serial.println(AreGreenON); Serial.println(""); break; //wyjscie z opcji 1 case 2: //gdy wyborlabel=2, czyli wpisano red delay(100); AreRedON = !AreRedON; //negacja wartosci AreRedOn digitalWrite(RED, AreRedON); //To wl/wyl diodę RED w zaleznosci od AreRedOn delay(500); Serial.println("AreRedON = "); Serial.println(AreRedON); Serial.println(""); break; //wyjscie z opcji 2 default: //domyslnie wybrane - w pozostale przypadki czyli wyborlabel=0 //Wyświetla komunikat o błędnie wprowadzonym kolorze Serial.println("Blad. Wprowadzona nazwa nie jest obslugiwanym kolorem diody."); Serial.println("Obslugiwane kolory: 'green' oraz 'red'."); } //end of switch (wyborlabel) } //koniec warunku, ze wprowadzono wiecej niz 0 znakow } //koniec programu main void loop() Czekam na inne rozwiązania, bo ciekaw jestem jak Wy to zrobiliście?🙂 pozdrowienia pempol
×
×
  • 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.