[ uros2002 @ 12.02.2015. 23:28 ] @
Pozdrav svima.

Potrebna mi je pomoc oko prepravke koda ili pisanja za sledecu sliku.

taster 1 pali LED1
taster 2 pali LED2
taster 3 pali LED3
taster 4 pali LED4

Ovaj kod sam nasao ali ne znam da ga prepravim posto sam pocetnik u ovome.
Vidim da u zavisnosti od tastera koji stisnem dobijam na analogniulaz A0 odredjenu vrednost i prema tome treba da aktivira Digitalniizlaz za LED na Pin13

Da li moze neko da mi pomogne da se prepravi ovaj kod.
Code:
 /* 
  Debounce
  
  Each time the input pin goes from LOW to HIGH (e.g. because of a push-button
  press), the output pin is toggled from LOW to HIGH or HIGH to LOW.  There's
  a minimum delay between toggles to debounce the circuit (i.e. to ignore
  noise).  
  
  created 28 October 2009
  by Riaan Cornelius
  
  
  */

 // constants won't change. They're used here to 
 // set pin numbers:
 const int buttonPin = 0;     // the number of the pushbutton pin
 const int ledPin =  13;      // the number of the LED pin for testing
 
 const int BUTTON1 = 1;
 const int BUTTON2 = 2;
 const int BUTTON3 = 3;
 const int BUTTON4 = 4;
 const int BUTTON5 = 5;
 
 const int BUTTON1LOW = 970;
 const int BUTTON1HIGH = 1024;
 const int BUTTON2LOW = 850;
 const int BUTTON2HIGH = 950;
 const int BUTTON3LOW = 700;
 const int BUTTON3HIGH = 800;
 const int BUTTON4LOW = 400;
 const int BUTTON4HIGH = 650;
 const int BUTTON5LOW = 250;
 const int BUTTON5HIGH = 350;
 
 // Variables will change:
 int ledState = HIGH;         // the current state of the output pin
 int buttonState;             // the current reading from the input pin
 int lastButtonState = LOW;   // the previous reading from the input pin

 // the following variables are long's because the time, measured in miliseconds,
 // will quickly become a bigger number than can be stored in an int.
 long lastDebounceTime = 0;  // the last time the output pin was toggled
 long debounceDelay = 50;    // the debounce time; increase if the output flickers

 void setup() {
   pinMode(buttonPin, INPUT);
   pinMode(ledPin, OUTPUT);
   Serial.begin(9600);
 }

 void loop() {
   // read the state of the switch into a local variable:
   int reading = analogRead(buttonPin);   
   int tmpButtonState = LOW;             // the current reading from the input pin
   
   if(reading>BUTTON5LOW && reading<BUTTON5HIGH){
     //Read switch 5
     tmpButtonState = BUTTON5;
   }else if(reading>BUTTON4LOW && reading<BUTTON4HIGH){
     //Read switch 4
     tmpButtonState = BUTTON4;
   }else if(reading>BUTTON3LOW && reading<BUTTON3HIGH){
     //Read switch 3
     tmpButtonState = BUTTON3;
   }else if(reading>BUTTON2LOW && reading<BUTTON2HIGH){
     //Read switch 2
     tmpButtonState = BUTTON2;
   }else if(reading>BUTTON1LOW && reading<BUTTON1HIGH){
     //Read switch 1
     tmpButtonState = BUTTON1;
   }else{
     //No button is pressed;
     tmpButtonState = LOW;
   }

   // check to see if you just pressed the button 
   // (i.e. the input went from LOW to a buttonState),  and you've waited 
   // long enough since the last press to ignore any noise:  

   // If the switch changed, due to noise or pressing:
   if (tmpButtonState != lastButtonState) {
     // reset the debouncing timer
     lastDebounceTime = millis();
   } 

   if ((millis() - lastDebounceTime) > debounceDelay) {
     // whatever the reading is at, it's been there for longer
     // than the debounce delay, so take it as the actual current state:
     buttonState = tmpButtonState;
     Serial.println(buttonState);
   }

   // save the reading.  Next time through the loop,
   // it'll be the lastButtonState:
   lastButtonState = tmpButtonState;
   
   // set the LED using the state of the button for testing:
   switch(buttonState){
     case BUTTON1:
     digitalWrite(ledPin, buttonState>0);
     break;
     case BUTTON2:
     digitalWrite(ledPin, buttonState>0);
     break;
     case BUTTON3:
     digitalWrite(ledPin, buttonState>0);
     break;
     case BUTTON4:
     digitalWrite(ledPin, buttonState>0);
     break;
     case BUTTON5:
     digitalWrite(ledPin, buttonState>0);
     break;
   }
 }


I da li na recimo izlaze kao na slici mogu da stavim da aktivira ovakvu plocu kao na slici.

Hvala unapred
[ bogdan.kecman @ 13.02.2015. 10:05 ] @
samo na kraju prepravi da u zavisnosti koji je pritisnut upalis razlicit led

Code:

   switch(buttonState){
     case BUTTON1:
     digitalWrite(ledPin1, buttonState>0);
     break;
     case BUTTON2:
     digitalWrite(ledPin2, buttonState>0);
     break;
     case BUTTON3:
     digitalWrite(ledPin3, buttonState>0);
     break;
     case BUTTON4:
     digitalWrite(ledPin4, buttonState>0);
     break;
     case BUTTON5:
     digitalWrite(ledPin5, buttonState>0);
     break;
   }


i naravno moras da postavis te pinove i da budu input

Code:

 void setup() {
   pinMode(buttonPin, INPUT);
   pinMode(ledPin1, OUTPUT);
   pinMode(ledPin2, OUTPUT);
   pinMode(ledPin3, OUTPUT);
   pinMode(ledPin4, OUTPUT);
   pinMode(ledPin5, OUTPUT);
   Serial.begin(9600);
 }


i gore skroz na pocetku moras da definises za ledpinX koji je to fizicki pin

Code:

 const int buttonPin = 0;     // the number of the pushbutton pin
 const int ledPin1 =  13;      // the number of the LED pin for testing
 const int ledPin2 =  14;      // the number of the LED pin for testing
 const int ledPin3 =  15;      // the number of the LED pin for testing
 const int ledPin4 =  16;      // the number of the LED pin for testing
 const int ledPin5 =  17;      // the number of the LED pin for testing

[ uros2002 @ 13.02.2015. 20:20 ] @
Hvala na odgovoru

Promenio sam kod i sad izgleda ovako
Code:
/* 
  Debounce
  
  Each time the input pin goes from LOW to HIGH (e.g. because of a push-button
  press), the output pin is toggled from LOW to HIGH or HIGH to LOW.  There's
  a minimum delay between toggles to debounce the circuit (i.e. to ignore
  noise).  
  
  created 28 October 2009
  by Riaan Cornelius
  
  
  */

 // constants won't change. They're used here to 
 // set pin numbers:
 
 const int buttonPin = 0;     // the number of the pushbutton pin
 const int ledPin1 =  13;      // the number of the LED pin for testing
 const int ledPin2 =  14;      // the number of the LED pin for testing
 const int ledPin3 =  15;      // the number of the LED pin for testing
 const int ledPin4 =  16;      // the number of the LED pin for testing
 const int ledPin5 =  17;      // the number of the LED pin for testing
 
 const int BUTTON1 = 1;
 const int BUTTON2 = 2;
 const int BUTTON3 = 3;
 const int BUTTON4 = 4;
 const int BUTTON5 = 5;
 
 const int BUTTON1LOW = 970;
 const int BUTTON1HIGH = 1024;
 const int BUTTON2LOW = 850;
 const int BUTTON2HIGH = 950;
 const int BUTTON3LOW = 700;
 const int BUTTON3HIGH = 800;
 const int BUTTON4LOW = 400;
 const int BUTTON4HIGH = 650;
 const int BUTTON5LOW = 0;
 const int BUTTON5HIGH = 1023;
 
 // Variables will change:
 int ledState = HIGH;         // the current state of the output pin
 int buttonState;             // the current reading from the input pin
 int lastButtonState = LOW;   // the previous reading from the input pin

 // the following variables are long's because the time, measured in miliseconds,
 // will quickly become a bigger number than can be stored in an int.
 long lastDebounceTime = 0;  // the last time the output pin was toggled
 long debounceDelay = 50;    // the debounce time; increase if the output flickers

 void setup() {
   pinMode(buttonPin, INPUT);
   pinMode(ledPin1, OUTPUT);
   pinMode(ledPin2, OUTPUT);
   pinMode(ledPin3, OUTPUT);
   pinMode(ledPin4, OUTPUT);
   pinMode(ledPin5, OUTPUT);
   Serial.begin(9600);
 }

 void loop() {
   // read the state of the switch into a local variable:
   int reading = analogRead(buttonPin);   
   int tmpButtonState = LOW;             // the current reading from the input pin
   
   if(reading>BUTTON5LOW && reading<BUTTON5HIGH){
     //Read switch 5
     tmpButtonState = BUTTON5;
   }else if(reading>BUTTON4LOW && reading<BUTTON4HIGH){
     //Read switch 4
     tmpButtonState = BUTTON4;
   }else if(reading>BUTTON3LOW && reading<BUTTON3HIGH){
     //Read switch 3
     tmpButtonState = BUTTON3;
   }else if(reading>BUTTON2LOW && reading<BUTTON2HIGH){
     //Read switch 2
     tmpButtonState = BUTTON2;
   }else if(reading>BUTTON1LOW && reading<BUTTON1HIGH){
     //Read switch 1
     tmpButtonState = BUTTON1;
   }else{
     //No button is pressed;
     tmpButtonState = LOW;
   }

   // check to see if you just pressed the button 
   // (i.e. the input went from LOW to a buttonState),  and you've waited 
   // long enough since the last press to ignore any noise:  

   // If the switch changed, due to noise or pressing:
   if (tmpButtonState != lastButtonState) {
     // reset the debouncing timer
     lastDebounceTime = millis();
   } 

   if ((millis() - lastDebounceTime) > debounceDelay) {
     // whatever the reading is at, it's been there for longer
     // than the debounce delay, so take it as the actual current state:
     buttonState = tmpButtonState;
     Serial.println(buttonState);
   }

   // save the reading.  Next time through the loop,
   // it'll be the lastButtonState:
   lastButtonState = tmpButtonState;
   
   // set the LED using the state of the button for testing:
   switch(buttonState){
     case BUTTON1:
     digitalWrite(ledPin1, buttonState>0);
     break;
     case BUTTON2:
     digitalWrite(ledPin2, buttonState>0);
     break;
     case BUTTON3:
     digitalWrite(ledPin3, buttonState>0);
     break;
     case BUTTON4:
     digitalWrite(ledPin4, buttonState>0);
     break;
     case BUTTON5:
     digitalWrite(ledPin5, buttonState>0);
     break;
   }
 }


Probao sam da ga uvezem u simulator Arduino Uno u Proteus 8 i neradi kako teba.

Sta sam pogresio?
[ bogdan.kecman @ 13.02.2015. 20:41 ] @
za pocetak kada uradis

Code:

...
 void loop() {
   // read the state of the switch into a local variable:
   int reading = analogRead(buttonPin);   
   int tmpButtonState = LOW;             // the current reading from the input pin
...


ovako deklarisana reading varijabla ce biti procitana samo jednom a ne svaki put u petlji, dakle mrdni deklaraciju varijable gore (ispod lastButtonState) a ovde samo imaj

Code:

...
 void loop() {
   int tmpButtonState = LOW;             // the current reading from the input pin

   // read the state of the switch into a local variable:
   reading = analogRead(buttonPin);   
...


dalje, ne znam taj simulator dal sta valja ili ne, ako valja zaustavis se posle ovog analog read i procitas za svako dugme tacno sta si procitao ako i dalje ne radi

[ uros2002 @ 13.02.2015. 21:31 ] @
Ako sam dobro razumeo ovako treba.

Code:
/* 
  Debounce
  
  Each time the input pin goes from LOW to HIGH (e.g. because of a push-button
  press), the output pin is toggled from LOW to HIGH or HIGH to LOW.  There's
  a minimum delay between toggles to debounce the circuit (i.e. to ignore
  noise).  
  
  created 28 October 2009
  by Riaan Cornelius
  
  
  */

 // constants won't change. They're used here to 
 // set pin numbers:
 
 const int buttonPin = 0;     // the number of the pushbutton pin
 const int ledPin1 =  13;      // the number of the LED pin for testing
 const int ledPin2 =  14;      // the number of the LED pin for testing
 const int ledPin3 =  15;      // the number of the LED pin for testing
 const int ledPin4 =  16;      // the number of the LED pin for testing
 const int ledPin5 =  17;      // the number of the LED pin for testing
 
 const int BUTTON1 = 1;
 const int BUTTON2 = 2;
 const int BUTTON3 = 3;
 const int BUTTON4 = 4;
 const int BUTTON5 = 5;
 
 const int BUTTON1LOW = 970;
 const int BUTTON1HIGH = 1024;
 const int BUTTON2LOW = 850;
 const int BUTTON2HIGH = 950;
 const int BUTTON3LOW = 700;
 const int BUTTON3HIGH = 800;
 const int BUTTON4LOW = 400;
 const int BUTTON4HIGH = 650;
 const int BUTTON5LOW = 0;
 const int BUTTON5HIGH = 1023;
 
 // Variables will change:
 int ledState = HIGH;         // the current state of the output pin
 int buttonState;             // the current reading from the input pin
 int lastButtonState = LOW;   // the previous reading from the input pin
 int reading = analogRead(buttonPin);

 // the following variables are long's because the time, measured in miliseconds,
 // will quickly become a bigger number than can be stored in an int.
 long lastDebounceTime = 0;  // the last time the output pin was toggled
 long debounceDelay = 50;    // the debounce time; increase if the output flickers

 void setup() {
   pinMode(buttonPin, INPUT);
   pinMode(ledPin1, OUTPUT);
   pinMode(ledPin2, OUTPUT);
   pinMode(ledPin3, OUTPUT);
   pinMode(ledPin4, OUTPUT);
   pinMode(ledPin5, OUTPUT);
   Serial.begin(9600);
 }

 void loop() {
   // read the state of the switch into a local variable:
      
   int tmpButtonState = LOW;             // the current reading from the input pin
   
   reading = analogRead(buttonPin);

   if(reading>BUTTON5LOW && reading<BUTTON5HIGH){
     //Read switch 5
     tmpButtonState = BUTTON5;
   }else if(reading>BUTTON4LOW && reading<BUTTON4HIGH){
     //Read switch 4
     tmpButtonState = BUTTON4;
   }else if(reading>BUTTON3LOW && reading<BUTTON3HIGH){
     //Read switch 3
     tmpButtonState = BUTTON3;
   }else if(reading>BUTTON2LOW && reading<BUTTON2HIGH){
     //Read switch 2
     tmpButtonState = BUTTON2;
   }else if(reading>BUTTON1LOW && reading<BUTTON1HIGH){
     //Read switch 1
     tmpButtonState = BUTTON1;
   }else{
     //No button is pressed;
     tmpButtonState = LOW;
   }

   // check to see if you just pressed the button 
   // (i.e. the input went from LOW to a buttonState),  and you've waited 
   // long enough since the last press to ignore any noise:  

   // If the switch changed, due to noise or pressing:
   if (tmpButtonState != lastButtonState) {
     // reset the debouncing timer
     lastDebounceTime = millis();
   } 

   if ((millis() - lastDebounceTime) > debounceDelay) {
     // whatever the reading is at, it's been there for longer
     // than the debounce delay, so take it as the actual current state:
     buttonState = tmpButtonState;
     Serial.println(buttonState);
   }

   // save the reading.  Next time through the loop,
   // it'll be the lastButtonState:
   lastButtonState = tmpButtonState;
   
   // set the LED using the state of the button for testing:
   switch(buttonState){
     case BUTTON1:
     digitalWrite(ledPin1, buttonState>0);
     break;
     case BUTTON2:
     digitalWrite(ledPin2, buttonState>0);
     break;
     case BUTTON3:
     digitalWrite(ledPin3, buttonState>0);
     break;
     case BUTTON4:
     digitalWrite(ledPin4, buttonState>0);
     break;
     case BUTTON5:
     digitalWrite(ledPin5, buttonState>0);
     break;
   }
 }


Ovo mi je prvi put da radim neki kod i preradu postojeceg koda.
jos uvek pokusavam da pohvatam sta je sta u kodu.
Nikad do sad se nisam susreo sa Arduino niti pisanjem koda, isto tako i Proteus 8 sam sad prvi put pokrenuo i pokusavao sam da namestim Arduino simulator ali imam problem sa njim nesto neradi kako treba.

Hvala
[ bogdan.kecman @ 13.02.2015. 22:04 ] @
jok, gore kada deklarises varijablu samo je deklarisi dakle bez = read...

e sad sto se tice "Ovo mi je prvi put da radim neki kod i preradu postojeceg koda." a da ti prvo uradis jedan

https://kldp.org/files/c+in+21+days.pdf

pa kad prodjes to onda se vrati na arduino posto ces mnogo brze nauciti da programiras tako nego da gledas u tudji koji koji ne znas sta i kako radi


[ uros2002 @ 13.02.2015. 22:54 ] @
Hvala za odgovore.

Nije problem i da procitam ovo sto si poslao i da naucim da programiram.

Ali ako ima neko voljan dok je ne naucim da programiram i pisem kod bez pomoci drugih da mi pomogne oko ovog problema.

Dok ni nestigne Arduino Uno koji sam porucio i dodaci koje sam takodje porucio bio sam voljan da se malo poigram u Proteusu 8 i simulatoru. Osnovne programe pocetnicke sam probao i polako ucim.
Preko digitalnog ulaza sam pravio da palim LED.
Ovo me je zanimalo posto 4 tastera sa razlicitim otpornicima povezujem na Analogni ulaz i tako palim LED.
Procitao sam da je raspon analognog signala pd 0 do 1024 i da stavljanjem odredjenih otpornika mogu da podesavam opseg tog tastera.

Pokusavam da proverim da li sam u Proteus 8 dobro nacrtao semu i pravi kod za paljenje LED preko 4 tastera.

Orginalni kod koji sam postavio u prvom postu preuzet je sa sajta
nullHow to access 5 buttons through 1 Arduino input

Kod mene nece da radi u simulatoru.
Zato sam ovde i pokrenuo temu za pomoc u prosiranju postojeceg koda. Orginalni kod ima samo izlaz na pin13 koji pali Led.
Da li moze neko da prosiri kod sa recimo dva tastera na analogni ulaz i pale dve razlicite LED diode,

Mislim da nisam nista lose pisao i pokusavao da shvatim kako sta radi.

Mislim da cu kroz za Vas koji se razumete prostih kodova uspeti lakse da savladam sta kako radi i kako se pise osnovni kod.
Za Vas je ovo mozda posao ali za mene je samo hobi.

Pitanje iz prvog posta je bilo da li ovakav kod koji moze preko analognog ulaza da [ali dve ili vse LED dioda da komanduje releima.

Sobzirom da sam pre dva, tri dana odlucio da kupim i oprobam se u Arduino nekim samo osnovnim semama i kodovima trudim se da procitam sto vise dokumentacije i raznih foruma oko Arduino. (koliko mi obaveze dozvoljavaju)

U orvom postu mi se potkrala greska
Code:
.....
 const int BUTTON4HIGH = 650;
 const int BUTTON5LOW = 0;
 const int BUTTON5HIGH = 1023;
.....

Treba da stoji
Code:
....
 const int BUTTON4HIGH = 650;
 const int BUTTON5LOW = 250;
 const int BUTTON5HIGH = 350;

....


Nadam se da nisam naporan sa pitanjima i zeljam ali kroz primere se najbolje uci.

Jos jednom veliko Hvala
[ bogdan.kecman @ 14.02.2015. 01:03 ] @
Citat:
uros2002
Nije problem i da procitam ovo sto si poslao i da naucim da programiram.


ako nije problem onda to uradi posto malopre nisi umeo da deklaris varijablu?! da li znas koja je razlika izmedju lokalne, globalne, staticke? to su neke osnove osnova, azbuka takoreci, ako to ne savladas mozes da gledas u tudji kod do prekosutra neces skontat u cemu je stvar .. neces ti postati programer kada prodjes ovih 21 dan kursa (realno to prodjes za nekoliko dana ako se tome posvetis) ali ces imati dovoljnu osnovu da dalje mozes da ucis :)


Citat:
uros2002:
Ovo me je zanimalo posto 4 tastera sa razlicitim otpornicima povezujem na Analogni ulaz i tako palim LED.
Procitao sam da je raspon analognog signala pd 0 do 1024 i da stavljanjem odredjenih otpornika mogu da podesavam opseg tog tastera.


ti na analogni ulaz dovodis napon sa razdelnika napona koji cine (po tvojoj semi) R5 prema groundu i otpornik na tvom tasteru prema 5V
kada nije stisnut nijedan taster A0 je na 0, analogread cita 0
ako stisnes 3 pravi se razdelnik sa R5 i R3 te na A0 imas 1.6V tj analogread cita 327.
to je manje od BUTTON1LOW i zato ti nikad nije detektovao taster, zato sam ti rekao
Citat:

..zaustavis se posle ovog analog read i procitas za svako dugme tacno sta si procitao ako i dalje ne radi...


dakle procitas vrednost koju si procitao sa analogread (u debageru ili posaljes tu vrednost na seriski port)

vrlo verovatno je da su ove vrednost za druge otpornike, ako promenis R5 na 10k umesto sadasnjih 100k (sto je malo poveliko) onda za R3 od 47k A0 bude na 4.123 sto znaci da ce analogread da vrati 844 sto je mnogo blize vrednostima koje ti imas kao konstante u tabeli ...

dakle sa tvojim otpornicima (koje si izgleda birao odokativno bez ideje kako to uopste radi) citaj vrednost analogread-a svaki put kad stisnes taster i napravi konstante BUTTONxHIGH i BUTTONxLOW tako da zaokruze vrednosti sa 5% greske na otporniku (i jednom i drugom!! znaci ukupno +-10% od idealnih vrednosti)

jasno sta treba da uradis i kako?

Citat:
uros2002:
Nadam se da nisam naporan sa pitanjima i zeljam ali kroz primere se najbolje uci.


samo ti pitaj, nikoga niko ne bije po usima da ti odgovara .. sto se ti vise potrudis da naucis i razumes sta radis to ce ljudi na forumu vise da ti pomognu .. onog trenutka ako se ucini da oces sve na gotovs i ne ulazes trud tog trenutka ce svi samo poceti da te ignorisu .. tako to obicno ide i u zivotu :)
[ ZAS011 @ 14.02.2015. 08:12 ] @
Pošto ne znaš da programiraš, poslušaj Bogdana i kreni od početka. Prvi programčić bi trebalo da ti bude "Blink LED", poznatiji kao "HelloWorld". To je prvo. Drugo, mora malo da poznaješ i osnove elektrotehnike kako bi ti bilo jasnije šta je to razdelnik napona, kako bi shvatio kako su povezani tasteri na jedan analogni pin kontrolera, odnosno šta se događa kada ni jedan taster nije pritisnut, a šta kada se neki od njih pritisne.

I naravno, učenje kreće od početka, kroz gomile primera, a ne iz sredine, pokušavajući da prepravljaš tuđe programe, a osnove jezika, njegove sintakse, tipova promenljivih, ... ti n isu poznate.
[ uros2002 @ 14.02.2015. 10:44 ] @
Da li je ovo tacno kako sam izracunao.
R1- 47k
R2- 100k
V- 5v
izlaz -3.401v
analogni ulaz - 696
+- 5% - od 661 do 730

Ako jeste onda je kod pogresan treba za svaki taster da izmenim vrednosti.
slika 1
[ ZAS011 @ 14.02.2015. 11:01 ] @
Da ti bude lakše: http://www.raltron.com/cust/tools/voltage_divider.asp

Što ne znači da mora da naučiš neke osnovne stvari SA RAZUMEVANJEM
[ uros2002 @ 14.02.2015. 12:50 ] @
Ok. Hvala.
To znam da izracunam samo da li sam dobro izracunao analogni ulaz za 3.401v koji treba da prepravim u kodu.
[ bogdan.kecman @ 14.02.2015. 12:58 ] @
1024/5*3.401i6.5248

10% gore (posto imas toleranciju na oba otpornika po 5%) = 766
10% dole = 626

dakle za taj taster je 626-766 opseg koji moze da bude na A0 pinu

mnogo ti je 100k u jednoj grani suvise ce ti biti blizu svi ostali, 10k
je mnogo bolja vrednost
[ uros2002 @ 14.02.2015. 15:23 ] @
Pozdrav,

Izmenuo sam vrednosti tastera i otpornik od 100k u 10k.
U simulatoru je uspesno pokrenuta simulacija i svako dugme pali odredjenu LED diodu.

Code:
/* 
  Debounce
  
  Each time the input pin goes from LOW to HIGH (e.g. because of a push-button
  press), the output pin is toggled from LOW to HIGH or HIGH to LOW.  There's
  a minimum delay between toggles to debounce the circuit (i.e. to ignore
  noise).  
  
  created 28 October 2009
  by Riaan Cornelius
  
  
  */

 // constants won't change. They're used here to 
 // set pin numbers:
 
 const int buttonPin = 0;     // the number of the pushbutton pin
 const int ledPin1 =  13;      // the number of the LED pin for testing
 const int ledPin2 =  12;      // the number of the LED pin for testing
 const int ledPin3 =  11;      // the number of the LED pin for testing
 const int ledPin4 =  10;      // the number of the LED pin for testing
 const int ledPin5 =  9;      // the number of the LED pin for testing
 
 const int BUTTON1 = 1;
 const int BUTTON2 = 2;
 const int BUTTON3 = 3;
 const int BUTTON4 = 4;
 const int BUTTON5 = 5;
 
 const int BUTTON1LOW = 461;
 const int BUTTON1HIGH = 563;
 const int BUTTON2LOW = 288;
 const int BUTTON2HIGH = 352;
 const int BUTTON3LOW = 162;
 const int BUTTON3HIGH = 198;
 const int BUTTON4LOW = 118;
 const int BUTTON4HIGH = 144;
 const int BUTTON5LOW = 100;
 const int BUTTON5HIGH = 122;
 
 // Variables will change:
 int ledState = HIGH;         // the current state of the output pin
 int buttonState;             // the current reading from the input pin
 int lastButtonState = LOW;   // the previous reading from the input pin
 int reading;

 // the following variables are long's because the time, measured in miliseconds,
 // will quickly become a bigger number than can be stored in an int.
 long lastDebounceTime = 0;  // the last time the output pin was toggled
 long debounceDelay = 50;    // the debounce time; increase if the output flickers

 void setup() {
   pinMode(buttonPin, INPUT);
   pinMode(ledPin1, OUTPUT);
   pinMode(ledPin2, OUTPUT);
   pinMode(ledPin3, OUTPUT);
   pinMode(ledPin4, OUTPUT);
   pinMode(ledPin5, OUTPUT);
   Serial.begin(9600);
 }

 void loop() {
   // read the state of the switch into a local variable:
      
   int tmpButtonState = LOW;             // the current reading from the input pin
   int reading = analogRead(buttonPin);
   
   if(reading>BUTTON5LOW && reading<BUTTON5HIGH){
     //Read switch 5
     tmpButtonState = BUTTON5;
   }else if(reading>BUTTON4LOW && reading<BUTTON4HIGH){
     //Read switch 4
     tmpButtonState = BUTTON4;
   }else if(reading>BUTTON3LOW && reading<BUTTON3HIGH){
     //Read switch 3
     tmpButtonState = BUTTON3;
   }else if(reading>BUTTON2LOW && reading<BUTTON2HIGH){
     //Read switch 2
     tmpButtonState = BUTTON2;
   }else if(reading>BUTTON1LOW && reading<BUTTON1HIGH){
     //Read switch 1
     tmpButtonState = BUTTON1;
   }else{
     //No button is pressed;
     tmpButtonState = LOW;
   }

   // check to see if you just pressed the button 
   // (i.e. the input went from LOW to a buttonState),  and you've waited 
   // long enough since the last press to ignore any noise:  

   // If the switch changed, due to noise or pressing:
   if (tmpButtonState != lastButtonState) {
     // reset the debouncing timer
     lastDebounceTime = millis();
   } 

   if ((millis() - lastDebounceTime) > debounceDelay) {
     // whatever the reading is at, it's been there for longer
     // than the debounce delay, so take it as the actual current state:
     buttonState = tmpButtonState;
     Serial.println(buttonState);
   }

   // save the reading.  Next time through the loop,
   // it'll be the lastButtonState:
   lastButtonState = tmpButtonState;
   
   // set the LED using the state of the button for testing:
   switch(buttonState){
     case BUTTON1:
     digitalWrite(ledPin1, buttonState>0);
     break;
     case BUTTON2:
     digitalWrite(ledPin2, buttonState>0);
     break;
     case BUTTON3:
     digitalWrite(ledPin3, buttonState>0);
     break;
     case BUTTON4:
     digitalWrite(ledPin4, buttonState>0);
     break;
     case BUTTON5:
     digitalWrite(ledPin5, buttonState>0);
     break;
     
   }
 }


Sad mi LED diode ostaju upaljene. Kako mogu da izmenim da LED bude upaljena samo dok je taster aktiviran?

Citat:
bogdan.kecman: 1024/5*3.401i6.5248

10% gore (posto imas toleranciju na oba otpornika po 5%) = 766
10% dole = 626

dakle za taj taster je 626-766 opseg koji moze da bude na A0 pinu

mnogo ti je 100k u jednoj grani suvise ce ti biti blizu svi ostali, 10k
je mnogo bolja vrednost


Hvala na pomoci uradio sam ovo isto samo nisam stavio za oba otpornika po 5%.
Jos jednom Hvala
Citat:
ZAS011: Da ti bude lakše: http://www.raltron.com/cust/tools/voltage_divider.asp

Što ne znači da mora da naučiš neke osnovne stvari SA RAZUMEVANJEM :)

Hvala na pomoci

Da li mozes da mi postavis neki jednostavan zadatak da probam sam da smislim kod i da probam u simulatoru.

Ako neko ima vremena neka zada neku Vezbu da probam.
[ bogdan.kecman @ 14.02.2015. 15:26 ] @
tamo gde detektujes da nijedan taster nije pritisnut ugasi sve ledice
eto ti ga ultra jednostavan zadatak :D
[ ZAS011 @ 14.02.2015. 15:46 ] @
Preduhitrio me Bogdan
To je bio zadatak koji bih ti i ja dao.
[ uros2002 @ 14.02.2015. 16:55 ] @
Mislim da sam nasao gde detektuje tastere.
Citat:
....
void loop() {
// read the state of the switch into a local variable:

int tmpButtonState = LOW; // the current reading from the input pin
int reading = analogRead(buttonPin);

if(reading>BUTTON5LOW && reading<BUTTON5HIGH){
//Read switch 5
tmpButtonState = BUTTON5;
}else if(reading>BUTTON4LOW && reading<BUTTON4HIGH){
//Read switch 4
tmpButtonState = BUTTON4;
}else if(reading>BUTTON3LOW && reading<BUTTON3HIGH){
//Read switch 3
tmpButtonState = BUTTON3;
}else if(reading>BUTTON2LOW && reading<BUTTON2HIGH){
//Read switch 2
tmpButtonState = BUTTON2;
}else if(reading>BUTTON1LOW && reading<BUTTON1HIGH){
//Read switch 1
tmpButtonState = BUTTON1;
}else{
//No button is pressed;
tmpButtonState = LOW;
}
....


Ali nisam nasao resenje za gasenje Ledica kada pustim taster

Ako dobro razumem ovaj deo koda
Citat:
...
if(reading>BUTTON5LOW && reading<BUTTON5HIGH){
//Read switch 5
tmpButtonState = BUTTON5;....


Ovde kaze ako sam razumeo:
Procitana vrednost manja od definisane LOW za taster 5 i procitana vrednost vecaod definisane HIGH za taster 5
Taster 5 aktiviran pali LED5

Ocitana vrednost je izmedju
Citat:
....
const int BUTTON5LOW = 100;
const int BUTTON5HIGH = 122;
.....


Po mom misljenju na kraju ovih IF i ELSE treba da dodam nesto sto ce ugasi LED ako nije aktiviran niti jedan taster.
ili da dodam komandu
Citat:
delay(1000)

da Led bude upaljena recimo 1s
Nadam se da sam na pravom putu.

Hvala (Trazim dalje)
[ bogdan.kecman @ 14.02.2015. 18:44 ] @
imas komentar gde pise "nijeda taster nije pritisnut" tamo gde detektuje
da nijedan taster nije pritisnut
[ uros2002 @ 14.02.2015. 18:55 ] @
To je mislim ovo
Citat:
....
}else{
//No button is pressed;
tmpButtonState = LOW;
.....


Samo neznma sta da dodam
[ bogdan.kecman @ 14.02.2015. 19:01 ] @
jbg, zas ti je rekao da prvo napises program koji upali i ugasi diodu
(blink), da si to uradio sada bi znao kako da ugasis diode
[ ZAS011 @ 14.02.2015. 19:15 ] @
Citat:
To je mislim ovo
Citat:
Citat:
....
}else{
//No button is pressed;
tmpButtonState = LOW;
.....



Samo neznma sta da dodam

Ja bih dodao malo soli i bibera.

Shvati da nema učenja "iz sredine". Mora da se počne od početka i dosta čita, čita i čita ...

Ne možeš da čitaš 'Rat i Mir', a da nisi naučio sva slova.
[ uros2002 @ 14.02.2015. 19:32 ] @
OK Ljudi hvala cekacu da mi stigne Arduino pa cu polako iz pocetka.

Mislim da cu se snaci nekako. Nacicu vremenom i resenje ovog zadatka.
Najbolje je kada imam Arduino pa da isprobavam.
Barem mi je tako zanimljivije nego preko simulatora.

Hvala na dosadasnjoj pomoci.

Jedino ako imate vremena da mi date nekih par pocetnickih zadataka da netrazim po netu.

Pozdrav.
[ uros2002 @ 14.02.2015. 22:29 ] @
Moze li mi neko jos samo pomoci oko ovoga

Porucio sam :
1-Arduino uno r3 16u2 + usb kabl
2-ARDUINO modul sa 4 releja
3-protoboard 830p + napajanje + jumperi 63komada

Sada mi treba pomoc oko elemenata koje treba da uzmem za pocetnicki komplet

Mislim na otpornike, prekidace, diode .....

Planiram da porucim od
www.kelco.rs

Ako imate neki predlog koliko cega da uzmem i koje vrednosti za pocetak

[ bogdan.kecman @ 14.02.2015. 23:03 ] @
1. napisi program koji blinka jednu ledicu

2. napisi program koji blinka redom sve ledice na arduinu jednu po jednu

3. promeni taj program da gasi ledice
[ bogdan.kecman @ 14.02.2015. 23:08 ] @
pogledaj razne arduino starter kitove:
http://www.ebay.com/sch/i.html...ter+kit&rt=nc&LH_BIN=1

i original:
http://arduino.cc/en/Main/ArduinoStarterKit

pise uglavnom od cega se sastoje, pa kupis to sto je u njima
[ Zlatni_bg @ 15.02.2015. 02:12 ] @
Bolje ako si vec narucivao to sve, da si porucio neki starter kit kao sto je Bogdan rekao, s obzirom da nemas puno elektronskih komponenata u kuci verovatno. Tu bi dobio nesto otpornika, kondenzatora, jos nekih stvari, dugmica itd...

Uzmi po 20x10 nekih razlicitih vrednosti otpornika, tipa uzmi prvo ispod 1K: 100R, 470R, 10R, 120R, 150R... potom uzmes iste te samo vece, tipa 1K, 4K7, 1K2, 1K5... onda jos vece itd... u sustini mozes i da vezes 2 otpornika redno da dobijes neku izmedju vrednost otpornosti... otpornika nikad dosta, da znas... naruci i obicne LED 5mm, crvene i zelene recimo, mozes i par belih mada su skuplje... dugmice uzimas one male, jedino po cemu se razlikuju je duzina tastera koliko znam.
[ ZAS011 @ 15.02.2015. 07:40 ] @
Pošto mi je pre neki dan stiglo:




dokoni pop rešio da napravi malko "periferija":





(zafalilo trimera )

[ uros2002 @ 15.02.2015. 11:05 ] @
Evo pokusao sam malo da se igram.
Citat:
bogdan.kecman:
1. napisi program koji blinka jednu ledicu

2. napisi program koji blinka redom sve ledice na arduinu jednu po jednu

3. promeni taj program da gasi ledice

Prvi zadatak sam malo prosirio sa 4led izlaza
Na svaki izlaz sam paralelno povezao dve diode.

Blink LED - Arduino Uno simulator

pa sam dobio ovakav kod
Citat:
int led1 = 13;
int led2 = 12;
int led3 = 11;
int led4 = 10;

void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
}

void loop() {
digitalWrite(led1, HIGH);
delay(10);
digitalWrite(led2, HIGH);
delay(20);
digitalWrite(led3, HIGH);
delay(30);
digitalWrite(led4, HIGH);
delay(40);
digitalWrite(led1, LOW);
delay(40);
digitalWrite(led2, LOW);
delay(30);
digitalWrite(led3, LOW);
delay(20);
digitalWrite(led4, LOW);
delay(10);
}

redosled on/off sam definisao po principu ako je 1s = 1000
onda sam ovako dobio
led on off
1 0.1s 0.4s
2 0.2s 0.3s
3 0.3s 0.2s
4 0.4s 0.1s

Nadam se da je dobro posto u simulatoru radi.

Resen zadatak dva.
nasao sam na dva nacina

Prvi nacin da svaku diodu ostavi upaljenu dok se sve ne upale a zatim ih istim redom gasi

Blink LED (pali gasi redom) - Arduino Uno r3 simulator

Evo i koda
Citat:
int led1 = 13;
int led2 = 12;
int led3 = 11;
int led4 = 10;

void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
}

void loop() {
digitalWrite(led1, HIGH);
delay(400);
digitalWrite(led2, HIGH);
delay(400);
digitalWrite(led3, HIGH);
delay(400);
digitalWrite(led4, HIGH);
delay(400);
digitalWrite(led1, LOW);
delay(400);
digitalWrite(led2, LOW);
delay(400);
digitalWrite(led3, LOW);
delay(400);
digitalWrite(led4, LOW);
delay(400);
}


Gde delay(400) ako sam razumeo dobro daje pauzu izmedju paljenja sledece LED diode.

U drugoj verziji izmena samo u void loop

Blink LED (pali i gasi redom LED) - Arduino Uno r3 - simulator

Citat:
void loop() {
digitalWrite(led1, HIGH);
delay(400);
digitalWrite(led1, LOW);
delay(400);
digitalWrite(led2, HIGH);
delay(400);
digitalWrite(led2, LOW);
delay(400);
digitalWrite(led3, HIGH);
delay(400);
digitalWrite(led3, LOW);
delay(400);
digitalWrite(led4, HIGH);
delay(400);
digitalWrite(led4, LOW);
delay(400);
}

Ovde svaku LED diodu upali pa ugasi i onda predje na sledecu.

Ako je dobro da idemo dalje sa vezbama i zadacima.

Hvala svim na strpljenju i vremenu.



[Ovu poruku je menjao uros2002 dana 15.02.2015. u 12:32 GMT+1]

[Ovu poruku je menjao uros2002 dana 15.02.2015. u 12:39 GMT+1]
[ bogdan.kecman @ 15.02.2015. 20:48 ] @
i sad kad si skontao kako se gasi led, aj ugasi ledice u original kodu
[ uros2002 @ 15.02.2015. 21:16 ] @
Pokusavam ali mi ne polazi za rukom

Probao sam danas nekoliko puta ali bez uspeha.

Mislim da je ovo za gasenje ledica ali nisam siguran
Citat:
....
}else{
//No button is pressed;
tmpButtonState = LOW;
}....


I ovo
Citat:
....
// If the switch changed, due to noise or pressing:
if (tmpButtonState != lastButtonState) {
// reset the debouncing timer
lastDebounceTime = millis();
}

if ((millis() - lastDebounceTime) > debounceDelay) {
// whatever the reading is at, it's been there for longer
// than the debounce delay, so take it as the actual current state:
buttonState = tmpButtonState;
Serial.println(buttonState);
}....


Nemogu da provalim kako ide.

Moze jos neki zadatak da vezbam

Hvala
[ Zlatni_bg @ 16.02.2015. 05:51 ] @
Pa je**m mu mater, kako si ih gasio u original kodu jednu po jednu? Je l' tolko tesko to opet uraditi bez vremenskog odlaganja?
[ uros2002 @ 16.02.2015. 17:43 ] @
Evo napokon sam resio i problem sa gasenjem LED dioda posle pustanja tastera

Orginalni kod skracena verzija sa dve LED diode i dva tastera:
Citat:
// constants won't change. They're used here to
// set pin numbers:

const int buttonPin = A0; // the number of the pushbutton pin
const int ledPin1 = 13; // the number of the LED pin for testing
const int ledPin2 = 12; // the number of the LED pin for testing


const int BUTTON1 = 1;
const int BUTTON2 = 2;

const int BUTTON1LOW = 461;
const int BUTTON1HIGH = 563;
const int BUTTON2LOW = 288;
const int BUTTON2HIGH = 352;

// Variables will change:
int ledState = HIGH; // the current state of the output pin
int buttonState; // the current reading from the input pin
int lastButtonState = LOW; // the previous reading from the input pin
int reading;

// the following variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long lastDebounceTime = 0; // the last time the output pin was toggled
long debounceDelay = 50; // the debounce time; increase if the output flickers

void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
Serial.begin(9600);
}

void loop() {
// read the state of the switch into a local variable:

int tmpButtonState = LOW; // the current reading from the input pin
int reading = analogRead(buttonPin);

if(reading>BUTTON2LOW && reading<BUTTON2HIGH){
//Read switch 2
tmpButtonState = BUTTON2;
}else if(reading>BUTTON1LOW && reading<BUTTON1HIGH){
//Read switch 1
tmpButtonState = BUTTON1;
}else{
//No button is pressed;
tmpButtonState = LOW;

}

// check to see if you just pressed the button
// (i.e. the input went from LOW to a buttonState), and you've waited
// long enough since the last press to ignore any noise:

// If the switch changed, due to noise or pressing:
if (tmpButtonState != lastButtonState) {
// reset the debouncing timer
lastDebounceTime = millis();
}

if ((millis() - lastDebounceTime) > debounceDelay) {
// whatever the reading is at, it's been there for longer
// than the debounce delay, so take it as the actual current state:
buttonState = tmpButtonState;
Serial.println(buttonState, LOW);
}

// save the reading. Next time through the loop,
// it'll be the lastButtonState:
lastButtonState = tmpButtonState;

// set the LED using the state of the button for testing:
switch(buttonState){
case BUTTON1:
digitalWrite(ledPin1, buttonState>0);
break;
case BUTTON2:
digitalWrite(ledPin2, buttonState>0);
break;

}
}


Kada sam malo procitao oko komande switch case primetio sam da je potrebno da se doda jos jedna komanda koja zavrsava switch case
Zato sam dodao ovo:

Citat:
....
default:
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);


Ako taster nije pritisnut da se vraca na default.

Nadam se da sam dobro uradio posto u simulatoru radi OK.

Evo promenio sam malo svrhu koda isti kod ali druga funkcija
Komanda releima za promenu smera motora

Ako postoji drugo resenje molim vas da mi napisete.
Takodje jos koji zadatak ako nije proble,

Hvala svima na pomoci

[Ovu poruku je menjao uros2002 dana 16.02.2015. u 19:53 GMT+1]

[Ovu poruku je menjao uros2002 dana 16.02.2015. u 19:54 GMT+1]
[ Zlatni_bg @ 17.02.2015. 18:06 ] @
Nece ti ljudi postavljati zadatke da bi ti nalazio gotova resenja na internetu.

Moj savet ti je da batalis ovo za sad i da ucis C++.
[ uros2002 @ 21.02.2015. 16:10 ] @
Pozdrav,

Evo stigao mi Arduino UNO, 4-relay board i ona ispitna plocica sa napajanjem i zicicama.

Probao sam par kodova za Blink LED i slicno sa LED diodama i radi.

Pokusavam da sastavim spisak potrebnih delova za amatere.
Planiram da uzmem u Kelco.

Otpornike po 10kom snage 1/4W:
100
220
1k
10k
22k
47k
68k
82k

Tastere 10kom:
DTS61N

Tranzistor :
BC546B - 10kom

Potenciometar :
POT6PM LIN 10K - 2kom

Potrebna mi je pomoc da izaberem jos delova iz ponude Kelco
Otpornika, Tranzistora, kondezatora, .....


Ako moze neko da mi pomogne da sastavim kompletan spisak.

Sve sto mi treba za pocetak kasnije cu kupovati dodatke od Arduino (razne module i senzore)

Da li mogu ovi dodaci da se koriste kineski sa Aliexpresa na orginalni Arduino.
Na Aliexpresu mogu da porucim dosta dodataka i da mi stigne ali ne znam da li valjaju i da li mogu da rad.

Hvala unapred
[ ZAS011 @ 21.02.2015. 19:57 ] @
Slika koju sam ja postavio, Mega2560 i ETH shield su sa Alija
Što bih koneze plaćao preskupo u Beogradu kad ne moram.
To sve radi 1/1
[ uros2002 @ 27.02.2015. 21:46 ] @
Pozdrav,

Imam jedno pitanje vezano za Arduino

na pin A0 imam analogni ulaz
na pin 2 prekidac kao digitalni ulaz
na pin 3 prekidac kao digitalni ulaz


Kako da napravim ovo:

kada je pin 2 LOW citati analogni pin A0 - ne citati pin 3
kada je pin 2 H{GH citati pin 3 - ne citati analogni pin A0

Code:


// definisanje 

const int modePin = 2;
const int startPin = 3;
const int buttonPin = A0;

const int relayPin1 =  13;

// ostatak koda nije prilozen

int modeState = 0;         
int startState = 0;
int buttonState;
int relayState = LOW;



// ostatak koda nije prilozen

void setup() {
    
    // ulazni pinovi
    pinMode(modePin, INPUT);
    pinMode(startPin, INPUT);
    pinMode(buttonPin, INPUT);
    
    // izlazni pinovi
    PinMode(relayPin1, OUTPUT);
    
    
    // ostatak pinova nije prilozan
}

void loop() {    // davanje naredbi za izvrsenje
    if (modeState == LOW){
        analogRead(buttonState)
        // ovde treba da ubacim da necita pin3
        // ili ti startPin
    }else{
        digitalRead(startState)
        // ovde treba da ubacim da necita pin A0
        // ili ti buttonPin
    }
    if (startState == HIGH){
        digitalWrite(relayPin1, HIGH)
        delay(2000);
    }else{
        // ostatak pinova nije prilozan
    }
}