|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
electo.vihar Neznanec
Pridružen-a: Ned 24 Nov 2013 19:36 Prispevkov: 2 Aktiv.: 0.02 Kraj: Ptuj
|
Objavljeno: Pon Jan 11, 2016 9:27 pm Naslov sporočila: SENZOR NE ZAZNAVA ZMERAJ, pomoč v kodi a |
|
|
Torej, izdelujem krmilnik za prižiganje LED trakov pod stopnicami. Pod vsako stopnico imam en LED trak, dva senzorja (Ultrasonic sensor) enega na najvišji stopnici in enega na najnižji. Kodo imam napisano vendar imam problem da senzorja ne zaznavata cel čas, kot bi zaznavala samo na 5sekund. Mislim da je kriva koda.
Prosim za pomoč pri tem.
Koda: |
#define trigPin 2
#define echoPin 3
#define trigPin2 5
#define echoPin2 6
int LED1 = 22; //LED pomeni enako pin13
int LED2 = 24;
int LED3 = 26;
int LED4 = 28;
int LED5 = 30;
int LED6 = 31;
int LED7 = 32;
int LED8 = 33;
int LED9 = 34;
int LED10 = 35;
int LED11 = 36;
int LED12 = 37;
int LED13 = 38;
int LED14 = 39;
int LED15 = 40;
int LED16 = 41;
int cas1 = 250; //čas prižiganja od LED1 do LED2
int cas = 150; //čas ugašanja od LED1 do LED2
int pauza = 5000; //čas hoje po stopnicah od LED1 do LED16
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT); // Izberemo, da je pin vhod ()
pinMode(LED1, OUTPUT); // Izberemo, da je pin izhod (OUTPUT)
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
pinMode(LED6, OUTPUT);
pinMode(LED7, OUTPUT);
pinMode(LED8, OUTPUT);
pinMode(LED9, OUTPUT);
pinMode(LED10, OUTPUT);
pinMode(LED11, OUTPUT);
pinMode(LED12, OUTPUT);
pinMode(LED13, OUTPUT);
pinMode(LED14, OUTPUT);
pinMode(LED15, OUTPUT);
pinMode(LED16, OUTPUT);
}
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW); // Added this line
delayMicroseconds(2); // Added this line
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); // Added this line
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
if (distance < 50) // This is where the LED On/Off happens
{
digitalWrite(LED1, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED2, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED3, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED4, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED5, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED6, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED7, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED8, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED9, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED10, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED11, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED12, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED13, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED14, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED15, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED16, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
delay (pauza);
}
else {
digitalWrite(LED16, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED15, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED14, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED13, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED12, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED11, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED10, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED9, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED8, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED7, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED6, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED5, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED4, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED3, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED2, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED1, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
}
if (distance >= 200 || distance <= 0){
Serial.println("Out of range");
}
else {
Serial.print(distance);
Serial.println(" cm");
}
delay(500);
long duration2, distance2;
digitalWrite(trigPin2, LOW); // Added this line
delayMicroseconds(2); // Added this line
digitalWrite(trigPin2, HIGH); // delayMicroseconds(1000); - Removed this line
delayMicroseconds(10); // Added this line
digitalWrite(trigPin2, LOW);
duration2 = pulseIn(echoPin2, HIGH);
distance2 = (duration2/2) / 29.1;
if (distance2 < 50) // Kdaj se LED prižge oz. ugasne
{
digitalWrite(LED16, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda) v mojem primeru prižig, saj sem na čip zvezal GND od LED
delay(cas1); // Počakaj
digitalWrite(LED15, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED14, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED13, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED12, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED11, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED10, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED9, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED8, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED7, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED6, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED5, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED4, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED3, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED2, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
digitalWrite(LED1, LOW); // Ugasnemo LED diodo (Nizko stanje izhoda)
delay(cas1); // Počakaj
delay (pauza);
}
else {
digitalWrite(LED1, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED2, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED3, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED4, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED5, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED6, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED7, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED8, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED9, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED10, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED11, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED12, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED13, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED14, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED15, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas); // Počakaj
digitalWrite(LED16, HIGH); // Prižgemo LED diodo (Visoko stanje izhoda)
delay(cas);
}
if (distance2 >= 200 || distance2 <= 0){
Serial.println("Out of range");
}
else {
Serial.print(distance2);
Serial.println(" cm");
}
delay(500);
}
|
Opis: |
|
Velikost datoteke: |
184.88 KB |
Pogledana: |
30 krat |
|
|
|
Nazaj na vrh |
|
|
Bizgec65 Član
Pridružen-a: Sre 10 Mar 2010 11:46 Prispevkov: 2057 Aktiv.: 11.98 Kraj: Trebnje
|
Objavljeno: Pon Jan 11, 2016 9:34 pm Naslov sporočila: |
|
|
Zmanjšaj sliko, da ne rabimo 3 monitorjev.
Edino kjer vidim 5 sec je:
int pauza = 5000; //čas hoje po stopnicah od LED1 do LED16
_________________ Če bi nekateri padli z višine svojega ega na višino svoje inteligence, bi se ubili. (Je pa res, da se meni ne smilijo!) |
|
Nazaj na vrh |
|
|
ElGrigon Član
Pridružen-a: Pon 24 Jul 2006 22:38 Prispevkov: 3880 Aktiv.: 17.97 Kraj: okolica Lenarta
|
Objavljeno: Pon Jan 11, 2016 10:20 pm Naslov sporočila: |
|
|
Ko ni nobenega v bližini ti koda leti v ugašanju LED in vedno imaš 5s delay. Če v tem času prideš do senzorja, te ne zazna, ker še ni poteklo 5s preden spet prične meritev.
Za začetek daj delay(pauza) ven iz if stavkov in bo ta pavza prisotna samo kadar se ti bodo prižgale LED, kar pomeni, da bo 5s svetilo. Lahko nastaviš čas na 30s in bo vse skupaj delovalo kot stopniščni avtomat.
_________________ lp, ElGrigon |
|
Nazaj na vrh |
|
|
Jaka57 Moderator
Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5773 Aktiv.: 25.92 Kraj: Grosuplje
|
Objavljeno: Pon Jan 11, 2016 10:30 pm Naslov sporočila: |
|
|
electo.vihar slike se pripenjajo na forum oz v sporočilo in ne na neke zunanje strežnike slik, kajti jutri jih ne bo več in seveda primerne velikosti, posebno v tem primeru, kjer slika niti ni pomembna za razumevanje zadeve.
Sliko sem ustrezno zmanjšal in jo prilepil v tvoj post.
Kar se pa kode tiče, senzorja delujeta stalno, toda Arduino jih enostavno ne prebere, ko se prižigajo in ugašajo LEDice.
Čas ugašanja trakov je 4 sekunde + 5 sekund pauze, čas prižiganja je 2.4 sekunde.
Na tak način definitivno ne moreš brati stalno UZ senzorja, kajti v tvoji kodi, ko je pauza, dela samo ta pauza (notranji časovniki v kontrolerju štejejo, dokler ni izpolnjen pogoj) in ničesar drugega.
Na kratko napiši, kako si si vse to zamislil, še lepše bi pa bilo, če bi imel diagram poteka.
In še nekaj, taka klobasa, ki si jo uspel napisat je nepregledna. Prižiganje led in ugašanje led sta lahko samostojni proceduri in vsaka je napisana samo enkrat, zunaj void loop(), tako kot je pri tebi pa sta napisani dvakrat in to v void loop().
Branje take kode je nadležno in odbijajoče, zato je tudi nisem bolj podrobno gledal.
Če se ne motim, je član foruma protonček naredil nekaj podobnega (ugašanje in prižiganje stopnic), mislim, da je vse skupaj napisano v Bascomu in če se ne motim je uporabil interupte. Za več se obrni na njega.
_________________ Lp, Jaka |
|
Nazaj na vrh |
|
|
electo.vihar Neznanec
Pridružen-a: Ned 24 Nov 2013 19:36 Prispevkov: 2 Aktiv.: 0.02 Kraj: Ptuj
|
Objavljeno: Pet Jan 15, 2016 6:59 pm Naslov sporočila: |
|
|
Sliko in še (.ino) datoteko sem hotel pripeti, ampak ker sem imel težave sem sliko vsavil drugače. Hvala za ureditev slike.
To naj bi delovalo tako, da ko sprožim spodnji senzor se lučke prižigajo navzgor ena za drugo po stopnicah, svetijo približno 5s potem se ugasnejo od spodaj navzgor ena za drugo. Ko pa me zazna zgornji senzor pa se ledice prižigajo od zgoraj navzdol ena za drugo, spet svetijo 5s in se tudi ugasnejo ena za drugo.
|
|
Nazaj na vrh |
|
|
robert Član
Pridružen-a: Sob 29 Maj 2004 21:48 Prispevkov: 1871 Aktiv.: 8.40 Kraj: Tolmin
|
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 67 dni
Powered by phpBB © 2001, 2005 phpBB Group
|