Arduino + NO brytare + LEDs?

Planering och tankar kring eventuella framtida projekt.
jolerius
Inlägg: 30
Blev medlem: 22 juli 2012, 22:12:17

Re: Arduino + NO brytare + LEDs?

Inlägg av jolerius »

Kod: Markera allt

const int door = 2;     // strömbrytaren
const int led =  5;      // LEDpin att använda


int buttonState = 0;         // variabler för att läsa dörrens status

void setup() {
  // talar om att led är en utgång:
  pinMode(led, OUTPUT);      
  // talar om att door är en ingång:
  pinMode(door, INPUT);     
}

void loop(){
  // read the state of the pushbutton value:
  buttonState = digitalRead(door);

  // kollar om dörren är stängd.
  // om den är det så behålls LED släckt, eller släcks:
  if (buttonState == HIGH) {     
    // Släck LED:    
    digitalWrite(led, LOW);  
  }
  //Kollar om dörren är öppen..
  //om den är det så tänds LED.
  else{     
    // Tänd LED:    
    digitalWrite(led, HIGH);  
  }
}
  

Såhär ser det ut just nu, med bara en LED. Men jag fattar verkligen inte hur jag ska få den att fadeout efter 30 sekunder om den är tänd. Det enda som händer just nu är att lampan slocknar om jag trycker på strömbrytarn. Och det är ju en bit på vägen iaf
Användarvisningsbild
Klas-Kenny
Inlägg: 11841
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Arduino + NO brytare + LEDs?

Inlägg av Klas-Kenny »

Kod: Markera allt

const int door = 2;     // strömbrytaren
const int led =  5;      // LEDpin att använda


int buttonState = 0;         // variabler för att läsa dörrens status
word i;

void setup() {
  // talar om att led är en utgång:
  pinMode(led, OUTPUT);      
  // talar om att door är en ingång:
  pinMode(door, INPUT);     
}
void loop(){
  // kollar om dörren är öppen.
  if(digitalRead(door) == LOW) {
    // Tänd LED:    
    digitalWrite(led, HIGH);
    i = 0;
    while(digitalRead(door) == LOW) { 
      i++;
      delay(10);
      if(i > 30000) {
        break;
      }
     } 
    // Släck LED:    
    digitalWrite(led, LOW);  
}
Någonting sådant kanske...
Ger ingen fade-effekt, men det är en början.

Edit: Åter igen, aldrig programmerat Arduino, kan vara något som felar.
jolerius
Inlägg: 30
Blev medlem: 22 juli 2012, 22:12:17

Re: Arduino + NO brytare + LEDs?

Inlägg av jolerius »

Det funkar inte. Programmet fattar inte vad du menar med "i"?? Och det gör inte jag heller. Arduino ska skrivas i C+, men det kanske var det du gjorde?

Någon annan som kan hjälpa till med koden så att det funkar?
Bola
Inlägg: 133
Blev medlem: 16 november 2009, 10:28:41
Ort: Göteborg

Re: Arduino + NO brytare + LEDs?

Inlägg av Bola »

Vad får du för felmeddelande då?
Användarvisningsbild
Bosen
Inlägg: 1753
Blev medlem: 18 juli 2005, 10:56:31
Ort: Karl Gustav, Varberg
Kontakt:

Re: Arduino + NO brytare + LEDs?

Inlägg av Bosen »

För att skapa fade-effekt så använder an PWM, och det finns det en inbyggd exempelprogram på i arduinos ide, jag tror den heter fade.
Det är PWM (analogWrite) som du ska läsa på om nu...
jolerius
Inlägg: 30
Blev medlem: 22 juli 2012, 22:12:17

Re: Arduino + NO brytare + LEDs?

Inlägg av jolerius »

Bola skrev:Vad får du för felmeddelande då?
hade missat

Kod: Markera allt

word i;
men vad betyder just den raden?

När jag testkör så tänder den bara lampan, den slocknar aldrig??:S
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Arduino + NO brytare + LEDs?

Inlägg av jesse »

>Arduino ska skrivas i C+

Jag har hört talas om C, C++ och C#, men aldrig C+
Brukar man inte programmera Arduino i C? (frågetecknet hör till frågan, inte till C-et.. :roll: )
hade missat

Kod: Markera allt

word i;
men vad betyder just den raden?
eh... jag tror du får kolla nån tutorial eller bok om C-programmering.... Vet du inte vad word i; betyder kommer du att få det svårt. OBS! Detta är enbart vänligt menat:

Läs här:
http://www.iu.hio.no/~mark/CTutorial/CTutorial.html
C Tutorial

eller låna/köp boken "Vägen till C" av Ulf Bilting.
men vad betyder just den raden?
OK.

word är en variabeltyp i C som betyder att det är ett 16-bitars signerat heltal, som kan anta värden mellan -32768 och 32767.
Det kan användas istället för int. int är ett heltal, men du vet inte säkert hur många bitar det är. Men word är garanterat alltid 16 bitar.
Om du vill kunna räkna till 60000 istället för 30000 kan du använda typen unsigned word. Då kan du räkna från 0 till 65535.

word i; betyder att du skapar en sådan variabel med namnet i. Sedan kan du använda den variabeln i programmet, t.ex. här:

Kod: Markera allt

      i++;
      delay(10);
      if(i > 30000) {
        break;
här räknar i upp från 0 till 30000. Att den ska börja på 0 är inte självklart. Det måste också skrivas. Det står i programmet ovanför while-loopen:i = 0;

Man kan även tilldela värdet direkt när variabeln deklareras:
word i = 0;

Personligen föredrar jag for-sats om en räknare används... Denna kod gör exakt samma sak som while-satsen ovan:

Kod: Markera allt

for (i=0; i< < 30000; i++) {
    if (digitalRead(door) != LOW) break;
    delay(10);
 } 
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Arduino + NO brytare + LEDs?

Inlägg av sodjan »

> OK.
>
> word är en variabeltyp i C som betyder att det är ett 16-bitars signerat heltal, som kan
> anta värden mellan -32768 och 32767...

http://arduino.cc/en/Reference/Word
word
Description
A word stores a 16-bit unsigned number, from 0 to 65535. Same as an unsigned int.
> Brukar man inte programmera Arduino i C?

Från http://arduino.cc/en/Main/FAQ :
...the Arduino language is merely a set of C/C++ functions that can be called from your code.
Your sketch undergoes minor changes (e.g. automatic generation of function prototypes) and
then is passed directly to a C/C++ compiler (avr-g++). All standard C and C++ constructs
supported by avr-g++ should work in Arduino.
Användarvisningsbild
Krille Krokodil
Inlägg: 4062
Blev medlem: 9 december 2005, 22:33:11
Ort: Helsingborg

Re: Arduino + NO brytare + LEDs?

Inlägg av Krille Krokodil »

Detta skall nog funka (om jag har tänkt rätt)...

Kod: Markera allt

byte ButtonState, ButtonRead = 0, LEDPower = 0;
unsigned int DelayBeforeFade; 

void setup(){
	
	pinMode(LEDPin, OUTPUT); //Skall sitta på en av PWM-utgångarna
	pinMode(ButtonPin, INPUT_PULLUP);
}


void loop(){

	ButtonState = !digitalRead(ButtonPin); //För NO med intern pullup på

	if(ButtonState){

		//Om knapp intryckt sätt delay en gång

		if(!ButtonRead) DelayBeforeFade = 3000; 
		ButtonRead = 1;

	} else { 
		
		//Om knapp ej intryckt återgå till grundtillståndet 
		ButtonRead = 0;
		DelayBeforeFade = 0;
		LEDPower = 0;
	
	}

 
	if(DelayBeforeFade > 0){
		//Knapp intryckt och vi befinner oss fortfarande i delay-läge 
		DelayBeforeFade--;
		LEDPower = 255;

	} else if (ButtonState) { 
		//Knapp intryckt och vi befinner oss nu i fade-läge 
		if(LEDPower > 0) LEDPower--;
	
	} 

	
	analogWrite(LEDPin, LEDPower);	

	delay(10);			
} 
Användarvisningsbild
Wedge
Inlägg: 1026
Blev medlem: 8 juli 2012, 17:33:33

Re: Arduino + NO brytare + LEDs?

Inlägg av Wedge »

Datatypen "word" finns inte i språket C, men förekommer ändå ibland och det är då en kompilatorspecifik utökning av språket, eller preprocessormagi.
I Arduino är det implementerat med "typedef unsigned int word;", i filen Arduino.h
jolerius
Inlägg: 30
Blev medlem: 22 juli 2012, 22:12:17

Re: Arduino + NO brytare + LEDs?

Inlägg av jolerius »

ja nu funkar det. Men jag fattar inte vrf.
Jag är väldigt ny på det här med programmering, men jag lyckas inte tyda nånstans att den faktiskt fadar?
Fast det gör den. Hur gör jag om jag vill att faden ska ta längre tid?

En annan fråga. Kan man gruppera ex digital5 och digital6 till ett enda namn "leds". Och sen styra allting med ett kommando till båda eller måste man ha ett namn per utgång (led1, led2)??
Användarvisningsbild
Krille Krokodil
Inlägg: 4062
Blev medlem: 9 december 2005, 22:33:11
Ort: Helsingborg

Re: Arduino + NO brytare + LEDs?

Inlägg av Krille Krokodil »

Det är bara att bita i det sura äpplet och försöka sätta sig in i vad koden gör :) det är så man lär sig programmera. Ta det steg för steg och fundera på vad variablerna håller för värde och vilka vägar som if-satserna tar vid olika tillstånd i loopen.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Arduino + NO brytare + LEDs?

Inlägg av sodjan »

> Men jag fattar inte vrf.

Vad f-n är "vfr" ???
Förrutom att det är en forummedlem...
Borre
Inlägg: 4609
Blev medlem: 14 juni 2007, 15:43:50
Ort: Hälsingland

Re: Arduino + NO brytare + LEDs?

Inlägg av Borre »

vrf... Förkortning av varför (onödig förkortning? Absolut).
Senast redigerad av Borre 14 augusti 2012, 13:21:59, redigerad totalt 1 gång.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Arduino + NO brytare + LEDs?

Inlägg av jesse »

sodjan skrev:> OK.
>
> word är en variabeltyp i C som betyder att det är ett 16-bitars signerat heltal, som kan
> anta värden mellan -32768 och 32767...

http://arduino.cc/en/Reference/Word
word
Description
A word stores a 16-bit unsigned number, from 0 to 65535. Same as an unsigned int.
Hmmm,, jag är ganska bra på att gissa i alla fall :jimmyhacker: :wall: :wall: :wall:
Skriv svar