• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Prośba o pomoc
#1
Witam, wszystkich. 
Zbudowałem sterownik do wyciągu kuchennego, ponieważ stary uległ uszkodzeniu. 
Niestety wygląda na to, że moja wiedza z zakresu programowania jest niewystarczająca i potrzebuję pomocy fachowców.


Może na początek budowa i zasada działania sterownika:
Sterownik posiada 5 przekaźników, które sterują oświetleniem oraz poszczególnymi biegami wentylatora.
Przekaźnik 1 - włącza i wyłącza oświetlenie,
Przekaźnik 2 - pierwszy bieg wentylatora,
Przekaźnik 3 - drugi bieg wentylatora,
Przekaźnik 4 - trzeci bieg wentylatora,
Przekaźnik 5 - czwarty bieg wentylatora.
Przekaźnik 1 działa niezależnie od pozostałych, natomiast przekaźniki od 2 do 5 działają w taki sposób, że w jednym momencie załączony jest tylko jeden z nich.
Przakaźniki sterowane są za pomocą przycisków monostabilnych:
Przycisk 1 - sygnał do włączenia lub wyłączenia oświetlenia,
Przycisk 2 - sygnał do włączenia lub wyłączenia zasilania wentylatora - od razu załącza pierwszy bieg wentylatora
Przycisk 3 - zmniejszenie biegu wentylatora,
Przycisk 4 - zwiększenie biegu wentylatora.
Wciśnięcie przycisku 2 włącza wentylator w przypadku kiedy był wyłączony i wyłącza wentylator niezależnie od tego na którym biegu pracuje.
Wciśnięcie przycisku 3 zmniejsza biegi wentylatora aż do całkowitego wyłączenia zasilania wentylatora.
Wciśnięcie przycisku 4 zwiększa biegi wentylatora pod warunkiem, że załączone jest zasilanie wentylatora (przyciskiem 2).

Całość sterowana jest przez Arduino Pro Mini.

Napisałem już kilka wersji programu ale żadna nie działa tak jak trzeba. 
Może ktoś mógłby pomóc.

Przy okazji pytanie dodatkowe: czy zna ktoś niezawodny sposób na zaprogramowanie przycisku tak, żeby wciśnięcie danego przycisku spowodowało przesłanie jednego i tylko jednego sygnału do Arduino? U mnie zawsze prędzej czy później pojawiają się błędy. Np. wciśnięcie przycisku ma zwiększać licznik impulsów o jeden a czasem zwiększa o 2 lub więcej.
 Z góry dziekuję za odpowiedź.

Kod:
#define Relay1 2
#define Relay2 3
#define Relay3 4
#define Relay4 5
#define Relay5 6

#define Guzik1 A3
#define Guzik2 A2
#define Guzik3 A1
#define Guzik4 A0

#define Led1 13
#define Led2 12
#define Led3 11
#define Led4 10
#define Led5 7
#define Led6 8
#define wolne 9

int stanGuzika1;
int stanGuzika2;
int stanGuzika3;
int stanGuzika4;

int poprzedniStanGuzika1 = 1;
int poprzedniStanGuzika2 = 1;
int poprzedniStanGuzika3 = 1;
int poprzedniStanGuzika4 = 1;

int timeGuzik1 = 0;
int timeGuzik2 = 0;
int timeGuzik3 = 0;
int timeGuzik4 = 0;

int stanLed1 = 0;
int zasilanieWentylatora = 0;
int licznik = 0;

void setup() {

Serial.begin(9600); // Serial uruchomiony w celach testowych
 
 pinMode(Relay1, OUTPUT); // Przekaźnik do sterowania oświetleniem
 pinMode(Relay2, OUTPUT); // Prędkość 1
 pinMode(Relay3, OUTPUT); // Prędkość 2
 pinMode(Relay4, OUTPUT); // Prędkość 3
 pinMode(Relay5, OUTPUT); // Prędkość 4
 pinMode(Led1, OUTPUT); // Dioda pokazująca stan przekaźnika oświetlenia
 pinMode(Led2, OUTPUT); // Dioda pokazująca stan zasilania wentylatora (bieg pierwszy - załączone diody 2, 3)
 pinMode(Led3, OUTPUT); // Dioda pokazująca stan przekaźnika 2 (bieg pierwszy diody j.w.)
 pinMode(Led4, OUTPUT); // Dioda pokazująca stan przekaźnika 3 (bieg drugi - załączone diody 2, 3, 4)
 pinMode(Led5, OUTPUT); // Dioda pokazująca stan przekaźnika 4 (bieg trzeci - załączone diody 2, 3, 4, 5)
 pinMode(Led6, OUTPUT); // Dioda pokazująca stan przekaźnika 5 (bieg czwarty - załączone diody 2, 3, 4, 5, 6)

 pinMode(wolne, OUTPUT); // Wyjście zapasowe

 pinMode(Guzik1, INPUT_PULLUP); // Przycisk przełączający stan oświetlenia  
 pinMode(Guzik2, INPUT_PULLUP); // Przycisk włączający zasilanie wentylatora + pierwszy bieg
 pinMode(Guzik3, INPUT_PULLUP); // Przycisk zmniejszający biegi wentylatora
 pinMode(Guzik4, INPUT_PULLUP); // Przycisk zwiększający biegi wentylatora

 digitalWrite(Relay1, LOW);
 digitalWrite(Relay2, LOW);
 digitalWrite(Relay3, LOW);
 digitalWrite(Relay4, LOW);
 digitalWrite(Relay5, LOW);
 digitalWrite(Led1, stanLed1);
 digitalWrite(Led2, LOW);
 digitalWrite(Led3, LOW);
 digitalWrite(Led4, LOW);
 digitalWrite(Led5, LOW);
 digitalWrite(Led6, LOW);

 digitalWrite(wolne, LOW);

 digitalWrite(Guzik1, HIGH);
 digitalWrite(Guzik2, HIGH);
 digitalWrite(Guzik3, HIGH);
 digitalWrite(Guzik4, HIGH);

}

void loop() {
 oswietlenie();
 zasilanie_wentylatora();
 bieg_wentylatora_plus();
 bieg_wentylatora_minus();
 biegi_wentylatora();
}

void oswietlenie() {
 
 // Załączanie/wyłączanie światła
int odczytGuzika1 = digitalRead(Guzik1);
 if(odczytGuzika1 != poprzedniStanGuzika1) {
   timeGuzik1 = millis();
 }
 if(millis() - timeGuzik1 > 100UL) {
   if(odczytGuzika1 != stanGuzika1) {
     stanGuzika1 = odczytGuzika1;

     if(stanGuzika1 == LOW) {
       stanLed1 = !stanLed1;
     }
   }
 }
 digitalWrite(Relay1, stanLed1);
 digitalWrite(Led1, stanLed1);
 poprzedniStanGuzika1 = odczytGuzika1;
}

void zasilanie_wentylatora() {
// główny przycisk załączenie wentylatora - pierwszy bieg
 int odczytGuzika2 = digitalRead(Guzik2);
 if(odczytGuzika2 != poprzedniStanGuzika2) {
   timeGuzik2 = millis();
 }
 if(millis() - timeGuzik2 > 100UL) {
   if(odczytGuzika2 != stanGuzika2) {
     stanGuzika2 = odczytGuzika2;

     if(stanGuzika2 == LOW) {
        if (licznik < 1){
           licznik++;
         }
        else if(licznik > 0) {
         licznik--;
         }
       
        Serial.println("licznik:");
        Serial.println(licznik);
     }
   }
 }
 poprzedniStanGuzika2 = odczytGuzika2;
}

void bieg_wentylatora_plus() {

 int odczytGuzika4 = digitalRead(Guzik4);
  if(licznik > 0){
   if(odczytGuzika4 != poprzedniStanGuzika4) {
     timeGuzik4 = millis();
   }
   if(millis() - timeGuzik4 > 100UL) {
     if(odczytGuzika4 != stanGuzika4) {
       stanGuzika4 = odczytGuzika4;

       if(stanGuzika4 == LOW) {
         if(licznik >= 0 && licznik < 4) {
           licznik++;
           Serial.println("licznik:");
           Serial.println(licznik);
         }      
       }
     }
   }
   poprzedniStanGuzika4 = odczytGuzika4;
}
}
void bieg_wentylatora_minus(){
   int odczytGuzika3 = digitalRead(Guzik3);
   if(odczytGuzika3 != poprzedniStanGuzika3) {
     timeGuzik3 = millis();
   }
   if(millis() - timeGuzik3 > 100UL) {
     if(odczytGuzika3 != stanGuzika3) {
       stanGuzika3 = odczytGuzika3;

       if(stanGuzika3 == LOW) {
         if(licznik > 0 && licznik <= 4) {
           licznik--;
           Serial.println("licznik:");
           Serial.println(licznik);
         }      
       }
     }
   }
   poprzedniStanGuzika3 = odczytGuzika3;
}
void biegi_wentylatora() {
   switch(licznik) {
   
   case 0:  // wentylator wyłączony
        digitalWrite(Relay2, LOW);
        digitalWrite(Relay3, LOW);
        digitalWrite(Relay4, LOW);
        digitalWrite(Relay5, LOW);
        digitalWrite(Led2, LOW);
        digitalWrite(Led3, LOW);
        digitalWrite(Led4, LOW);
        digitalWrite(Led5, LOW);
        digitalWrite(Led6, LOW);
        break;
    case 1:  // pierwszy bieg
        digitalWrite(Relay2, HIGH);
        digitalWrite(Relay3, LOW);
        digitalWrite(Relay4, LOW);
        digitalWrite(Relay5, LOW);
        digitalWrite(Led2, HIGH);
        digitalWrite(Led3, HIGH);
        digitalWrite(Led4, LOW);
        digitalWrite(Led5, LOW);
        digitalWrite(Led6, LOW);
        break;  
    case 2:  // drugi bieg
        digitalWrite(Relay2, LOW);
        digitalWrite(Relay3, HIGH);
        digitalWrite(Relay4, LOW);
        digitalWrite(Relay5, LOW);
        digitalWrite(Led2, HIGH);
        digitalWrite(Led3, HIGH);
        digitalWrite(Led4, HIGH);
        digitalWrite(Led5, LOW);
        digitalWrite(Led6, LOW);
        break;  
    case 3:  // trzeci bieg
        digitalWrite(Relay2, LOW);
        digitalWrite(Relay3, LOW);
        digitalWrite(Relay4, HIGH);
        digitalWrite(Relay5, LOW);
        digitalWrite(Led2, HIGH);
        digitalWrite(Led3, HIGH);
        digitalWrite(Led4, HIGH);
        digitalWrite(Led5, HIGH);
        digitalWrite(Led6, LOW);
        break;  
    case 4:  //czwarty bieg
        digitalWrite(Relay2, LOW);
        digitalWrite(Relay3, LOW);
        digitalWrite(Relay4, LOW);
        digitalWrite(Relay5, HIGH);
        digitalWrite(Led2, HIGH);
        digitalWrite(Led3, HIGH);
        digitalWrite(Led4, HIGH);
        digitalWrite(Led5, HIGH);
        digitalWrite(Led6, HIGH);
        break;  
  }                
}

Edit. Trochę poprawiłem kod.
 
Odpowiedź
#2
Z przyciskami to zależy jakie przyciski, jeden może mieć drgania 10, a inny 100ms. Sposobów jest wiele, najprostszy to użycie biblioteki bounce2, easy button czy co tam sobie wybierzesz. Przyciski można też obsługiwać przerwaniami. Zwiększenie pewności dokładnie jednego naciśnięcia to po prostu zwiększenie czasu w jakim kolejne wciśnięcie jest ignorowane. Np. ustaliłem, że zablokowanie przerwania na 150ms, potem wyzerowanie flag i ponowna aktywacja mojemu przyciskowi i mojemu paluchowi wystarcza, ale można to zwiększyć nawet do 1000, po prostu dwóch przyciśnięć w ciągu sekundy uC nie zauważy.
Ja używam bounce2. Użyj biblioteki i zwiększaj czas debounce aż wciśnięcie będzie jednoznaczne.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
Dzięki za odpowiedź.
Przyciski są typu micro switch.
Po ostatnich poprawkach w kodzie wszystko działa jakby lepiej ale niestety problemy są takie, że czasem przy zwiększaniu biegów zwiększa się nie o jeden a o trzy albo przy wyłączaniu zasilania wentylatora wyłącza się światło. Tak jakby arduino się resetowało.

Kod:
#define Relay1 2
#define Relay2 3
#define Relay3 4
#define Relay4 5
#define Relay5 6

#define Guzik1 A3
#define Guzik2 A2
#define Guzik3 A1
#define Guzik4 A0

#define Led1 13
#define Led2 12
#define Led3 11
#define Led4 10
#define Led5 7
#define Led6 8
#define wolne 9

int stanGuzika1;
int stanGuzika2;
int stanGuzika3;
int stanGuzika4;

int poprzedniStanGuzika1 = 1;
int poprzedniStanGuzika2 = 1;
int poprzedniStanGuzika3 = 1;
int poprzedniStanGuzika4 = 1;

int timeGuzik1 = 0;
int timeGuzik2 = 0;
int timeGuzik3 = 0;
int timeGuzik4 = 0;

int stanLed1 = 0;
int zasilanieWentylatora = 0;
int licznik = 0;

void setup() {

Serial.begin(9600); // Serial uruchomiony w celach testowych
 
 pinMode(Relay1, OUTPUT); // Przekaźnik do sterowania oświetleniem
 pinMode(Relay2, OUTPUT); // Prędkość 1
 pinMode(Relay3, OUTPUT); // Prędkość 2
 pinMode(Relay4, OUTPUT); // Prędkość 3
 pinMode(Relay5, OUTPUT); // Prędkość 4
 pinMode(Led1, OUTPUT); // Dioda pokazująca stan przekaźnika oświetlenia
 pinMode(Led2, OUTPUT); // Dioda pokazująca stan zasilania wentylatora (bieg pierwszy - załączone diody 2, 3)
 pinMode(Led3, OUTPUT); // Dioda pokazująca stan przekaźnika 2 (bieg pierwszy diody j.w.)
 pinMode(Led4, OUTPUT); // Dioda pokazująca stan przekaźnika 3 (bieg drugi - załączone diody 2, 3, 4)
 pinMode(Led5, OUTPUT); // Dioda pokazująca stan przekaźnika 4 (bieg trzeci - załączone diody 2, 3, 4, 5)
 pinMode(Led6, OUTPUT); // Dioda pokazująca stan przekaźnika 5 (bieg czwarty - załączone diody 2, 3, 4, 5, 6)

 pinMode(wolne, OUTPUT); // Wyjście zapasowe

 pinMode(Guzik1, INPUT_PULLUP); // Przycisk przełączający stan oświetlenia  
 pinMode(Guzik2, INPUT_PULLUP); // Przycisk włączający zasilanie wentylatora + pierwszy bieg
 pinMode(Guzik3, INPUT_PULLUP); // Przycisk zmniejszający biegi wentylatora
 pinMode(Guzik4, INPUT_PULLUP); // Przycisk zwiększający biegi wentylatora

 digitalWrite(Relay1, LOW);
 digitalWrite(Relay2, LOW);
 digitalWrite(Relay3, LOW);
 digitalWrite(Relay4, LOW);
 digitalWrite(Relay5, LOW);
 digitalWrite(Led1, stanLed1);
 digitalWrite(Led2, LOW);
 digitalWrite(Led3, LOW);
 digitalWrite(Led4, LOW);
 digitalWrite(Led5, LOW);
 digitalWrite(Led6, LOW);

 digitalWrite(wolne, LOW);

 digitalWrite(Guzik1, HIGH);
 digitalWrite(Guzik2, HIGH);
 digitalWrite(Guzik3, HIGH);
 digitalWrite(Guzik4, HIGH);

}

void loop() {
 oswietlenie();
 zasilanie_wentylatora();
 bieg_wentylatora_plus();
 bieg_wentylatora_minus();
 biegi_wentylatora();
}

void oswietlenie() {
 
 // Załączanie/wyłączanie światła
int odczytGuzika1 = digitalRead(Guzik1);
 if(odczytGuzika1 != poprzedniStanGuzika1) {
   timeGuzik1 = millis();
 }
 if(millis() - timeGuzik1 > 150UL) {
   if(odczytGuzika1 != stanGuzika1) {
     stanGuzika1 = odczytGuzika1;

     if(stanGuzika1 == LOW) {
       stanLed1 = !stanLed1;
     }
   }
 }
 digitalWrite(Relay1, stanLed1);
 digitalWrite(Led1, stanLed1);
 poprzedniStanGuzika1 = odczytGuzika1;
}

void zasilanie_wentylatora() {
// główny przycisk załączenie wentylatora - pierwszy bieg
 int odczytGuzika2 = digitalRead(Guzik2);
 if(odczytGuzika2 != poprzedniStanGuzika2) {
   timeGuzik2 = millis();
 }
 if(millis() - timeGuzik2 > 150UL) {
   if(odczytGuzika2 != stanGuzika2) {
     stanGuzika2 = odczytGuzika2;

     if(stanGuzika2 == LOW) {
        if (licznik < 1){
           licznik++;
         }
        else if(licznik > 0) {
         licznik = 0;
         }
       
        Serial.println("licznik:");
        Serial.println(licznik);
     }
   }
 }
 poprzedniStanGuzika2 = odczytGuzika2;
}

void bieg_wentylatora_plus() {

 int odczytGuzika4 = digitalRead(Guzik4);
  if(licznik > 0){
   if(odczytGuzika4 != poprzedniStanGuzika4) {
     timeGuzik4 = millis();
   }
   if(millis() - timeGuzik4 > 150UL) {
     if(odczytGuzika4 != stanGuzika4) {
       stanGuzika4 = odczytGuzika4;

       if(stanGuzika4 == LOW) {
         if(licznik >= 0 && licznik < 4) {
           licznik++;
           Serial.println("licznik:");
           Serial.println(licznik);
         }      
       }
     }
   }
   poprzedniStanGuzika4 = odczytGuzika4;
}
}
void bieg_wentylatora_minus(){
   int odczytGuzika3 = digitalRead(Guzik3);
   if(odczytGuzika3 != poprzedniStanGuzika3) {
     timeGuzik3 = millis();
   }
   if(millis() - timeGuzik3 > 150UL) {
     if(odczytGuzika3 != stanGuzika3) {
       stanGuzika3 = odczytGuzika3;

       if(stanGuzika3 == LOW) {
        if(licznik > 0){
         
           licznik--;
           Serial.println("licznik:");
           Serial.println(licznik);
        }    
       }
     }
   }
   poprzedniStanGuzika3 = odczytGuzika3;
}
void biegi_wentylatora() {
   switch(licznik) {
   
   case 0:  // wentylator wyłączony
        digitalWrite(Relay2, LOW);
        digitalWrite(Relay3, LOW);
        digitalWrite(Relay4, LOW);
        digitalWrite(Relay5, LOW);
        digitalWrite(Led2, LOW);
        digitalWrite(Led3, LOW);
        digitalWrite(Led4, LOW);
        digitalWrite(Led5, LOW);
        digitalWrite(Led6, LOW);
        break;
    case 1:  // pierwszy bieg
        digitalWrite(Relay2, HIGH);
        digitalWrite(Relay3, LOW);
        digitalWrite(Relay4, LOW);
        digitalWrite(Relay5, LOW);
        digitalWrite(Led2, HIGH);
        digitalWrite(Led3, HIGH);
        digitalWrite(Led4, LOW);
        digitalWrite(Led5, LOW);
        digitalWrite(Led6, LOW);
        break;  
    case 2:  // drugi bieg
        digitalWrite(Relay2, LOW);
        digitalWrite(Relay3, HIGH);
        digitalWrite(Relay4, LOW);
        digitalWrite(Relay5, LOW);
        digitalWrite(Led2, HIGH);
        digitalWrite(Led3, HIGH);
        digitalWrite(Led4, HIGH);
        digitalWrite(Led5, LOW);
        digitalWrite(Led6, LOW);
        break;  
    case 3:  // trzeci bieg
        digitalWrite(Relay2, LOW);
        digitalWrite(Relay3, LOW);
        digitalWrite(Relay4, HIGH);
        digitalWrite(Relay5, LOW);
        digitalWrite(Led2, HIGH);
        digitalWrite(Led3, HIGH);
        digitalWrite(Led4, HIGH);
        digitalWrite(Led5, HIGH);
        digitalWrite(Led6, LOW);
        break;  
    case 4:  //czwarty bieg
        digitalWrite(Relay2, LOW);
        digitalWrite(Relay3, LOW);
        digitalWrite(Relay4, LOW);
        digitalWrite(Relay5, HIGH);
        digitalWrite(Led2, HIGH);
        digitalWrite(Led3, HIGH);
        digitalWrite(Led4, HIGH);
        digitalWrite(Led5, HIGH);
        digitalWrite(Led6, HIGH);
        break;  
  }                
}
 
Odpowiedź
#4
Jeśli tak jakby nie jesteś pewien to dodaj w setup szybkie miganie led po starcie Arduino, np. przez 5s. Jeśli faktycznie się resetuje zadbaj o odpowiednie zasilanie osobno przekaźników i osobno Arduino. Elementy logiki muszą mieć co najmniej wspólną masę jeśli mają się ze sobą komunikować.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#5
(16-05-2019, 18:06)kaczakat napisał(a): Jeśli tak jakby nie jesteś pewien to dodaj w setup szybkie miganie led po starcie Arduino, np. przez 5s. Jeśli faktycznie się resetuje zadbaj o odpowiednie zasilanie osobno przekaźników i osobno Arduino. Elementy logiki muszą mieć co najmniej wspólną masę jeśli mają się ze sobą komunikować.

Faktycznie Arduino i przekaźniki są zasilane z tego samego zasilacza ale przed arduino dodałem stabilizator napięcia na 9v podłączony razem z kondensatorami. Czy to może być za mało? Czy powinienem dodać osobny zasilacz tylko dla Arduino?


Załączone pliki Miniatury
   
 
Odpowiedź
#6
A jaki zasilacz masz jakiej mocy??

Schemat trochę nie przemyślany.
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#7
Najpierw ustal czy coś się w ogóle resetuje, potem się będziesz martwił. Możesz też dodać led, który zaświeca się po starcie i gaśnie tylko przyciskiem. Masz zrobioną optoizolację na płytce, to szkoda to potem zasilać razem i łączyć masy.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#8
(17-05-2019, 15:39)Jarewa0606 napisał(a): A jaki zasilacz masz jakiej mocy??

Schemat trochę nie przemyślany.
Zapomniałem dodać: Jestem hobbystą, samoukiem i moja znikoma wiedza w temacie elektroniki pochodzi z wszelkich możliwych kursów internetowych.
Większość rzeczy, które robię jest trochę "na chłopski rozum", chociaż zawsze staram się doczytać jak najwięcej i korzystam z rozwiązań ludzi mądrzejszych w temacie. Mam nadzieję, że z małą pomocą uda mi się zrobić coś co zadziała i będzie niezawodne Smile
Proszę o wyrozumiałość i wszelkie konstruktywne uwagi no i o cierpliwość.
Słuszna uwaga odnośnie zasilacza. Zasilacz ma nominalnie 2,1 A. Sprawdziłem, że jedna lampka (a są dwie) pobiera przy 12V blisko 0,8A, czyli razem jest 1,6A, czyli na arduino plus przekaźniki zostaje 0,5A. Czy to będzie za mało?
 
Odpowiedź
#9
(17-05-2019, 15:53)kaczakat napisał(a): Najpierw ustal czy coś się w ogóle resetuje, potem się będziesz martwił. Możesz też dodać led, który zaświeca się po starcie i gaśnie tylko przyciskiem. Masz zrobioną optoizolację na płytce, to szkoda to potem zasilać razem i łączyć masy.

Pomyślałem że się resetuje, ponieważ kiedy włączę oświetlenie i zacznę "bawić się" wentylatorem to czasem jest tak, że gaśnie wszystko - nawet oświetlenie, które nie powinno zgasnąć.
 
Odpowiedź
#10
Sprawdź miernikiem po prostu jak się bawisz na ile przysiada napięcie po dołożonym stabilizatorze, same diody świecące i optoizolatory to już 200mA wiec teoretycznie 300mA zostaje na przekaźniki i arduino.

A może masz to na stykówce połączone?? czy może lutowane?
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości