Ta strona używa ciasteczek (plików cookies), dzięki którym może działać lepiej. Dowiedz się więcejRozumiem i akceptuję

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

Autor Wiadomość
SOYER 



Posty: 346
Pomógł: 1 raz
Otrzymał 15 piw(a)
Skąd: Kryry
Wysłany: 29-12-2017, 07:58   

Kompletnie nie wiem o czym pisz Elvis, ale wiem jedno, miałem rację pisząc, że
Kod programu: Zaznacz cały
String odebraneDane =""
jest nie do końca sensowne.
Pzdr

Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 8520
Pomógł: 126 razy
Otrzymał 526 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 30-12-2017, 12:55   

SOYER, jeśli nie rozumiesz co napisał Elvis, to raczej warto się zastanowić, czy masz rację ;) Z wiadomości tamtej wynika, że nie ma praktycznie żadnej różnicy, czy dopiszemy = "";, czy go nie dodamy i wcale nie rozwiązuje to problemu, o który pytał ferb01 (swoją drogą nadal nie wiemy jaki napotkał on dokładnie problem)...


Na udzielam odpowiedzi na pytania techniczne zadawane kanałami prywatnymi (maile, komunikatory, PW).
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
SOYER 



Posty: 346
Pomógł: 1 raz
Otrzymał 15 piw(a)
Skąd: Kryry
Wysłany: 30-12-2017, 17:34   

Ok Treker, właśnie o to mi chodziło, że ten dopisek raczej był zbędny, nigdzie nigdzie nie napsałem, że to rozwiazanie jego problemu... Luzik, wiem, że mało wiem, dlatego tu jestem.... :mrgreen: Szczęsliwego Nowego Roku.

Postaw piwo autorowi tego posta
 
 
mistus 



Posty: 23
Otrzymał 3 piw(a)
Skąd: OPOLE
Wysłany: 02-01-2018, 06:25   

Ja zadanie pierwsze i drugie połączyłem razem i zrobiłem tak ;)
Kod programu: Zaznacz cały

#define czerwona 8 // nadaj pinowi 8 nazwe
#define zielona 7  // nadaj pinowi 7 nazwe
boolean zmien = true; // ustaw zmieną stan zmien na prawde
boolean wymiana = true; // ustaw zmieną stan wymiana na prawde
String wczytaj = "";  // ustaw zmiena wczytaj jako pusty ciąg
void setup() {//wykonaj na początek
  Serial.begin(9600); //połacz się z komputerem
  Serial.println("Podaj kolor"); // wpisz kolor w monitorze portu szeregowego
  pinMode(czerwona, OUTPUT);// ustaw pin 8 jako wyjście
  pinMode(zielona, OUTPUT);// ustaw pin 7 jako wyjście
  digitalWrite(czerwona, LOW);// wpisz stan niski na pin 8
  digitalWrite(zielona, LOW);// wpisz stan niski na pin 7
 }
 void czerwon(){// uruchomienie diody czerwonej w dwa stany
      if (zmien == true){ //jesli zmien jest prawdziwa
        Serial.println("wlaczyles czerwona");
        digitalWrite(czerwona, HIGH);// stan właczony
        zmien = false;
      }
      else{
        if(zmien == false){// jesli zmien jest nie prawdziwa
     
        Serial.println("wylaczyles czerwona");
        digitalWrite(czerwona, LOW);//stan wyłączony
        zmien = true;}
       
  }
 }
  void zielon(){//uruchomienie diody zielonej w dwa stany
        if(wymiana == true){//jesli wymiana jest prawdziwa
        Serial.println("wlaczyles zielona");
        digitalWrite(zielona, HIGH);//stan włączony
        wymiana = false;
      }
      else{
        if(wymiana == false){//jeśli wymiana jest nie prawdziwa
        Serial.println("wylaczyles zielona");
        digitalWrite(zielona, LOW);//stan wyłączony
        wymiana = true;
      }
 
       }
 }
 
void loop() {//wykonuj wkółko mechanike
  if(Serial.available() > 0 ){//sprawdz czy coś jest w buforze
    wczytaj = Serial.readStringUntil('\n');//jeśli jest wczytaj dane do wczytaj i ustaw w nowej lini
    if((wczytaj == "czerwona")||(wczytaj == "czerwony")){//jeśli wczytaj jest wpisane czerwona lub czerwony
    czerwon();//wykonaj funkcje czerwon
  }
   else{//jeśli nie to
    if((wczytaj == "zielona")||(wczytaj == "zielony")){//jeśli wpisane jest zielona lub zielony
    zielon();// wykonaj funkcje zielon
    }
    else{//jeśli nie jest żadna z nazw wpisana
      Serial.println("nie ma takiego koloru");//wypisz monitorze portu szeregowego
    }
   
}
}
}

właśnie się zastanawiałem jak wy to robicie dzięki już będzie jak trzeba ;)
__________
Komentarz dodany przez: Treker
Kod programu, dla lepszej czytelności, należy umieszczać w tagach [code]. Proszę to poprawić.

Ostatnio zmieniony przez mistus 02-01-2018, 14:56, w całości zmieniany 2 razy  
Postaw piwo autorowi tego posta
 
 
ciemny 



Posty: 4
Wysłany: 13-01-2018, 20:04   

Mi w końcu też wyszło:

Kod programu: Zaznacz cały

#define zielona 10
#define czerwona 9

String odbiorDanych = ""; // Pusty ciąg znaków
boolean stanZielonej = false;
boolean stanCzerwonej = false;

void setup() {
  Serial.begin(9600); // włączenie komunikacji
  pinMode(zielona, OUTPUT); //Konfiguracja wyjść
  pinMode(czerwona, OUTPUT);

  digitalWrite(zielona, LOW); //Konfigurujemy stan wyjść
  digitalWrite(czerwona, LOW);
}

void loop() {
    if(Serial.available() > 0) { // jeśli Arduino odbiera dane
    odbiorDanych = Serial.readStringUntil('\n'); // to zapisuje ciąg wpisanych znaków do wciśnięcia "enter"

    if (odbiorDanych == "zielona") { // jeśli odebrano słowo "zielona"
      if (stanZielonej == false) { // i jeśli zielona dioda jest wyłączona
      digitalWrite(zielona, HIGH); // to włącz diodę
      stanZielonej = true; // jej stan teraz to włączony
      } else { //jeśli jest włączona
              digitalWrite(zielona, LOW); // to wyłącz diodę
              stanZielonej = false; // jej stan teraz to wyłączony
             }
    } else {
            if (odbiorDanych == "czerwona") {// jeśli  odbebrano słow "czerwona"
            if(stanCzerwonej == false) { // i jeśli czerwona dioda jest wyłączona
            digitalWrite(czerwona, HIGH); // to włącz diodę
            stanCzerwonej = true; // jej stan teraz to włączony
            } else { // jeśli jest włączona
                   digitalWrite(czerwona, LOW); // to wyłącz diodę
                   stanCzerwonej = false; // jej stan teraz to wyłączony
                   }
            } else {
                   Serial.println("zły kolor diody!!");
            }
            }
     }
}

         
     
 

Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 8520
Pomógł: 126 razy
Otrzymał 526 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 13-01-2018, 20:29   

ciemny, super, dzięki za podzielenie się Twoim rozwiązaniem :) Powodzenia w dalszej nauce!


Na udzielam odpowiedzi na pytania techniczne zadawane kanałami prywatnymi (maile, komunikatory, PW).
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
Kriss7475 



Posty: 1
Wysłany: 02-02-2018, 12:39   

Przy omawianiu zmiennych przydałaby się informacja, że bool/boolean zajmuje 1 bajt pamięci RAM, podczas gdy powinien zajmować 1 bit. Przy małych programach nie robi to różnicy, ale przy dużych różnica jest kolosalna (8 razy więcej zajętej pamięci).

A przy #define powinna być informacja, że zmienia wszystkie pasujące ciągi znaków tj.
Kod programu: Zaznacz cały

#define dioda 8

bool diodaStan;

void setup() {}
void loop() {}

Arduino odczyta jako
Kod programu: Zaznacz cały

bool 8Stan;

void setup() {}
void loop() {}

Postaw piwo autorowi tego posta
 
 
Elvis 



Posty: 1738
Pomógł: 105 razy
Otrzymał 303 piw(a)
Skąd: wawa
Programuję w:
C, asm
Wysłany: 02-02-2018, 12:45   

Skąd pomysł, że zmianna typu bool powinna zajmować jeden bit? Czy poza intuicją istnieje standard, który określałby coś takiego? Druga sprawa to bool wcale nie musi zajmować jednego bajtu. Równie dobrze może mieć rozmiar typu int, czyli np. 4 bajty. I nie jest to nic dziwnego.
Natomiast z tym #define to czysta bzdura, więc niech początkujący zamykają oczy jak to czytają. Oczywiście define tak nie działa, nie zamienia wszystkich wystąpień napisu.

Postaw piwo autorowi tego posta
 
 
kwiatek170494 



Posty: 3
Wysłany: 05-02-2018, 19:41   

Może to nie zadanie domowe . Ale na podstawie lekcji napisałem program który przyciskami załącza poszczególne diody.
Podpowie mi ktoś teraz jak edytować program aby przy włączeniu diody wyświetlił napis , "Dioda (np. zielona) Włączona/Wyłączona "

Kod programu: Zaznacz cały
#define zolta 11
#define niebieska 8
#define zielona 9
#define czerwona 10
#define przyciskGREEN 2
#define przyciskBLUE 3
#define przyciskYELLOW 5
#define przyciskRED 4

boolean czyZIELONA = false;
boolean czyCZERWONA = false;
boolean czyNIEBIESKA = false;
boolean czyZOLTA = false;
void setup() {
 pinMode(zolta,OUTPUT);
 pinMode(zielona,OUTPUT);
 pinMode(czerwona,OUTPUT);
 pinMode(niebieska,OUTPUT);
 pinMode(przyciskGREEN,INPUT_PULLUP);
 pinMode(przyciskRED,INPUT_PULLUP);
 pinMode(przyciskBLUE,INPUT_PULLUP);
 pinMode(przyciskYELLOW,INPUT_PULLUP);

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

void loop() {
 
  if(digitalRead(przyciskGREEN) == LOW)
   {
    delay(400);
    czyZIELONA = !czyZIELONA;
    digitalWrite(zielona,czyZIELONA);
    }
     
   
  if (digitalRead(przyciskRED) == LOW)
    {
      delay(400);
      czyCZERWONA = !czyCZERWONA;
    digitalWrite(czerwona,czyCZERWONA);
    }
  if (digitalRead(przyciskYELLOW) == LOW)
    {
      delay(400);
      czyZOLTA = !czyZOLTA;
    digitalWrite(zolta,czyZOLTA);
     }
   if (digitalRead(przyciskBLUE) == LOW)
    {
      delay(400);
      czyNIEBIESKA = !czyNIEBIESKA;
    digitalWrite(niebieska,czyNIEBIESKA);
     }
   
  }

Ostatnio zmieniony przez kwiatek170494 05-02-2018, 20:57, w całości zmieniany 2 razy  
Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 8520
Pomógł: 126 razy
Otrzymał 526 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 10-02-2018, 14:10   

kwiatek170494, witam na forum :) Z czym dokładnie masz problem? Wiesz kiedy dioda zmienia stan, pozostaje w tym miejscu dodać instrukcję wysyłającą komunikat przez UART. W którym miejscu utknąłeś :) ?


Na udzielam odpowiedzi na pytania techniczne zadawane kanałami prywatnymi (maile, komunikatory, PW).
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
D3binski 



Posty: 2
Otrzymał 2 piw(a)
Wysłany: 11-02-2018, 14:18   

Kod programu: Zaznacz cały
/*
Kurs Arduino #3
Zadanie domowe 2.5
*/

#define LedC 9  //LED czerwony
#define LedZ 8  //Led żółty

bool LedC_czyWlaczony=false; //Zmienna do sprawdzania stanu wyjścia LedC
bool LedZ_czyWlaczony=false; //Zmienna do sprawdzania stanu wyjścia LedZ

String LED;  //Zmienna do zapisywania wyboru koloru LED

void setup() {
    Serial.begin(9600); //Ustawienie transmisji
   
    pinMode(LedC,OUTPUT);  //Konfiguracja LedC jako wyjście
    pinMode(LedZ,OUTPUT);  //Konfiguracja LedZ jako wyjście
   
    digitalWrite(LedC,LOW); //LED czerwony wyłączony
    digitalWrite(LedZ,LOW); //LED zółty wyłączony
   
    Serial.println("Dostępne kolory LED: Zolty, Czerwony");  //Informacja o dostępnych kolorach
}

void loop() {
 
  if(Serial.available()>0){   //Sprawdzenie czy Arduino odebralo znaki
    LED=Serial.readStringUntil('\n'); //Przypisanie znaków do zmiennej LED
   
    if(LED=="Zolty"){   //Sprawdzenie czy wybrano kolor żółty
      if(LedZ_czyWlaczony==false){  //Sprawdzenie czy LED żółty jest wyłączony
        digitalWrite(LedZ,HIGH);    //Włącz LED zielony
        LedZ_czyWlaczony=true;      //Zmień wartość zmiennej na prawde (LED włączony)
      }
      else if(LedZ_czyWlaczony==true){  //Sprawdzenie czy LED żółty jest włączony
        digitalWrite(LedZ,LOW);       //Wyłącz LED zielony
        LedZ_czyWlaczony=false;      //Zmień wartość zmiennej na fałsz (LED wyłączony)
      }
    }
    else if(LED=="Czerwony"){       //Sprawdzenie czy wybrano kolor czerwony
      if(LedC_czyWlaczony==false){   //Sprawdzenie czy LED czerwony jest wyłączony
        digitalWrite(LedC,HIGH);     //Włącz LED czerwony
        LedC_czyWlaczony=true;       //Zmień wartość zmiennej na prawde (LED włączony)
      }
      else if(LedC_czyWlaczony==true){  //Sprawdzenie czy LED czerwony jest włączony
        digitalWrite(LedC,LOW);         //Wyłącz LED czerwony
        LedC_czyWlaczony=false;         //Zmień wartość zmiennej na fałsz (LED wyłączony)
      }
    }
    else{                               //Jeżeli podano nieobsługiwany kolor
      Serial.println("\nWybrales nieobslugiwany kolor!");  //Informacja o błędzie
      Serial.println("Obslugiwane kolory: Zolty, Czerwony"); //Informacja o dostępnych kolorach
    }
   
  }
   
}

Postaw piwo autorowi tego posta
 
 
Więcej szczegółów
Wystawiono 1 piw(a):
Treker
peter-wawa1 



Posty: 2
Otrzymał 1 piw(a)
Skąd: kurs
Wysłany: 12-02-2018, 22:33   

Kod programu: Zaznacz cały
//zadanie domowe 2.5

bool led1 = false;
bool led2 = false;

#define zielona 10
#define czerwona 9

String odebraneDane = ""; //Pusty ciąg odebranych danych
 
void setup() {
  Serial.begin(9600); //Uruchomienie komunikacji
  pinMode(zielona, OUTPUT); //Konfiguracja wyjść
  pinMode(czerwona, OUTPUT); 

}
 
void loop() {
  if(Serial.available() > 0) { //Czy Arduino odebrano 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, led1);
    led1 = !led1; //zmiana stanu na przeciwny
   
    }
   
    if (odebraneDane == "czerwona") { //Jeśli odebrano słowo "czerwona"
      digitalWrite(czerwona, led2);
     led2 = !led2;  //zmiana stanu na przeciwny
    }
    if ((odebraneDane != "zielona") && (odebraneDane != "czerwona")) {
      Serial.println("blad"); //komunikat jażeli slowo inne od czerwona lub zielona
    }
  }
}

Postaw piwo autorowi tego posta
 
 
Więcej szczegółów
Wystawiono 1 piw(a):
Treker
Treker 




Posty: 8520
Pomógł: 126 razy
Otrzymał 526 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 13-02-2018, 02:18   

D3binski, peter-wawa1, witam na forum :) Powodzenia w dalszej nauce!


Na udzielam odpowiedzi na pytania techniczne zadawane kanałami prywatnymi (maile, komunikatory, PW).
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
Więcej szczegółów
Wystawiono 1 piw(a):
D3binski
bonneripper 



Posty: 2
Wysłany: 03-03-2018, 12:35   Problem z kodem

Witam i pozdrawiam szanowne grono arduinowców.
Mam problem z Pana kodem:
Cytat:
void setup(){
Serial.begin(9600); //Uruchamiamy transmisję

pinMode(8, OUTPUT); //Wyjście diody czerwonej
pinMode(9, OUTPUT); //Wyjście diody zielonej
pinMode(10, INPUT_PULLUP); //Przycisk

digitalWrite(8, LOW); //Wyłączenie obu diod
digitalWrite(9, LOW);
}

void loop() {

if (digitalRead(10) == LOW) { //Jeśli przycisk jest wciśnięty
digitalWrite(9, HIGH); //Włączenie diody zielonej
digitalWrite(8, LOW); //Wyłączenie diody czerwonej
} else { //Jeśli przycisk nie jest wciśnięty
digitalWrite(9, LOW); //Wyłączenie diody zielonej
digitalWrite(8, HIGH); //Włączenie diody czerwonej
Serial.println("Uwaga! Alarm! Okno nie jest zamkniete!");

while (digitalRead(10) == HIGH) {
//Zatrzymujemy się w pustej pętli do ponownego zamknięcia okna
delay(25); //W pętli wprowadzamy małe opóźnienie 25ms, aby niwelować zakłócenia
}

}
}


Próbowałem, choć kod wygląda dobrze nie wiem czemu czerwona dioda się nie świeci (gdy okno teoretycznie jest otwarte). Czy ja coś sknociłem?
Proszę o pomoc. Pozdrawiam.

Ostatnio zmieniony przez bonneripper 03-03-2018, 12:53, w całości zmieniany 2 razy  
Postaw piwo autorowi tego posta
 
 
SOYER 



Posty: 346
Pomógł: 1 raz
Otrzymał 15 piw(a)
Skąd: Kryry
Wysłany: 03-03-2018, 14:18   

Po co ta "pusta" pętla?

Postaw piwo autorowi tego posta
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Wersja do druku

Skocz do:  

Nie rozwiązałeś swojego problemu? Zobacz podobne tematy: Kurs Arduino - #9 - ... Kurs Arduino - #8 - ... Kurs STM32 - #3 - Pł... Kurs STM32 - #2 - Po...
lub przeszukaj forum po wybranych tagach: artykulow, do, komentarze


Powered by phpBB modified by Przemo © 2003 phpBB Group
Popularne kursy: Arduinopodstawy elektroniki