www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Arduino začetne težave
Pojdi na stran 1, 2, 3, 4, 5, 6, 7, 8, 9, 10  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
amater70
Član
Član



Pridružen-a: Pet 20 Jan 2012 9:06
Prispevkov: 34
Aktiv.: 0.23
Kraj: MB

PrispevekObjavljeno: Ned Feb 09, 2014 8:56 pm    Naslov sporočila:  Arduino začetne težave Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Jaka57
Moderator
Moderator



Pridružen-a: Ned 12 Dec 2004 21:47
Prispevkov: 5773
Aktiv.: 25.91
Kraj: Grosuplje

PrispevekObjavljeno: Ned Feb 09, 2014 9:09 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
1tilen
Član
Član



Pridružen-a: Sre 30 Okt 2013 22:03
Prispevkov: 75
Aktiv.: 0.59
Kraj: Sežana

PrispevekObjavljeno: Ned Feb 09, 2014 9:13 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Jaka57
Moderator
Moderator



Pridružen-a: Ned 12 Dec 2004 21:47
Prispevkov: 5773
Aktiv.: 25.91
Kraj: Grosuplje

PrispevekObjavljeno: Ned Feb 09, 2014 9:33 pm    Naslov sporočila:   Odgovori s citatom

@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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
amater70
Član
Član



Pridružen-a: Pet 20 Jan 2012 9:06
Prispevkov: 34
Aktiv.: 0.23
Kraj: MB

PrispevekObjavljeno: Čet Feb 13, 2014 7:07 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
skalpel
Član
Član



Pridružen-a: Tor 31 Jan 2012 19:46
Prispevkov: 432
Aktiv.: 2.90
Kraj: Šenčur

PrispevekObjavljeno: Čet Feb 13, 2014 7:21 pm    Naslov sporočila:   Odgovori s citatom

Tu imaš lepo prikazano Wink
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
mkosmac
Član
Član



Pridružen-a: Čet 26 Mar 2009 22:18
Prispevkov: 301
Aktiv.: 1.64
Kraj: Limbarska Gora

PrispevekObjavljeno: Čet Feb 13, 2014 7:28 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Jaka57
Moderator
Moderator



Pridružen-a: Ned 12 Dec 2004 21:47
Prispevkov: 5773
Aktiv.: 25.91
Kraj: Grosuplje

PrispevekObjavljeno: Čet Feb 13, 2014 8:52 pm    Naslov sporočila:   Odgovori s citatom

@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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
mkosmac
Član
Član



Pridružen-a: Čet 26 Mar 2009 22:18
Prispevkov: 301
Aktiv.: 1.64
Kraj: Limbarska Gora

PrispevekObjavljeno: Čet Feb 13, 2014 10:23 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
levy
Član
Član



Pridružen-a: Tor 15 Okt 2013 17:40
Prispevkov: 32
Aktiv.: 0.25
Kraj: Kočevje

PrispevekObjavljeno: Čet Feb 20, 2014 3:58 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
skalpel
Član
Član



Pridružen-a: Tor 31 Jan 2012 19:46
Prispevkov: 432
Aktiv.: 2.90
Kraj: Šenčur

PrispevekObjavljeno: Čet Feb 20, 2014 4:14 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
levy
Član
Član



Pridružen-a: Tor 15 Okt 2013 17:40
Prispevkov: 32
Aktiv.: 0.25
Kraj: Kočevje

PrispevekObjavljeno: Čet Feb 20, 2014 4:36 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
skalpel
Član
Član



Pridružen-a: Tor 31 Jan 2012 19:46
Prispevkov: 432
Aktiv.: 2.90
Kraj: Šenčur

PrispevekObjavljeno: Čet Feb 20, 2014 4:42 pm    Naslov sporočila:   Odgovori s citatom

Aha, mi lahko poveš še kateri senzor uporabljaš?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
levy
Član
Član



Pridružen-a: Tor 15 Okt 2013 17:40
Prispevkov: 32
Aktiv.: 0.25
Kraj: Kočevje

PrispevekObjavljeno: Čet Feb 20, 2014 5:03 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Jaka57
Moderator
Moderator



Pridružen-a: Ned 12 Dec 2004 21:47
Prispevkov: 5773
Aktiv.: 25.91
Kraj: Grosuplje

PrispevekObjavljeno: Čet Feb 20, 2014 5:19 pm    Naslov sporočila:   Odgovori s citatom

@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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    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

 
Pojdi na:  
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: 69 dni


Powered by phpBB © 2001, 2005 phpBB Group