Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  8 1416
Hei !
Har sittet noen uker nå å lært meg litt programmering av Arduino. Artige saker.
Så skulle jeg begynne på mitt første prosjekt. Prosjektet går ut på at jeg vil at en knapp jeg ikke bruker på fjernkontrollen skal starte min hjemmelagde pc. For å få til dette må jeg fange opp IR signalet fra fjernkontrollen og deretter lage en OUTPUT som går HØY og LAv med et delay på ca 500ms. Dette vil da aktivere et rele som blir startknappen på PC. Dette tenkte jeg var enkelt siden jeg hadde greid og slå på et lys me IR før.

Problemet er at jeg får ikke til et program som gjør at det slår av og på et relay med et trykk på en knapp. Har greid og fanget opp IR signalet, og fått det til og slå på en led. Men får ikke til og få av led lyset igjen før jeg trykker på knappen en gang til eller en annen knapp, og det skal den ikke gjøre.

Simple: Et trykk på fjernkontrollen gjør at en utgang går HØY deretter DELAY 500ms også LAV igjen.

Håper noen kan hjelpe meg med dette. Hør prøvd i flere dager, og nå er det bare frustrasjon som kommer når jeg prøver. Er sikkert en enkel ting jeg ikke har forstått enda.

PS: Er blanding av flere program i programmet mitt. Er sikkert ting som er HELT unødvendig å ha med...

Takk
Mvh Peder
Sist endret av pederw; 27. august 2015 kl. 19:31.
Cheez Doodles
Osteper's Avatar
Kan du ikke fjerne alt under "switch(results.value)" og bruke en if statement?

F.eks noe sånt:

if(results.value == "HEX verdien"){
digitalWrite(4, HIGH);
delay(2000);
digitalWrite(4, LOW);
}
Jeg laget en styring til en pumpe som mottar signal fra IR. Kanskje du kan prøve den?

Kode

#include <IRremote.h>

int IR_Recv = 10;   //IR Receiver Pin 10
int Pump = 12;  //Pump pin 12


IRrecv irrecv(IR_Recv);
decode_results results;


void setup(){
  Serial.begin(9600);  //starts serial communication
  irrecv.enableIRIn(); // Starts the receiver
  pinMode(Pump, OUTPUT); // sets the digital pin as output
}

void loop() {
  if (irrecv.decode(&results)) {
   
    long int decCode = results.value;
    Serial.println(decCode);
    switch (results.value) {
      case 16724175:
        Serial.println("Filling 0.33l");
        digitalWrite(Pump, HIGH); // Starts pump for 2 seconds and stops
	delay(2000);
        Serial.println("Stopping...");
        digitalWrite(Pump, LOW);
        Serial.println("Ready for input");
        break;
      
      case 16718055:
        Serial.println("Filling 0.5l");
        digitalWrite(Pump, HIGH);   // Starts pump for 5 seconds and stops
        delay(5000);
        Serial.println("Stopping...");
        digitalWrite(Pump, LOW);
        Serial.println("Ready for input");
		break;
      
       case 16743045:
        Serial.println("Free flowing");
        digitalWrite(Pump, HIGH);   // Starts pump permanently
        break;
      
       case 16716015:
        Serial.println("Stop");
        digitalWrite(Pump, LOW);   // Stops pump
        break; 
      
	   default:
        Serial.println("Ready for input");
    }

    irrecv.resume(); // Receive the next value
  }
}
hoyhoy
Trådstarter
Osteper:
Prøvde det først også, men det fungerte heller ikke

Bronsky:
Ditt program fungerte fint ! Tusen takk !

Men hvorfor fungerte ikke mitt ? Er vel satt opp på samme vis ?
Sitat av pederw Vis innlegg
Osteper:
Prøvde det først også, men det fungerte heller ikke

Bronsky:
Ditt program fungerte fint ! Tusen takk !

Men hvorfor fungerte ikke mitt ? Er vel satt opp på samme vis ?
Vis hele sitatet...
Cluet ligger vel i den siste linjen med kode:

Kode

irrecv.resume(); // Receive the next value
Denne ber IR-motakkeren om å gå tilbake til "mottaksmodus".
Cheez Doodles
Osteper's Avatar
Sitat av bronsky Vis innlegg
Cluet ligger vel i den siste linjen med kode:

Kode

irrecv.resume(); // Receive the next value
Denne ber IR-motakkeren om å gå tilbake til "mottaksmodus".
Vis hele sitatet...
Ja du sier noe der, overså den jeg også. Helt til den koden der blir kjørt vil samme verdien ligge i "results.value".
hoyhoy
Trådstarter
Okei. Ser jeg også har med; irrecv.resume(); . Men det er før jeg setter utgangen høy og lav. Er det det som er problemet her altså ? Den skulle ha vært etter ?
Sitat av pederw Vis innlegg
Okei. Ser jeg også har med; irrecv.resume(); . Men det er før jeg setter utgangen høy og lav. Er det det som er problemet her altså ? Den skulle ha vært etter ?
Vis hele sitatet...
Ja, du forteller releet å kjøre HØY, men du sier ikke hva det skal gjøre etter det.
Om du ikke sletter resultatet i variablen vil følgende skje:

- Du trykker på knappen, signalet blir mottatt, koden leser at det er riktig knapp.
- Releet skrus på, det ventes 2 sekunder, releet skrus av.
- Loopen starter på nytt, men siden du ikke har slettet verdien i results vil "case"-statementet fortsatt være true.
- Releet skrus deretter på igjen, på en brøkdel av et mikrosekund etter det skrudde seg av. Releet skjønte ikke en gang hva som skjedde.
Sist endret av wanna-b; 31. august 2015 kl. 17:22.