Show Posts
Pages: [1] 2 3
1  International / Scandinavia / Arduino + Sparkfun Mp3 trigger on: April 20, 2013, 10:33:35 am
Hej

Jeg er ved at lave projekt hvor 2 lys følere skal trigge hver sit track på Mp3 trigger v2 (sparkfun).

Sensorene aktiverer hver sin digitale pin på Arduinoen, som er forbundet direkte til "mp3 trigger" trigger punkter, så jeg burde få forskellige sange på lysfølerne. Men uanset hvilken lyssensor der aktiveres, afspilles altid den første lydfil i afspilningslisten (hedder 001) på "mp3 trigger".

Bonus info
Trigger indgangen på "mp3 trigger" har pull-up.
Trigger fungerer fint med trykknap og 2 ledninger direkte på trigger indgangen/GND
I følge brugsanvisningen kan mp3 trigger v2 kører direkte på arduinoens digitale pins.


Code:
int lyd = A0;
int lys1 = A1;
int lys2 = A2;

int led1 = 9;
int led2 = 10;
int led3 = 11;

int tr1 = 0;
int tr2 = 1;
int tr3 = 2;
int tr4 = 3;
int tr5 = 4;
int tr6 = 5;
int tr7 = 6;
int tr8 = 7;
int tr9 = 8;
int tr10 = 12;

int vallyd = 0;
int val1 = 0;
int val2 = 0;

const int VENSTRE = 10;
const int HOJRE = 20;
const int BEGGE = 30;
int laststate;
int laststate2;


void setup()                               //setup//
{
pinMode(lyd, INPUT);
pinMode(lys1, INPUT);
pinMode(lys2, INPUT);

pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);

pinMode(tr1, OUTPUT);

pinMode(tr2, OUTPUT);

pinMode(tr3, OUTPUT);

pinMode(tr4, OUTPUT);

pinMode(tr5, OUTPUT);

pinMode(tr6, OUTPUT);

pinMode(tr7, OUTPUT);

pinMode(tr8, OUTPUT);

pinMode(tr9, OUTPUT);

pinMode(tr10, OUTPUT);

}

void loop()                            //loop//
{
  vallyd = analogRead(lyd);
  val1 = analogRead(lys1);
  val2 = analogRead(lys2);
  {
    vallyd=map(vallyd, 0, 750, 0, 512);
    analogWrite(led1, -vallyd),
    analogWrite(led2, vallyd);
    analogWrite(led3, vallyd);
  }
 
    if ( val1 > 800 && laststate!=VENSTRE)
  {
    digitalWrite(tr7, HIGH);
    delay(300);
    digitalWrite(tr7, LOW);
    laststate = VENSTRE;
 
  }
 
      if ( val2 > 800 && laststate!=HOJRE)
  {
    digitalWrite(tr3, HIGH);
   delay(300);
    digitalWrite(tr3, LOW);
    laststate = HOJRE;
 
  }
}

VH
Lydfanger
2  International / Scandinavia / Re: 5 volt output on: April 06, 2013, 04:41:14 pm
Tak.
God info, som jeg vil "regne" videre på.
Vh lydfanger
3  International / Scandinavia / Re: 5 volt output on: April 05, 2013, 05:51:01 pm
Jeg er med på max 40 mA per pin. Jeg går ud fra det er nok til at trigge relayet. Pinx skal bare åbne en transistor på relayboardet.

Det jeg i virkeligheden vil, er at bruge en 9v (1, 2A) strømforsyning til uno boardet, og tage strøm fra uno til relay boarded som arbejder på 5 v . Jeg skal bare være sikker på ikke at overbelaste 5v pin på unoen. Du skriver 500mA, så det burde være ok.
4  International / Scandinavia / løst 5 volt output on: April 04, 2013, 05:00:31 pm
Jeg vil forbinde et board med 4 relayer til uno, der hver trækker 80mA, altså i alt 320mA.
Hvis ellers forsyningen er stor nok, kan jeg trække strømmen fra 5v pin på uno'en, eller der max output?

Vh
Lydfanger
5  International / Scandinavia / Re: LØST Capacitive Sens on: February 21, 2013, 03:47:57 am
tak tak



6  International / Scandinavia / Re: Capacitive Sens on: February 20, 2013, 05:40:52 pm
Tak for svarene

Efter jeg prøvede det I skrev i jeres indlæg meldte IDE stadig fejl.
Jeg tog internettet til hjælp og fandt ud af, der i den ene libraries fil var en henvisning til et libraries "Wconstance.h". Filen er ikke nødvendig og er derfor fjernet.
Så nu virker tingene sammen.
Skal det forståes sådan at en libraries fil, kan include en helt tredje fil?

Vh
Lydfanger
7  International / Scandinavia / Re: Capacitive Sens on: February 11, 2013, 04:01:45 pm
Nu har jeg forenklet lidt i sketch'en, og tilføjet det du nævnte.
Nu får jeg følgende melding

"CapacitiveSensor' does not name a type".

Code:
#include <CapacitiveSensor.h>
CapacitiveSensor   cs_4_2 (4,2);


CapacitiveSensor   cs_4_2 = CapacitiveSensor(4,2);        // 10 megohm resistor between pins 4 & 2, pin 2 is sensor pin, add wire, foil
 // 10 megohm resistor between pins 4 & 8, pin 8 is sensor pin, add wire, foil

void setup()                   
{

   cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);     // turn off autocalibrate on channel 1 - just as an example
   Serial.begin(9600);

}

void loop()                   
{
    long start = millis();
    long total1 =  cs_4_2.CapacitiveSensor(30);
   

    Serial.print(millis() - start);        // check on performance in milliseconds
    Serial.print("\t");                    // tab character for debug windown spacing

    Serial.print(total1);                  // print sensor output 1
   

    delay(10);                             // arbitrary delay to limit data to serial port
}

8  International / Scandinavia / LØST Capacitive Sens on: February 10, 2013, 03:26:07 pm
Hej igen smiley-lol

Jeg er begyndt at udforske import af biblioteker og fandt et spændende projekt med CapacitiveSens. Sketch'en er færdig skrevet, hentet fra Arduino's hjemmeside, Bilblioteks filen en lagt i biblioteket og kan ses i IDE'en.

Derfor undre det mig at jeg får fejlmeldinger som:
CapacitiveSensor'does not name a type
og
'cs_4_2' was not declared in this scope

Er der nogen som kan gennemskue hvad der er "galt", eller hvad jeg overser", i forhold til nedenstående sketch.

Code:
#include <CapacitiveSensor.h>

/*
 * CapitiveSense Library Demo Sketch
 * Paul Badger 2008
 * Uses a high value resistor e.g. 10 megohm between send pin and receive pin
 * Resistor effects sensitivity, experiment with values, 50 kilohm - 50 megohm. Larger resistor values yield larger sensor values.
 * Receive pin is the sensor pin - try different amounts of foil/metal on this pin
 * Best results are obtained if sensor foil and wire is covered with an insulator such as paper or plastic sheet
 */


CapacitiveSensor   cs_4_2 = CapacitiveSensor(4,2);        // 10 megohm resistor between pins 4 & 2, pin 2 is sensor pin, add wire, foil
CapacitiveSensor   cs_4_5 = CapacitiveSensor(4,5);        // 10 megohm resistor between pins 4 & 6, pin 6 is sensor pin, add wire, foil
CapacitiveSensor   cs_4_8 = CapacitiveSensor(4,8);        // 10 megohm resistor between pins 4 & 8, pin 8 is sensor pin, add wire, foil

void setup()                    
{

   cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);     // turn off autocalibrate on channel 1 - just as an example
   Serial.begin(9600);

}

void loop()                    
{
    long start = millis();
    long total1 =  cs_4_2.capacitiveSensor(30);
    long total2 =  cs_4_5.capacitiveSensor(30);
    long total3 =  cs_4_8.capacitiveSensor(30);

    Serial.print(millis() - start);        // check on performance in milliseconds
    Serial.print("\t");                    // tab character for debug windown spacing

    Serial.print(total1);                  // print sensor output 1
    Serial.print("\t");
    Serial.print(total2);                  // print sensor output 2
    Serial.print("\t");
    Serial.println(total3);                // print sensor output 3

    delay(10);                             // arbitrary delay to limit data to serial port
}


Vh
LYDFANGER
9  International / Scandinavia / Re: RPM måler del 2 on: January 26, 2013, 09:36:26 am
Hej hej.

Tak for dit input, jeg vil huske det til senere projekt.
 mht. "tidsresten" viser det sig ikke at være et problem i praksis på cyklen. Efter cyklen har stået stille er det altid det samme Serial.println der bliver sendt til pc'en, og praksis kan man ikke se, "pc-filen" bliver startet forfra.

Derfor:

"jeg erklærer hermed problemerne for løst" smiley-lol

Endnu engang tak for hjælpen og nye ideer.

LYDFANGER
10  International / Scandinavia / Re: RPM måler del 2 on: January 17, 2013, 06:53:25 am
yes,yes,yes.

Nu kører det.

Dog er der en lille ting som måske kunne blive bedre: når cykel har stået stille og Unoen har skrevet "Du bruger jo ikke benene", er det som om der er en "tids rest", som unoen regner videre på når pedalerne bliver trådt igen. Er der en metode til at fjerne denne rest, så man undgår at "rpm" bliver for lille, i forhold til det nye tempo i pedalerne. Eller: kan man blokere Serial.println i x-sekunder? 

Code:
const int UP = 13;
const int DOWN = 12;

volatile int rpm;

unsigned long timeold;
unsigned long timenew;
unsigned long timediff;
volatile byte rpmcount;


const int HURTIG = 10;
const int LANGSOM = 20;
const int PAU =30;
int lastState;
int lasttimediff;
int sidste;

boolean lastbuttonUP = HIGH;          // debounce//
boolean currbuttonUP = HIGH;
boolean lastbuttonDOWN = HIGH;     
boolean currbuttonDOWN = HIGH;

int PushCounter = 0;
int lastPushCounter = 0;
int lastrpm = 0;

void setup()
{
  pinMode(UP, INPUT);
  digitalWrite(UP, HIGH);
  pinMode(DOWN , INPUT);
  digitalWrite(DOWN, HIGH);


  Serial.begin(9600);
  attachInterrupt(0, rpm_fun, RISING); // Interrupt triggers on rising edge; when the sensor turns off.

  digitalWrite(2, HIGH);
  rpmcount = 0;
  rpm = 0;
  timeold = 0;

}
boolean debounceUP(boolean lastUP)              //debounce UP/
{
  boolean currentUP = digitalRead(UP);
  if (lastUP != currentUP)
  {
    delay(50);
    currentUP = digitalRead(UP);
  }
  return currentUP;

}


boolean debounceDOWN(boolean lastDOWN)              //debounce DOWN/
{
  boolean currentDOWN = digitalRead(DOWN);
  if (lastDOWN != currentDOWN)
  {
    delay(50);
    currentDOWN = digitalRead(DOWN);
  }
  return currentDOWN;

}
void loop()                                            //void loop//
{
  currbuttonUP = debounceUP(lastbuttonUP);                  // up //
  if(lastbuttonUP == HIGH && currbuttonUP == LOW)
  {
    PushCounter++;
    PushCounter = min(PushCounter, 10);
    Serial.print("PROFIL:");
    Serial.println(PushCounter);

  }
  lastbuttonUP = currbuttonUP;



  currbuttonDOWN= debounceDOWN(lastbuttonDOWN);            //DOWN//
  if(lastbuttonDOWN == HIGH && currbuttonDOWN == LOW)
  {
    PushCounter--;
    PushCounter = max(PushCounter, 1);
    Serial.print("PROFIL");
    Serial.println(PushCounter);
  }
  lastbuttonDOWN = currbuttonDOWN;


  if (rpmcount==1)
    timeold=millis();


  else if (rpmcount >= 15) {



    rpm = 30000L/(millis() - timeold)*(rpmcount-1);

    rpmcount = 0;
    {
      Serial.println(rpm);
    }


  }

  if ( rpm >= 60 && lastState!=HURTIG)
    if (rpm!=lastrpm)
    {
      lastrpm=rpm ;

      switch (PushCounter)
      {
      case 1 :
        Serial.println("HURTIG 1");
        break;
      case 2 :
        Serial.println("HURTIG 2");
        break;
      case 3:
        Serial.println("HURTIG 3");
        break;
      case 4:
        Serial.println("HURTIG 4");
        break;
      case 5:
        Serial.println("HURTIG 5");
        break;
      case 6:
        Serial.println("HURTIG 6");
        break;
      case 7:
        Serial.println("HURTIG 7");
        break;
      case 8:
        Serial.println("HURTIG 8");
        break;
      case 9:
        Serial.println("HURTIG 9");
        break;
      case 10:
        Serial.println("HURTIG 10");
        break;

      }


      lastState = HURTIG;
    }


  if ( rpm <= 59 && lastState!=LANGSOM)
    if (rpm!=lastrpm)
    {
      lastrpm=rpm ;
      switch (PushCounter)
      {
      case 1 :
        Serial.println("LANGSOM 1");
        break;
      case 2 :
        Serial.println("LANGSOM 2");
        break;
      case 3:
        Serial.println("LANGSOM 3");
        break;
      case 4:
        Serial.println("LANGSOM 4");
        break;
      case 5:
        Serial.println("LANGSOM 5");
        break;
      case 6:
        Serial.println("LANGSOM 6");
        break;
      case 7:
        Serial.println("LANGSOM 7");
        break;
      case 8:
        Serial.println("LANGSOM 8");
        break;
      case 9:
        Serial.println("LANGSOM 9");
        break;
      case 10:
        Serial.println("LANGSOM 10");
        break;

      }

      lastState = LANGSOM;


    }
  timediff = millis()-timeold;
 
  if (timediff > 10000 && lastState!=PAU)
    if (timediff!=lasttimediff)
    {
      lasttimediff=timediff;
      switch (PushCounter)
      {
      case 1 :
        Serial.println("Du bruger jo ikke benene 1");
        break;
      case 2 :
        Serial.println("Du bruger jo ikke benene 2");
        break;
      case 3:
        Serial.println("Du bruger jo ikke benene 3");
        break;
      case 4:
        Serial.println("Du bruger jo ikke benene 4");
        break;
      case 5:
        Serial.println("Du bruger jo ikke benene 5");
        break;
      case 6:
        Serial.println("Du bruger jo ikke benene 6");
        break;
      case 7:
        Serial.println("Du bruger jo ikke benene 7");
        break;
      case 8:
        Serial.println("Du bruger jo ikke benene 8");
        break;
      case 9:
        Serial.println("Du bruger jo ikke benene 9");
        break;
      case 10:
        Serial.println("Du bruger jo ikke benene 10");
        break;

      }

      lastState = PAU;

    }

}
void rpm_fun()
{
  rpmcount++;

}





LYDFANGER
11  International / Scandinavia / Re: RPM måler del 2 on: January 16, 2013, 09:24:40 am
Hej

Quote
Din loop() skal bare notere millis() hver gang den ser flaget hejst (eller tælleren større end nul), og hvis flaget ikke er hejst (tællere står på 0) så skal den sammenlignene det gemte millis med det nuværende. Er forskellen større end xtusind millis så har noget stået stille. Du kan så sende din Serial.


Jeg går ud fra den notere millis() er "gemt" i timeold
Hvordan får jeg den sammenlignet med den nuværende millis()? Det er der mit hoved problem ligger (ud over jeg ikke er særlig logisk tænkende) smiley-lol.
Jeg har prøvet med
Code:
if (millis()-timeold > 5000)    
 {
Serial.println("tiden er udlobet"); }
....og en masse andre....


Code:
if (rpmcount==1)
    timeold=millis();
      
  else if (rpmcount >= 15) {
  
    rpm = 30000L/(millis() - timeold)*(rpmcount-1); //


    rpmcount = 0;
{
    Serial.println(rpm);
}
if (millis()-timeold > 5000)    
 {
Serial.println("tiden er udlobet"); }

LYDFANGER
12  International / Scandinavia / Re: RPM måler del 2 on: January 15, 2013, 01:45:00 pm
Hej igen

Så det du siger er :

Jeg kan godt bruge flere millis() på samme interupts? (mener at have læst at det ikke kunne lade sig gøre)

Vh
LYDFANGER
13  International / Scandinavia / LØST RPM måler del 2 on: January 15, 2013, 05:20:51 am
Hej

Her er en udløber af forrige topic (RPM måling).

Jeg vil have en funktion der sender Serial.println når tiden mellem 2 interupts overstiger x-sekunder.

Jeg er kommet frem til følgende sketch, hvor tiden millis() rigtig nok går i gang, men mit problem er at jeg ikke kan få et nyt interupt til at nulstille Millis(), funktionen skal nemlig ikke sende Serial.println hvis der kommer nyt interupt inderfor x-sekunder. Og så skal Serial.println kun sendes en gang, mens tiden er oversteget x-sekunder:
Code:
volatile int state = LOW;
int unsigned long starttid;
int unsigned long sluttid;
int unsigned long lastsluttid;
int laststate = 0;
int PAUSE = 0;
int lastmillis = 0;

void setup()
{
  Serial.begin(9600);

  digitalWrite(3, HIGH);
  attachInterrupt(1, autoslut, FALLING);
}

void loop()
{

  if (state==LOW)

    starttid = millis();

  {


    if (millis() > 5000)
     {
      Serial.println(millis());

      Serial.println("Tiden er udløbet");
      
    }

    
    starttid = 0;

  }
}
void autoslut()
{
  state = !state;
}






LYDFANGER
14  International / Scandinavia / Re: RPM måler on: January 14, 2013, 03:02:11 pm
Hej igen.

Nu mangler jeg bare en auto shut-off funktion i mit projekt. (barnet holder op med at træde i pedalerne)

Jeg har tænkt mig at bruge Interrupt 2, som er parallel forbundet med interupt 1 (samme sensor).

Funktionen skulle gerne gerne sende et Serial.println til GobeTwino, når der er gået feks. 10 sek. uden det næste interrupts er fundet sted.
Kan sketchen herunder overhovedet bruges, eller skal der tænkes helt andre veje.

promblemet, som jeg ser det er at jeg bruger millis(), fordi det næste interupt ikke kommer (pedalerne kører ikke længere rundt).
Er der en venlig sjæl der vil hjælpe, og denne gang, vil jeg være fræk og bede om noget, der er så tæt på færdigt som muligt, da min deadline er meget tæt på.

Code:
volatile int state = LOW;
int unsigned long starttid;
int unsigned long sluttid;
int unsigned long lastsluttid;
int laststate = 0;
int PAUSE = 0;


void setup()
{
  Serial.begin(9600);

  digitalWrite(3, HIGH);
  attachInterrupt(1, autoslut, FALLING);
}

void loop()
{
  if (state==LOW)

    starttid = millis();
  {
    sluttid = (millis()-starttid);

 
      {
       
        Serial.print("tiden er:");
          Serial.println(sluttid);
      }
   

  }}
void autoslut()
{
  state = !state;
}

LYDFANGER
15  International / Scandinavia / Re: RPM måler on: January 09, 2013, 03:26:09 pm
Hej igen

Håber juleølene bekom dig vel.

Problemmet er løst, dog var det en anden variable, der skulle "tæmmes".

Code:
if ( rpm >= 130 && lastState!=HURTIG)
    if (rpm!=lastrpm)
     { lastrpm=rpm ;

  switch (PushCounter)
Tusind tak.
LYDFANGER
Pages: [1] 2 3