Skocz do zawartości

Kurs Arduino - #6 - kontynuacja UART, serwomechanizmy


Komentator

Pomocna odpowiedź

thequeash, ponieważ prawdopodobnie przesyłasz do Arduino więcej znaków np. dodatkowe znaki końca linii. Dla każdego z nich wykonywana jest osobna instrukcja z pętli switch. Spróbuj ustawić w monitorze portu szeregowego (na dolę) opcję "Brak zakończenia linii".

Link do komentarza
Share on other sites

Zadanie 6.1

int fotoP = 0;
int fotoL = 0;
int potencjometr = 0;
boolean wyslano = false;
int liczbawcis = 0;


void setup() { 
 Serial.begin(9600); //Inicjalizacja UART
 pinMode(7, INPUT_PULLUP);
Serial.println("Uklad dokonuje pomiaru W CZASIE kiedy przycisk jest wcisniety");
Serial.println("Aby dokonac pomiaru ciaglego trzymaj wcisniety przycisk");
} 

void loop() { 

 if(digitalRead(7) == LOW){
   wyslano = true;
   liczbawcis = liczbawcis+1;
   fotoP = analogRead(A3);
   fotoL = analogRead(A4);
   potencjometr = analogRead(A5);

 }
 if(wyslano == true){
   Serial.print("Pomiar: ");
   Serial.print(liczbawcis);
   Serial.print("\t\tFoto Prawy: ");
   Serial.print(fotoP);
   Serial.print("\t\tFoto Lewy: ");
   Serial.print(fotoL);
   Serial.print("\t\tPotencjometr: ");
   Serial.println(potencjometr);

   wyslano = LOW;
   delay(1000);
 }

}

Wiem, wiem, komentarze 😉

Zadanie 6.2

#define zielona 8
#define czerwona 10
#define zolta 9
int odebraneDane = "";
boolean czer = false;
boolean ziel = false;
boolean zol = false;
boolean poczatek = false;

void setup() {
 Serial.begin(9600); //Uruchomienie komunikacji
 pinMode(czerwona, OUTPUT);
 pinMode(zielona, OUTPUT);
 pinMode(zolta, OUTPUT);
 pinMode(7, INPUT_PULLUP);


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

}

void loop() {
 if(poczatek ==false){
 Serial.println("Wpisz prosze pierwsza litere koloru diody: z-zielona, c-czerwona lub o-zolta");
 Serial.println("Ponowny wpis litery koloru spowoduje wygaszenie diody");

 poczatek = !poczatek;
 while(Serial.available() == false){}
 } 

 if(Serial.available() > 0){
   odebraneDane = Serial.read();
 }
 switch (odebraneDane) {
       case 'z':
       ziel = !ziel;
        digitalWrite(zielona, ziel);
        if(ziel == true){
        Serial.println("wlaczenie diody zielonej");
        }
        else{
         Serial.println("wylaczenie diody zielonej");
        }
        break;
       case 'c':
        czer = !czer;
        digitalWrite(czerwona, czer);
        if(czer == true){
        Serial.println("wlaczenie diody czerwonej");
        }
        else{
         Serial.println("wylaczenie diody czerwonej");
        }
        break;
      case 'o': 
       zol = !zol;
       digitalWrite(zolta, zol);
       if(zol == true){
        Serial.println("wlaczenie diody zoltej");
        }
        else{
         Serial.println("wylaczenie diody zoltej");
        }
        break;
   }
 }   

Dlaczego po zamianie if na switch teraz diody po wpisaniu komendy na okragło migają? Tak jakbym ciągle wpisywał literę (z, c, lub o). Przecież wpisałem ją raz a program kręci się w kółko na danym case...

Aktualizacja: znalazłem problem, zamknięcie jednego zawiasa w złym miejscu. Teraz jest tak i działa:

#define zielona 8
#define czerwona 10
#define zolta 9
int odebraneDane = "";
boolean czer = false;
boolean ziel = false;
boolean zol = false;
boolean poczatek = false;

void setup() {
 Serial.begin(9600); //Uruchomienie komunikacji
 pinMode(czerwona, OUTPUT);
 pinMode(zielona, OUTPUT);
 pinMode(zolta, OUTPUT);
 pinMode(7, INPUT_PULLUP);


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

}

void loop() {
 if(poczatek ==false){
 Serial.println("Wpisz prosze pierwsza litere koloru diody: z-zielona, c-czerwona lub o-zolta");
 Serial.println("Ponowny wpis litery koloru spowoduje wygaszenie diody");

 poczatek = !poczatek;
 while(Serial.available() == false){}
 } 

 if(Serial.available() > 0){
   odebraneDane = Serial.read();

 switch (odebraneDane) {
       case 'z':
       ziel = !ziel;
        digitalWrite(zielona, ziel);
        if(ziel == true){
        Serial.println("wlaczenie diody zielonej");
        }
        else{
         Serial.println("wylaczenie diody zielonej");
        }
        break;
       case 'c':
        czer = !czer;
        digitalWrite(czerwona, czer);
        if(czer == true){
        Serial.println("wlaczenie diody czerwonej");
        }
        else{
         Serial.println("wylaczenie diody czerwonej");
        }
        break;
      case 'o': 
       zol = !zol;
       digitalWrite(zolta, zol);
       if(zol == true){
        Serial.println("wlaczenie diody zoltej");
        }
        else{
         Serial.println("wylaczenie diody zoltej");
        }
        break;
 }
 }
}   

Co do zadania 6.3 to jeszcze nie wymyśliłem jak zrobić kalibrację programową, może mała podpowiedź 😉, ale taki układ z dwoma fotorezystorami i serwem, świetnie nadawał by się do sterowania położeniem paneli fotowoltanicznych lub paneli słonecznych podgrzewających CWU.

Link do komentarza
Share on other sites

Wiem, wiem, komentarze

Skoro wiesz, to już połowa sukcesu - teraz warto je stosować 😉

Co do zadania 6.3 to jeszcze nie wymyśliłem jak zrobić kalibrację programową, może mała podpowiedź

Możesz przykładowo podawać skrajne pozycje sera przez UART lub ustawiać je za pomocą potencjometru - próbuj różnych metod. Nawet jeśli całość będzie mało praktyczna, to zawsze będzie to dobrym ćwiczeniem programistycznym 😉

Link do komentarza
Share on other sites

Dzięki Treker. Myślałem raczej, że to jakiś mój program sam skalibruje... tak "z ręki" to raczej łatwo... :->

Mam pytanie 😅

Czy dla switcha jest jakiś else, bo nic takiego nie znalazłem....

np

switch(costam){
  case 'a':
  digitalWrite(led, HIGH);
  else
  digitalWrite(led, LOW);
  case 'b':
  digitalWrite(led2, HIGH);
  else
  digitalWrite(led2, LOW);
}

Wiem, że to nie działa, ale chodzi mi o to, by jeśli "warunek" 'b' przestał się spełniać to wyłączało led2 itd... Czy takie cóś to tylko na if-ach?

Dzięki

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

No ale przecież każdy case jest wyjątkowy. Wszystkie inne są z definicji dla niego "elsami", nieprawdaż? Zawsze wykona się tylko jeden case. Instrukcja switch ma coś takiego jak przypadek "default:" gdzie wpisujesz kod wykonywany gdy żaden case nie pasował.

A Twój kod możesz napisać tak:

switch(costam){ 
  case 'a': 
     digitalWrite(led, HIGH); 
     digitalWrite(led2, LOW); 
     break;                        // to jest ważne, bez break procesor pojedzie dalej w dół i "wjedzie" do case 'b'!
  case 'b': 
     digitalWrite(led, LOW); 
     digitalWrite(led2, HIGH); 
     break;
  default:
     digitalWrite(led, LOW); 
     digitalWrite(led2, LOW); 
     break;
}
Link do komentarza
Share on other sites

No do tego to doszedłem sam:

#include <SimpleDHT.h>
#include <LiquidCrystal.h> //Dołączenie bilbioteki
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Informacja o podłączeniu nowego wyświetlacza

int maphum;
int pinDHT11 = 13;
SimpleDHT11 dht11;
#define led1 10 
#define led2 12
#define led3 9
#define led4 11 
#define led5 8
void setup() {
 pinMode(led1, OUTPUT); 
 pinMode(led2, OUTPUT); 
 pinMode(led3, OUTPUT); 
 pinMode(led4, OUTPUT); 
 pinMode(led5, OUTPUT); 
 digitalWrite(led1, LOW); 
 digitalWrite(led2, LOW); 
 digitalWrite(led3, LOW); 
 digitalWrite(led4, LOW); 
 digitalWrite(led5, LOW);
 Serial.begin(9600);
}

void loop() {
 byte temperature = 0;
 byte humidity = 0;
 dht11.read(pinDHT11, &temperature, &humidity, NULL);
 maphum = map(((int)humidity), 10, 95, 1, 5);
 lcd.begin(16, 2);
 lcd.setCursor(0, 0);
 lcd.print("Wilg.: ");
 lcd.print((int)humidity);
 lcd.print("%RH");
 lcd.setCursor(0, 1);
 lcd.print("Temp.: ");
 lcd.print((int)temperature);
 lcd.print("*C");
 switch(maphum){
   case 1:
 digitalWrite(led1, HIGH); 
 digitalWrite(led2, LOW); 
 digitalWrite(led3, LOW); 
 digitalWrite(led4, LOW); 
 digitalWrite(led5, LOW);
   break;
   case 2:
 digitalWrite(led1, LOW); 
 digitalWrite(led2, HIGH); 
 digitalWrite(led3, LOW); 
 digitalWrite(led4, LOW); 
 digitalWrite(led5, LOW);
   break;
   case 3:
 digitalWrite(led1, LOW); 
 digitalWrite(led2, LOW); 
 digitalWrite(led3, HIGH); 
 digitalWrite(led4, LOW); 
 digitalWrite(led5, LOW);
   break;
   case 4:
 digitalWrite(led1, LOW); 
 digitalWrite(led2, LOW); 
 digitalWrite(led3, LOW); 
 digitalWrite(led4, HIGH); 
 digitalWrite(led5, LOW);
   break;
   case 5:
 digitalWrite(led1, LOW); 
 digitalWrite(led2, LOW); 
 digitalWrite(led3, LOW); 
 digitalWrite(led4, LOW); 
 digitalWrite(led5, HIGH);;
   break;
 }
 Serial.println(maphum);


 delay(1500);
}

Tylko ile to pisania, chodziło mi o jakąś skrótową wersję... Bo przecież switch to miał być do skrócenia if-ów.

Coś w stylu:

case 1:
digitalWrite(led1, HIGH);
break;
case !1:
digitalWrite(led1, LOW):
break;

To też nie działa, ale oddaje o co mi chodzi....

Link do komentarza
Share on other sites

switch nie jest "do skracania if'ów". To inna konstrukcja. Język C zawiera ich kilka i w ramach nich się poruszasz. If jest prostym rozgałęzieniem dwudrogowym, switch wielodrogowym a to wyczerpuje zasób "..drogowości" - nie potrzebujesz już niczego innego. Nie walcz z tym językiem. Zamiast tego spróbuj w nim myśleć. Przeczytaj o wszystkich instrukcjach sterowania przebiegiem (if, switch, do-while, for) i tak układaj działania swojego programu by naturalnie do nich pasowały. Teoretycy mówią, że C jest językiem pełnym, więc można w nim wyrazić każdy algorytm. To czy łatwo czy trudno to już kwestia oceny. W porównaniu do innych języków funkcyjnych C jest moim zdaniem proste. To zaleta, ale i wada. Na "braki" C (lub dowolnego innego języka) spójrz z innej strony: tu nie ma niczego przypadkowego, wymyślili to bardzo mądrzy ludzie a wielu innych przez lata to szlifowało. Jeżeli coś Ci nie pasuje to znaczy, że czegoś nie wiesz bo przecież nie masz kompetencji by kontestować taki dorobek. Na obecnym etapie nauki możesz nie dostrzegać wielu aspektów, które tłumaczą taką a nie inną semantykę języka.

A wracając do meritum: jak sobie wyobrażasz działanie tego "else" w przypadku instrukcji switch. Jak chciałbyś wyrażać to "else" w stosunku do każdego case'a? Zastanów się chwilę i zaproponuj swoje rozsądne rozwiązanie, chętnie je usłyszę. Skoro jest to rozgałęzienie wielodrogowe, to wchodzimy tylko w jedną drogę wybraną z wielu a za chwilę (po nawiasie zamykającym ciało switch'a) wszystkie te drogi znów schodzą się w jedną. Napotykając instrukcję switch procesor oblicza wartość wyrażenia w nawiasie a następnie porównuje ją po kolei ze wszystkimi stałymi wpisanymi przy słowach case. Tylko jedna przypasuje i ten fragment kodu wykonujemy. Jeśli akurat ta nie pasuje, następuje sprawdzenie następnego case'a a gdy żaden nie "zaskoczy", wykonuje się kod umieszczony za nieobowiązkowym "default". Zwykle w każdym case umieszczasz tylko ten kod, który obsługuje tylko ten przypadek. Niestety, jeśli w kilku z nich musisz zrobić to samo, musisz to napisać explicite. W takich wypadkach używaj funkcji, np:

void zgas_diody()
{
 digitalWrite(led1, LOW); 
 digitalWrite(led2, LOW); 
 digitalWrite(led3, LOW); 
 digitalWrite(led4, LOW); 
 digitalWrite(led5, LOW); 
}

 zgaś_diody();
 switch(maphum){ 
   case 1: 
 digitalWrite(led1, HIGH); 
   break; 
   case 2: 
 digitalWrite(led2, HIGH); 
   break; 
   case 3: 
 digitalWrite(led3, HIGH); 
   break; 
   case 4: 
 digitalWrite(led4, HIGH); 
   break; 
   case 5: 
 digitalWrite(led5, HIGH);
   break; 
 } 

Wygląda lepiej? To co powiesz na coś takiego:

const uint8_t LICZBA_DIODEK = 5;
uint8_t tablica diodek[LICZBA_DIODEK] = {led1, led2, led3, led4, led5};

zgas_diody();
if (maphum > 0)
 digitalWrite(tablica_diodek[maphum > LICZBA_DIODEK ? LICZBA_DIODEK-1 : maphum-1], HIGH);

Hm? Narzekanie że w switch nie ma else to jak marudzenie, że w samochodzie z automatem nie ma wajchy od biegów.. Po prostu więcej jeździj aż się przyzwyczaisz 🙂

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Ok, rozumiem. Dzięki.

Jak działa twoje funkcja zgas diody(). Bo na kursie poznaliśmy funkcję setup uruchamianą raz przy starcie i loop kręcącą się w kółko.

Ta funkcja wyłącza wszystkie diody i włącza poszczególne tylko w przypadku case(ktoryśtam).

Ale to też powinno działać w pętli żeby sprawdzać czy coś się zmieniło na czujniku...

Edit. Już doczytałem o nowych funkcjach, rozumiem dzięki jeszcze raz 😉

Link do komentarza
Share on other sites

SOYER, możesz jeszcze spróbować inaczej podejść do problemu. Zamiast zastanawiać się - co zrobię jeśli wartość maphum wynosi 3, pomyśl kiedy zapalam diodę led3.

Wtedy mógłbyś otrzymać program typu:

if (maphum == 3)
 digitalWrite(led3, HIGH);
else
 digitalWrite(led3, LOW);

Nie byłoby powtarzania kodu, ani migania diodami jak w propozycji Marka.

Mogłbyś nawet zrobić z tego fragmentu kodu funkcję, ale to pewnie kolejny etap.

Jeśli lubisz krótkie programy to zawsze można zapisać to tak:

digitalWrite(led3, (maphum == 3) ? HIGH : LOW);

Ale nie jestem przekonany czy to czytelna postać...

Inna sprawa, że jak wcześniej dyskutowaliśmy HIGH ma wartość 1, LOW = 0, więc można zrobić nawet tak:

digitalWrite(led, maphum == 3);

To już strasznie C-style, ale za to jakie krótkie. Jak dla mnie lepiej zostać przy if-else i ew. pomyśleć o funkcjach lub tablicach, ale podaję inne opcje na wypadek długiej dyskusji że można inaczej 🙂

Link do komentarza
Share on other sites

Dzięki Elvis. W if-ach wiedziałem jak to zrobić ale, że akurat przerabiałem switch-a to chciałem potrenować, no i podpytywałem, bo na stronie Arduino właśnie było napisane, że własnie tylko case i default. Trochę nie pasowało do mojej koncepcji 😅 i chciałem się dowiedzieć czy są jakieś myki do switcha. Marek1707 trochę podpowiedział🙂.

Link do komentarza
Share on other sites

Hej,
właśnie ukończyłem wskaźnik światła:

#include <Servo.h>
Servo motorek;

void setup() {
 Serial.begin(9600);
 motorek.attach(3);
 motorek.write(180);
}

void loop() {
 int fotorezystor= analogRead(A5);
 int pozycja=map(fotorezystor,300,1000, 90, 170);
 motorek.write(pozycja);
 delay(30);

}

Po dłuższej kalibracji i zabawy z servem pare pytań:

1) Zauważyłem, że jeśli do serwomechanizmu puścimy pozycje mniejszą niż 20 zaczyna wariować (kręci się w kółko). Zakres jest niby 0-180. Czy to poprostu wina tego konkretnego egzemplarza?

2) Jeśli arduino zasilę baterią 9V (no, 8.25V) serwo ledwo działa (tylko buczy niechętnie). Jeśli podłącze arduino do zasilacza i ustawię na nim 12v - układ działa, ale zdażają mi się (serwomechanizmowi) dziwne odchyły i zwiechy. Gdy ustawię napięcie na 16v wszystko działa elegancko (niby arduino uciąga do 20v). Czy to też zależy od konretnego serwa?

[ Dodano: 25-12-2017, 10:10 ]

Wersja ulepszona z kalibracja strzalki (0%-100%) potencjometrem oraz kalibracja światla

#include <Servo.h>
Servo motorek;
int procent0=0;
int procent100=0;
int ciemno=0;
int jasno=0;
int sukces=0;

void kalibracja()
{
 Serial.println("Trwa kalibracja strzalki, ustaw strzalke na 0% i wcisnij guzik");
 int potencjometr=0;
 sukces=0;
 while (sukces==0)
 {
   potencjometr=analogRead(A4);
   potencjometr=map(potencjometr,0,1023,30,180);
   motorek.write(potencjometr);
   delay(200);
   procent0=potencjometr;
   if (digitalRead(7)==LOW){sukces=1;}
 }
 Serial.print("Ustalono 0% na poziomie: "); Serial.println(procent0);
 delay(2000);
 Serial.println("Trwa kalibracja, ustaw strzalke na 100% i wcisnij guzik");
 while (sukces==1)
 {
   potencjometr=analogRead(A4);
   potencjometr=map(potencjometr,0,1023,30,180);
   motorek.write(potencjometr);
   delay(200);
   procent100=potencjometr;
   if (digitalRead(7)==LOW){sukces=2;}
 }
 Serial.print("Ustalono 100% na poziomie: "); Serial.println(procent100);
 }

void kalibracja_swiatla()
{
 delay(1000);
 Serial.println("Trwa kalibracja swiatla, wylacz zupelnie swiatlo wcisnij guzik");
 while (digitalRead(7)==HIGH){}
 ciemno=analogRead(A5);
 delay(1000);
 Serial.print("Bez swiatla:");Serial.println(ciemno);
 Serial.println("Trwa kalibracja swiatla, wlacz  swiatlo wcisnij guzik");
 while (digitalRead(7)==HIGH){}
 jasno=analogRead(A5);
 delay(1000);
 Serial.print("Ze swiatlem:");Serial.println(jasno);
 sukces=3;
}

void setup() {
 Serial.begin(9600);
 motorek.attach(3);
 motorek.write(180);
 pinMode(7, INPUT_PULLUP);
 kalibracja();
 kalibracja_swiatla(); 
}

void loop() {

 while (sukces!=3){}
 int fotorezystor= analogRead(A5);
 int pozycja=map(fotorezystor,jasno,ciemno, procent100, procent0);
 motorek.write(pozycja);
 delay(300);

}

Pytania jednak z poprzedniego postu zostają, ktoś jest w stanie pomóc?

Link do komentarza
Share on other sites

wachu, powiedz na wstępie czy elementy, które używasz są z zestawów Forbota. To wiele ułatwi 😉 Już tłumaczę dlaczego:

1) Serwomechanizmy - niedawno na rynku pojawiła się (bez ostrzeżenia ze strony producenta) inna wersja serwomechanizmów, które wyglądają identycznie jak poprzednie. Nie posiadają jednak mechanicznej blokady. Z jednej strony działa to na plus, bo ciężej uszkodzić przekładnię. Z drugiej strony mają spory minus, który sam zauważyłeś. Podanie sygnału o małym wypełnieniu (praktycznie losowym dla każdego egzemplarza) sprawia, że silnik zaczyna się obracać w koło i nie ma się nad tym żadnej kontroli... Jest to bardzo dziwne zachowanie dlatego testujemy wszystkie serwa i do zestawów trafiają tylko te z blokadami, aby nie było takich niespodzianek. Jeśli masz nasz zestaw i trafiłeś taki egzemplarz, to daj znać - wymienimy 🙂

2) Bateria - zasilanie silników z baterii 9V, to nie jest najlepszy pomysł, ale metoda ta spokojnie wystarcza na wykonanie kilku eksperymentów opisanych w kursie. Wszystko zależy też od konkretnej baterii (mają różne pojemności, różne rezystancje wewnętrzne). W zestawach umieszczamy takie baterie, które sprawdzają się w tym zastosowaniu dobrze. Więc po podłączeniu nowej baterii serwo musi ruszyć, nie ma innej opcji. Jeśli bateria jest inna lub została wcześniej rozładowana. To faktycznie mogą pojawić się takie problemy.

3) Zasilacz zewnętrzny - bardzo dziwna sprawa. Jeśli ma on wystarczającą wydajność, to nie powinno być prawie żadnej różnicy, czy zasilasz układ z 7V, czy z 12V. Powiem nawet więcej - im wyższe napięcie tym gorzej, bo masz bardzo duże straty na stabilizatorze. Twoje 16V to podejrzanie dużo... Więcej o mocy znajdziesz w tym artykule: Czym jest moc? Jak dobrać odpowiednie elementy?

Link do komentarza
Share on other sites

KOD PROGRAMU 🤣 :

#include <Servo.h> //Biblioteka odpowiedzialna za serwa
#define guzik 8
int swiatlo = 0;
int pozycja = 0;
int najciem = 0;
int najjas = 900;
int najciemp = 0;
int najjasp = 900;

Servo serwomechanizm;  //Tworzymy obiekt, dzięki któremu możemy odwołać się do serwa 


void setup() 
{ 
 serwomechanizm.attach(11);  //Serwomechanizm podłączony do pinu 9
 Serial.begin (9600);
 Serial.println ("Aby skalibrować wcisnij guzik");
 pinMode (guzik, INPUT_PULLUP);

} 

void loop() 
{  
   swiatlo = analogRead(A5);
   pozycja = map (swiatlo, najciem, najjas, 180, 0);
   serwomechanizm.write(pozycja); //Wykonaj ruch 
   if (digitalRead (guzik) == LOW) {
      Serial.println ("Rozpoczales kalibracje.");
      delay (300);
      Serial.println ("Ustaw najmniejsze oswietlenie i wcisnij guzik.");
      while (digitalRead (guzik) == HIGH) {delay (25);}
      najciemp = analogRead(A5);
      Serial.println ("Zapisano :)");
      delay (300);
      Serial.println ("Teraz ustaw najjasniejsze oswietlenie i wcisnij guzik.");
      while (digitalRead (guzik) == HIGH) {delay (25);}
      najjasp = analogRead(A5);
      Serial.println ("Zapisano :)");
      delay (300);
      if (najciemp > najjasp) {
       Serial.println ("Co ty robisz losiu!?");
       Serial.println ("Najciemniejsze oswietlenie jest jasniejsze od najjasniejszego!");
       delay (300);
       Serial.println ("Kalibracja zakonczona niepowodzeniem :(");
      }
      else { 
      Serial.println ("Kalibracja zakonczona powodzeniem!");
      najciem = najciemp;
      najjas = najjasp;
      }
      Serial.println ("Aby skalibrowac jeszcze raz wcisnij guzik");
   }
   delay(100);                   
}
Link do komentarza
Share on other sites

zadanie 6.1

int potencjometr = 0;
int fotorezystor = 0;
int fotorezystorek = 0;
int zliczanie = 0;
int czas = 800;
#define przycisk 8
void setup() {
 Serial.begin(9600);
 pinMode(przycisk, INPUT_PULLUP);// ustawienie przycisku jako wejście
}

void loop() {
 potencjometr = analogRead(A5);// odczytanie wartości z pinów
 fotorezystor = analogRead(A4);
 fotorezystorek = analogRead(A3);
 if (digitalRead(przycisk) == LOW){//sprawdzenie czy przycisk jest wciśnięty
   delay(czas);
   Serial.print("fotorezystor:");//wypisanie danych
   Serial.print(fotorezystor);
   Serial.print("\t fotorezystorek:");
   Serial.print(fotorezystorek);
   Serial.print("\t potencjometr:");
   Serial.print(potencjometr);
   zliczanie = zliczanie + 1;//dodaje kliknięcia przycisku
   Serial.print("\t przycisk wciśnięto:");
   Serial.println(zliczanie);
 }
}
Link do komentarza
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!

Anonim
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...

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.