|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
amater70 Član
Pridružen-a: Pet 20 Jan 2012 9:06 Prispevkov: 34 Aktiv.: 0.23 Kraj: MB
|
Objavljeno: Ned Feb 09, 2014 8:56 pm Naslov sporočila: Arduino začetne težave |
|
|
Nabavil sem arduino uno in začel z enostavnim prižiganjem ledic, do zdaj mi je kr šlo, nakar pa se je pojavila želja da bi vključil potenciometer, z katerim bi nastavljal hitrost utripanja ledic in pa tipko z katero bi lahko prestavjel med določenimi programi utripanja lučk. Celi dan se mučim, pa nekako ne uspe najbolje, zato bi prosil za kakšen namig.
Program:
void setup() {
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
}
void loop() {
digitalWrite(8, HIGH); // Led je vklopljena
delay(1000); // počakaj sekundo
digitalWrite(8, LOW); // led je izklopljena
digitalWrite(7, HIGH); // Led je vklopljena
digitalWrite(9, HIGH); // Led je vklopljena
delay(1000); // počakaj sekundo
digitalWrite(7, LOW); // led je izklopljena
digitalWrite(9, LOW); // led je izklopljena
digitalWrite(6, HIGH); // Led je vklopljena
digitalWrite(10, HIGH); // Led je vklopljena
delay(1000); // počakaj sekundo
digitalWrite(6, LOW); // led je izklopljena
digitalWrite(10, LOW); // led je izklopljena
digitalWrite(5, HIGH); // Led je vklopljena
digitalWrite(11, HIGH); // Led je vklopljena
delay(1000); // počakaj sekundo
digitalWrite(5, LOW); // led je izklopljena
digitalWrite(11, LOW); // led je izklopljena
digitalWrite(4, HIGH); // Led je vklopljena
digitalWrite(12, HIGH); // Led je vklopljena
delay(1000); // počakaj sekundo
digitalWrite(4, LOW); // led je izklopljena
digitalWrite(12, LOW); // led je izklopljena
digitalWrite(5, HIGH); // Led je vklopljena
digitalWrite(11, HIGH); // Led je vklopljena
delay(1000); // počakaj sekundo
digitalWrite(5, LOW); // led je izklopljena
digitalWrite(11, LOW); // led je izklopljena
digitalWrite(6, HIGH); // Led je vklopljena
digitalWrite(10, HIGH); // Led je vklopljena
delay(1000); // počakaj sekundo
digitalWrite(6, LOW); // led je izklopljena
digitalWrite(10, LOW); // led je izklopljena
digitalWrite(7, HIGH); // Led je vklopljena
digitalWrite(9, HIGH); // Led je vklopljena
delay(1000); // počakaj sekundo
digitalWrite(7, LOW); // led je izklopljena
digitalWrite(9, LOW); // led je izklopljena
} |
|
Nazaj na vrh |
|
|
Jaka57 Moderator
Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5774 Aktiv.: 25.87 Kraj: Grosuplje
|
Objavljeno: Ned Feb 09, 2014 9:09 pm Naslov sporočila: |
|
|
V tem tvojem programu ne vidim nobenega pina definiranega kot digital input za tipke, prav tako nobenega pina za potenciometer (analog input).
V Arduino IDE imaš primer spreminjana hitrosti utripanja ene LED v odvisnosti od pozicije potenciometra, prav tako imaš vse to opisano na Arduino strani na Netu.
Kar hočem povedat je to, da začni postopoma recimo z eno LED in eno tipko, potem pa greš naprej in dokler ti ni vse jasno pri enostavnem primeru, ne nadaljuj, ker ti bo čedalje manj jasno.
In še primer iz Arduino IDE:
Koda: |
/*
Analog Input
Demonstrates analog input by reading an analog sensor on analog pin 0 and
turning on and off a light emitting diode(LED) connected to digital pin 13.
The amount of time the LED will be on and off depends on
the value obtained by analogRead().
The circuit:
* Potentiometer attached to analog input 0
* center pin of the potentiometer to the analog pin
* one side pin (either one) to ground
* the other side pin to +5V
* LED anode (long leg) attached to digital output 13
* LED cathode (short leg) attached to ground
* Note: because most Arduinos have a built-in LED attached
to pin 13 on the board, the LED is optional.
Created by David Cuartielles
modified 30 Aug 2011
By Tom Igoe
This example code is in the public domain.
http://arduino.cc/en/Tutorial/AnalogInput
*/
int sensorPin = A0; // select the input pin for the potentiometer
int ledPin = 13; // select the pin for the LED
int sensorValue = 0; // variable to store the value coming from the sensor
void setup() {
// declare the ledPin as an OUTPUT:
pinMode(ledPin, OUTPUT);
}
void loop() {
// read the value from the sensor:
sensorValue = analogRead(sensorPin);
// turn the ledPin on
digitalWrite(ledPin, HIGH);
// stop the program for <sensorValue> milliseconds:
delay(sensorValue);
// turn the ledPin off:
digitalWrite(ledPin, LOW);
// stop the program for for <sensorValue> milliseconds:
delay(sensorValue);
} |
In še nekaj, tema "Arduino začetne težave" že obstaja in si brez potrebe odprl novo. _________________ Lp, Jaka
Nazadnje urejal/a Jaka57 Ned Feb 09, 2014 9:28 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
|
1tilen Član
Pridružen-a: Sre 30 Okt 2013 22:03 Prispevkov: 75 Aktiv.: 0.59 Kraj: Sežana
|
Objavljeno: Ned Feb 09, 2014 9:13 pm Naslov sporočila: |
|
|
Kar se tiče hitrosti utripanja in potenciometra: Uporabiš lahko še eno spremenljivko, ki je enaka analogReadu iz potenciometra. Nato to spremenljivko vpišeš v delaye namesto določenega časa. Koliko je najkrajši in koliko najdaljši delay pa lahko določiš s funkcijo map. Sicer tukaj potem potrebuješ dve spremenljivki.
Več programov: Mogoče bi lahko poskusil z dodatno tipko in nekaj if stavki. Npr. Na začetku je program = 1 -> ko klikneš to dodatno tipko program poveča za 1.
Lp 1Tilen |
|
Nazaj na vrh |
|
|
Jaka57 Moderator
Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5774 Aktiv.: 25.87 Kraj: Grosuplje
|
Objavljeno: Ned Feb 09, 2014 9:33 pm Naslov sporočila: |
|
|
@1tilen: ti mu predlagaš uporabo dodatnih funkcij, toda, kakor vidim je popoln začetnik, zato v tem tvojem predlogu ne vidim nikakršnega smisla. _________________ Lp, Jaka |
|
Nazaj na vrh |
|
|
amater70 Član
Pridružen-a: Pet 20 Jan 2012 9:06 Prispevkov: 34 Aktiv.: 0.23 Kraj: MB
|
Objavljeno: Čet Feb 13, 2014 7:07 pm Naslov sporočila: |
|
|
Kod ste mi predlagali, sem šel čisto od začetka, prižiganje ledic mi že kr nekako gre, zdaj pa bi rad naredil da bi ob pritisku tipke svetila ledica na pin9, ob ponovnem pritisku na tipko pa bi ledica ugasnila, napisal sem program ki naj bi po mojem deloval, pa vidim da sem v zmoti, ko program naložim gori ledica non-stop, od tipke pa nič odziva. Kje ga loomim?
const int buttonPin = 2;
int ledPin = 9;
int buttonState = 0;
void setup() {
pinMode(9, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop(){
buttonState = digitalRead(buttonPin);
{ digitalRead(buttonState == HIGH);
digitalWrite(9, HIGH); }
{ digitalRead(buttonState == HIGH);
digitalWrite(9, LOW); }
} |
|
Nazaj na vrh |
|
|
skalpel Član
Pridružen-a: Tor 31 Jan 2012 19:46 Prispevkov: 432 Aktiv.: 2.90 Kraj: Šenčur
|
|
Nazaj na vrh |
|
|
mkosmac Član
Pridružen-a: Čet 26 Mar 2009 22:18 Prispevkov: 301 Aktiv.: 1.64 Kraj: Limbarska Gora
|
Objavljeno: Čet Feb 13, 2014 7:28 pm Naslov sporočila: |
|
|
Tipka se že odziva, samo tako hitro, da ti ne vidiš. Daj 1s zakasnitev za tem delom kode:
Koda: |
{ digitalRead(buttonState == HIGH);
digitalWrite(9, HIGH); } |
in tem delom:
Koda: |
{ digitalRead(buttonState == HIGH);
digitalWrite(9, LOW); }
|
in med izvajanjem drži tipko, pa boš sam ugotovil, kje je težava. To ni prava rešitev tvojega problema, ampak, da pa vidiš kaj se dogaja bo kar vredu. _________________ LP Matej
if(?) ask_google(); |
|
Nazaj na vrh |
|
|
Jaka57 Moderator
Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5774 Aktiv.: 25.87 Kraj: Grosuplje
|
Objavljeno: Čet Feb 13, 2014 8:52 pm Naslov sporočila: |
|
|
@amater70:
Pa poglejmo funkcijo digitalRead() kakor je razložena v Arduino Reference:
Citiram: |
digitalRead()
Description
Reads the value from a specified digital pin, either HIGH or LOW.
Syntax
digitalRead(pin)
Parameters
pin: the number of the digital pin you want to read (int)
Returns
HIGH or LOW
|
Torej, kaj ti naredita sledeča stavka v tvoji kodi? Popolnoma nič uporabnega!
Koda: |
{ digitalRead(buttonState == HIGH);
digitalWrite(9, HIGH); } |
Ko pritisneš tipko, ki je na pinu2 boš s prvo vrstico prebral stanje na pinu 0 oz. na pinu 1, ko tipka ni pritisnjena, kajti (buttonState == HIGH) vrne 1 ali pa 0. Takoj zatem boš LED ptrižgal, v drugem paru stavkov se zgodi popolnoma isto z digitalRead(), takoj zatem pa LED ugasneš.
Zna biti, da LED brli, kajti vse to se vrti v void loop()
In še program, ki bi moral delati, tako kot želiš ti:
Koda: |
int LEDpin = 9; // LED je na pinu 9
int buttonPin = 2; //tipka je vezana iz pina na minus (maso)
boolean LEDprizgana = false;
void setup()
{
pinMode(LEDpin, OUTPUT);
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin, HIGH); // pullup upor na pin, namesto tega stavka in enega višje lahko uporabiš
// pinMode(buttonPin,INPUT_PULLUP), če imaš Arduino 1.0.1 ali več
}
void loop()
{
if (digitalRead(buttonPin) == LOW) // tipka je pritisnjena, pullup jo drugače drži na visokem nivoju
{
delay(100); // zakasnitev 100ms - debounce tipke, če je zakasnitev premajhna, jo lahko povečaš
LEDprizgana = !LEDprizgana; // obrni spremenljivko LEDprizgana
digitalWrite(LEDpin, LEDprizgana); // in vrednost LEDprizgana prikaži na LED diodi
}
}
|
@mkosmac: si prepričan, da bi s tvojim predlogom, držanja tipke, kaj ugotovil? _________________ Lp, Jaka |
|
Nazaj na vrh |
|
|
mkosmac Član
Pridružen-a: Čet 26 Mar 2009 22:18 Prispevkov: 301 Aktiv.: 1.64 Kraj: Limbarska Gora
|
Objavljeno: Čet Feb 13, 2014 10:23 pm Naslov sporočila: |
|
|
Jaka57 je napisal/a: |
@mkosmac: si prepričan, da bi s tvojim predlogom, držanja tipke, kaj ugotovil? |
Res je bila moja napaka, ker sem predvideval, da amater70 ve, kaj funkcija digitalRead() sprejme kot parameter in si je nisem pogledal. Sam arduinota še nisem uporabljal.
Če bi bila funkcija uporabljena tako kot je treba in bi vmes dal 1s zakasnitev, bi amater70 videl, da LED dejansko ne sveti ampak utripa, ko je tipka pritisnjena. Po moje (glede na moje začetke s programiranjem), je to za začetnika pomembno saj ve, kaj se resnično dogaja z izhodom. Mogoče bi s tem sam ugotovil, da on LED prižge, kasneje pa (takoj) ugasne. _________________ LP Matej
if(?) ask_google(); |
|
Nazaj na vrh |
|
|
levy Član
Pridružen-a: Tor 15 Okt 2013 17:40 Prispevkov: 32 Aktiv.: 0.25 Kraj: Kočevje
|
Objavljeno: Čet Feb 20, 2014 3:58 pm Naslov sporočila: |
|
|
ker imam tudi sam nekaj začetnih težav me zanima naslednje:
Pri merjenju temperature sem dobili vrednosti okrog 520, kar je digitalna vrednost napetosti na izhodu senzorja. Kako bi dobil in dejansko prikazoval temperaturo v stopinjah Celzija?
Hvala |
|
Nazaj na vrh |
|
|
skalpel Član
Pridružen-a: Tor 31 Jan 2012 19:46 Prispevkov: 432 Aktiv.: 2.90 Kraj: Šenčur
|
Objavljeno: Čet Feb 20, 2014 4:14 pm Naslov sporočila: |
|
|
levy je napisal/a: |
ker imam tudi sam nekaj začetnih težav me zanima naslednje:
Pri merjenju temperature sem dobili vrednosti okrog 520, kar je digitalna vrednost napetosti na izhodu senzorja. Kako bi dobil in dejansko prikazoval temperaturo v stopinjah Celzija?
Hvala |
Kater senzor imaš? Kakšna je koda? |
|
Nazaj na vrh |
|
|
levy Član
Pridružen-a: Tor 15 Okt 2013 17:40 Prispevkov: 32 Aktiv.: 0.25 Kraj: Kočevje
|
Objavljeno: Čet Feb 20, 2014 4:36 pm Naslov sporočila: |
|
|
Koda:
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7, 8);
const int temparaturniSenzor = A1;
int stanjeTemperature = 0;
void setup(){
lcd.begin (16,2);
lcd.clear();
lcd.print ( "Temparatura");
}
void loop(){
lcd.setCursor (0,1);
stanjeTemperature = analogRead (temparaturniSenzor);
analogWrite (temparaturniSenzor, stanjeTemperature);
lcd.print (stanjeTemperature/22);
lcd.print ( " C ");
} |
|
Nazaj na vrh |
|
|
skalpel Član
Pridružen-a: Tor 31 Jan 2012 19:46 Prispevkov: 432 Aktiv.: 2.90 Kraj: Šenčur
|
Objavljeno: Čet Feb 20, 2014 4:42 pm Naslov sporočila: |
|
|
Aha, mi lahko poveš še kateri senzor uporabljaš? |
|
Nazaj na vrh |
|
|
levy Član
Pridružen-a: Tor 15 Okt 2013 17:40 Prispevkov: 32 Aktiv.: 0.25 Kraj: Kočevje
|
Objavljeno: Čet Feb 20, 2014 5:03 pm Naslov sporočila: |
|
|
Ne vem natančno, ker smo to delali v šoli. Verjetno je PTK... Vrednost raste linearno z gretjem se veča tudi vrednost. |
|
Nazaj na vrh |
|
|
Jaka57 Moderator
Pridružen-a: Ned 12 Dec 2004 21:47 Prispevkov: 5774 Aktiv.: 25.87 Kraj: Grosuplje
|
Objavljeno: Čet Feb 20, 2014 5:19 pm Naslov sporočila: |
|
|
@levy: če ne veš kakšno tipalo uporabljaš, ne moreš vedeti, kaj boš dobil na vhodu Arduina!
Stvari, ki jih moraš poznati in mi tudi, če želiš nek normalen odgovor, ki ti bo v pomoč, so:
- vrsta tipala in njegova vrednost oz. oznaka tipala (npr. PT1000, PT100, KTY...),
- vezava tipala na vhodu v Arduino.
Brez tega enostavno ne gre, vse ostalo, napisano brez tega, je zgolj ugibanje ali nakladanje!
Ja, dobil si vrednost 520 od 1024 možnih. Kolikšna je ta napetost je odvisno od reference ADCja, kolikšna pa je temperatura, pa ne ve nihče, saj ni dovolj podatkov oz. jih sploh ni! _________________ Lp, Jaka |
|
Nazaj na vrh |
|
|
|
|
www.elektronik.si Seznam forumov
-> Arduino sekcija |
Časovni pas GMT + 2 uri, srednjeevropski - poletni čas Pojdi na stran 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 Naslednja
|
Stran 1 od 10 |
|
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: 83 dni
Powered by phpBB © 2001, 2005 phpBB Group
|