Acties:
  • 0 Henk 'm!

  • Clementine
  • Registratie: Juli 2006
  • Laatst online: 07-08 19:39
Geachte medetweakers,

Voor school moet ik een arduino moodlight maken.

Ik heb de arduino duemilanove en een zelf gesoldeerd bordje met hierop een rgb led, potmeter en schakelaar.

Het is de bedoeling dat ik nu een moodlight hieruit maak door middel van een code.

Helaas ben ik niet echt de beste coder als het om dit soort codes gaat.

Wie heeft intresse om mij te helpen met de code zodat ik er wat van kan leren en een mooi moodlight van kan maken.

Groeten,

Remco

p.s. Ik heb al een hoop code gevonden via google maar deze zijn allemaal zonder potmeters en schakelaars.

Afbeeldingslocatie: http://i240.photobucket.com/albums/ff138/remcokatz/th_IMG_0121.pngAfbeeldingslocatie: http://i240.photobucket.com/albums/ff138/remcokatz/th_IMG_0120.pngAfbeeldingslocatie: http://i240.photobucket.com/albums/ff138/remcokatz/th_IMG_0122.pngAfbeeldingslocatie: http://i240.photobucket.com/albums/ff138/remcokatz/th_IMG_0123.png

[ Voor 67% gewijzigd door Clementine op 08-01-2010 20:36 ]

Macbook Pro 15" 


Acties:
  • 0 Henk 'm!

  • The Dolf
  • Registratie: November 2000
  • Niet online
DIY Ambilight howto?

Hier staat al wat info om je verder te helpen.

Gezocht!
Samsung 1TB HD103SI printplaat
Router
If everything seems to be going well, you have obviously overlooked something


Acties:
  • 0 Henk 'm!

  • Clementine
  • Registratie: Juli 2006
  • Laatst online: 07-08 19:39
The Dolf schreef op vrijdag 08 januari 2010 @ 20:20:
DIY Ambilight howto?

Hier staat al wat info om je verder te helpen.
Bedankt voor de tip :)

Uiteraard is dit niet genoeg om mijn project te kunnen beginnen en voltooien maar het is een mooi begin.

Macbook Pro 15" 


Acties:
  • 0 Henk 'm!

  • Rmg
  • Registratie: November 2003
  • Nu online

Rmg

ambilight en moodlight zijn wat anders :+

wat wil je precies met de schakelaar?

aangenomen dat je een ledje met common anode (correct me if im wrong :+) hebt heb je 4 pinnen waar je 1 op ground aan sluit en de rest op pwm ingangen

die stuur je dus aan met analogwrite ( http://arduino.cc/en/Reference/AnalogWrite )

potmeter lees je uit met analogread ( http://arduino.cc/en/Reference/AnalogRead )

potmeterwaardes ( 0 - 1024 ) naar waardes doe je met map http://arduino.cc/en/Reference/Map

en dan zou je met je schakelaar kunnen bijvoorbeeld kunnen gaan kiezen of je rood groen of blauw veranderd.

wat je ook kan doen hsb -> rgb waardes en dan kan je met potmeter door alle kleuren cyclen complete code en uitleg staat bijvoorbeeld hier http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1207331496

:)

Acties:
  • 0 Henk 'm!

  • Clementine
  • Registratie: Juli 2006
  • Laatst online: 07-08 19:39
Ik ben net onderweg naar de kroeg maar even snel dan:

- Je hebt het goed over de rgb led
- De potmeter wil ik graag als input hebben om te kunnen wisselen tussen kleuren (0-1023 dus: 0-255)
- De schakelaar wil ik graag als input hebben om de moodlight te laten switchen tussen het pulseren van de kleur en een vaste kleur die niet pulseert.

Dus Klik 0 <--Pulseren--> 5 volt & klik 5 Volt

Alvast bedankt voor de info. Ik ga er morgen meteen even mee aan de gang.

Mocht je mij verder kunnen helpen dan stel ik dat zeer op prijs :)

Macbook Pro 15" 


Acties:
  • 0 Henk 'm!

  • AFR
  • Registratie: Juni 2001
  • Niet online

AFR

Is het doel van deze opdracht niet juist dat je de arduino leert programmeren ipv bestaande code te combineren?

De mini tutorials op de arduino site lijken me hiervoor uitermate geschikt: http://arduino.cc/en/Tutorial/HomePage Alle onderdelen van je programma worden hier behandeld: analoge input via potmeter, digitale ingang via schakelaar en het faden van een ledje via AnalogWrite() cq PWM.

Om deze onderdelen van je programma te combineren adviseerde ik mijn studenten altijd om eerst een globale schets op papier te maken van het programma zodat je voor jezelf duidelijk krijgt wat de relatie tussen deze onderdelen is. Ook de tutorials over control structures en functies - die je strikt gezien niet nodig hebt - kunnen je helpen om hier meer inzicht in te krijgen.

Acties:
  • 0 Henk 'm!

  • Clementine
  • Registratie: Juli 2006
  • Laatst online: 07-08 19:39
AFR schreef op vrijdag 08 januari 2010 @ 21:22:
Is het doel van deze opdracht niet juist dat je de arduino leert programmeren ipv bestaande code te combineren?

De mini tutorials op de arduino site lijken me hiervoor uitermate geschikt: http://arduino.cc/en/Tutorial/HomePage Alle onderdelen van je programma worden hier behandeld: analoge input via potmeter, digitale ingang via schakelaar en het faden van een ledje via AnalogWrite() cq PWM.

Om deze onderdelen van je programma te combineren adviseerde ik mijn studenten altijd om eerst een globale schets op papier te maken van het programma zodat je voor jezelf duidelijk krijgt wat de relatie tussen deze onderdelen is. Ook de tutorials over control structures en functies - die je strikt gezien niet nodig hebt - kunnen je helpen om hier meer inzicht in te krijgen.
Het is zeker de bedoeling dat ik leer hoe het programmeren werkt. Het ging mij er meer om dat ik wat assistentie krijg om te begrijpen hoe de volgorde moet en wat voor onderdelen (code) ik moet gebruiken om het werkende te krijgen.

Raz- had een mooie tip en daar ben ik nu mee bezig :)

Macbook Pro 15" 


Acties:
  • 0 Henk 'm!

  • _ferry_
  • Registratie: Januari 2002
  • Niet online

_ferry_

Moderator Tweaking

Nipple Tweaker

Uiteraard is het geen probleem om te ondersteunen met het vinden van bruikbare info en how-to's. Maaarrrrr... We zijn geen foum waar je (huiswerk)opdrachten kunt plaatsen die we voor je oplossen. Het is tenslotte de bedoeling dat je zelf de moodlight gaat maken.
Houd dit even in het achterhoofd.

Acties:
  • 0 Henk 'm!

  • Clementine
  • Registratie: Juli 2006
  • Laatst online: 07-08 19:39
Ik ben nu bezig met het aanpassen en modificeren van het script dat ik op arduino.cc vond.

Ik wil nu graag oranje toevoegen aan de reeks (en later ook nog geel & paars)

Dit is wat ik nu heb:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
//i/o pin declarations
int rpin = 9;
int gpin = 10;
int bpin = 11;

//function prototypes
void solid(int r, int g, int b, int t);
void fade(int r1, int g1, int b1, int r2, int g2, int b2, int t);

void setup()            
{
//empty
}

void loop()           
{
  //colour sequence instructions
  
  //Example sequence one: Rainbow fade over 15 seconds:
  fade(255,0,0,0,255,0,2000); //fade from red to green over 5 seconds
  fade(0,255,0,0,0,255,2000); //fade from green to blue over 5 seconds
  fade(0,0,255,255,144,0,2000); //fade from blue to orange over 5 seconds
  fade(255,144,0,255,0,0); //fade from orange to red over 5 seconds
}

//function holds RGB values for time t milliseconds
void solid(int r, int g, int b, int o, int t)
{

  //output
  analogWrite(rpin,r);
  analogWrite(gpin,g);
  analogWrite(bpin,b);
  
  //hold at this colour set for t ms
  delay(t);

}

//function fades between two RGB values over fade time period t
//maximum value of fade time = 30 seconds before gradient values
//get too small for floating point math to work? replace floats
//with doubles to remedy this?
void fade(int r1, int g1, int b1, int o1, int r2, int g2, int b2, int o2, int t)
{

  float r_float1, g_float1, b_float1, o_float1;
  float r_float2, g_float2, b_float2, o_float2;
  float grad_r, grad_g, grad_b;
  float output_r, output_g, output_b;
  
  //declare integer RGB values as float values
  r_float1 = (float) r1;
  g_float1 = (float) g1;
  b_float1 = (float) b1;
  
  0_float1 = (float) o1;
  
  r_float2 = (float) r2;
  g_float2 = (float) g2;
  b_float2 = (float) b2;
  
  0_float2 = (float) o2;

  
  //calculate rates of change of R, G, and B values
  grad_r = (r_float2-r_float1)/t;
  grad_g = (g_float2-g_float1)/t;
  grad_b = (b_float2-b_float1)/t;
  
  //loop round, incrementing time value "i"
  for ( float i=0; i<=t; i++ )
  {
    
    output_r = r_float1 + grad_r*i;
    output_g = g_float1 + grad_g*i;
    output_b = b_float1 + grad_b*i;
    
    //output
    analogWrite(rpin, (int)output_r);
    analogWrite(gpin, (int)output_g);
    analogWrite(bpin, (int)output_b);
    
    //hold at this colour set for 1ms
    delay(1);
    
  }
}


Dit werkt dus niet. Ik heb zelf het volgende toegevoegd:

- fade(0,0,255,255,144,0,2000); //fade from blue to orange over 5 seconds
- fade(255,144,0,255,0,0); //fade from orange to red over 5 seconds
- int o1
- int o2
- 0_float1 = (float) o1;
- 0_float2 = (float) o2;

Weet iemand waarom dit niet werkt?

Ik ga ondertussen even aan de gang met die potmeter, dat gaat wat meer moeite kosten.

Edit: @ ferry: ik ben daar uiteraard van op de hoogte en ik wil hier iets van gaan leren. Daarom ben ik ook zelf met de code bezig en probeer ik met wat hulp zelf te begrijpen hoe ik dit moet gaan maken :)

[ Voor 4% gewijzigd door Clementine op 09-01-2010 15:49 ]

Macbook Pro 15" 


Acties:
  • 0 Henk 'm!

  • AFR
  • Registratie: Juni 2001
  • Niet online

AFR

Catz schreef op zaterdag 09 januari 2010 @ 15:47:
Weet iemand waarom dit niet werkt?
Heb je al gekeken naar de foutmeldingen die de compiler geeft?
Je krijgt ongetwijfeld een waarschuwing dat je functie prototype niet klopt met de functie zelf (daar zit immers een extra argument met variabele o in).

Verder lijkt er ook niets met variabele o te gebeuren: je declareert deze in de functie, typecast deze naar float.... maar dan volgt er nergens een berekening of output. Waarom wil je eigenlijk een speciale variabele voor oranje maken? Oranje is toch een combinatie van veel rood met een beetje groen en kan derhalve toch met de bestaande fade functie worden gegenereerd?

Detail: het gebruik van extra floatingpoints en typecasts is volgens mij niet nodig in de functie fade. Met integers en een verstandige deling verkrijg je hetzelfde resultaat en kost minder registers en tijd.

Acties:
  • 0 Henk 'm!

  • Clementine
  • Registratie: Juli 2006
  • Laatst online: 07-08 19:39
AFR schreef op zaterdag 09 januari 2010 @ 16:46:
[...]


Heb je al gekeken naar de foutmeldingen die de compiler geeft?
Je krijgt ongetwijfeld een waarschuwing dat je functie prototype niet klopt met de functie zelf (daar zit immers een extra argument met variabele o in).

Verder lijkt er ook niets met variabele o te gebeuren: je declareert deze in de functie, typecast deze naar float.... maar dan volgt er nergens een berekening of output. Waarom wil je eigenlijk een speciale variabele voor oranje maken? Oranje is toch een combinatie van veel rood met een beetje groen en kan derhalve toch met de bestaande fade functie worden gegenereerd?

Detail: het gebruik van extra floatingpoints en typecasts is volgens mij niet nodig in de functie fade. Met integers en een verstandige deling verkrijg je hetzelfde resultaat en kost minder registers en tijd.
Dat laatste is inderdaad een betere optie. Ik zal het eens onder de loep nemen.

Macbook Pro 15" 


Acties:
  • 0 Henk 'm!

Verwijderd

Ik ben nu ongeveer met hetzelfde bezig en heb een heel mooi stukje code gevonden dat jij vast ook kan gebruiken:

Let OP! dit is een zware spoiler en hiermee is waarschijnlijk de hele opdracht klaar. Toch denk ik dat dit stukje code heel duidelijk en leerzaam is probeer het dan ook voor jezelf te snappen.
Voor meer info de website van de maker: http://genericnerd.blogsp...ood-light-controller.html
Arduino: moodlight.pde
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
 
/*
RGB LED controller
4 modes: off, color select, color pulse and random cycle/pulse
By Markus Ulfberg 2009-05-19

Thanks to: Ladyada, Tom Igoe and
everyone at the Arduino forum for excellent
tutorials and everyday help.

*/

// set the ledPins
int ledRed = 10;
int ledGreen = 9;
int ledBlue = 11;

// color selector pin
int potPin = 1;

// lightMode selector
int switchPin = 2;

// light mode variable
// initial value 0 = off
int lightMode = 0;

// LED Power variables
byte redPwr = 0;
byte greenPwr = 0;
byte bluePwr = 0;

// Variables for lightMode 2
// variables for keeping pulse color
byte redPulse;
byte greenPulse;
byte bluePulse;

// Set pulse to down initially
byte pulse = 0;

// floating variables needed to be able to pulse a fixed color
float redFloat;
float greenFloat;
float blueFloat;

// the amount R,G & B should step up/down to display an fixed color
float redKoff;
float greenKoff;
float blueKoff;

// Variables for lightMode 3
// set the initial random colors
byte redNew = random(255);
byte greenNew = random(255);
byte blueNew = random(255);

// misc interface variables
// potVal keeps the value of the potentiometer
int potVal;
// value from the button (debounce)
int switchVal;
int switchVal2;
// buttonState registers if the button has changed
int buttonState;

void setup()
{
pinMode(ledRed, OUTPUT);
pinMode(ledGreen, OUTPUT);
pinMode(ledBlue, OUTPUT);

pinMode(potPin, INPUT);

pinMode(switchPin, INPUT);
buttonState = digitalRead(switchPin);

// serial for debugging purposes only
Serial.begin(9600);
}

void loop()
{
switchVal = digitalRead(switchPin);      // read input value and store it in val
delay(10);                         // 10 milliseconds is a good amount of time
switchVal2 = digitalRead(switchPin);     // read the input again to check for bounces
if (switchVal == switchVal2) {                 // make sure we got 2 consistant readings!
if (switchVal != buttonState) {          // the button state has changed!
if (switchVal == LOW) {                // check if the button is pressed
 if (lightMode == 0) {          // light is off
     lightMode = 1;             // light is on and responds to pot
 } else {
   if (lightMode == 1) {
       lightMode = 2;           // light pulsates in the latest color from pot
 } else {
   if (lightMode == 2) {
       lightMode = 3;           // light changes randomly
   } else {
     lightMode = 0;             // light is off 
     }
    }
   }
 }
}
buttonState = switchVal;                 // save the new state in our variable
}
if (lightMode == 0) {      // turn light off
analogWrite(ledRed, 0);
analogWrite(ledGreen, 0);
analogWrite(ledBlue, 0);
}
if (lightMode == 1) {        // set fixed color

// read the potentiometer position
potVal = analogRead(potPin);


// RED > ORANGE > YELLOW
if (potVal > 0 && potVal < 170) {
redPwr = 255;
bluePwr = 0;
analogWrite(ledRed, redPwr);
greenPwr = map(potVal, 0, 170, 0, 255);
analogWrite(ledGreen, greenPwr);
analogWrite(ledBlue, bluePwr);
}

// YELLOW > LIME?? > GREEN
if (potVal > 170 && potVal < 341) {
greenPwr = 255;
bluePwr = 0;
analogWrite(ledGreen, greenPwr);
redPwr = map(potVal, 341, 170, 0, 255);
analogWrite(ledRed, redPwr);
analogWrite(ledBlue, bluePwr);
}

// GREEN > TURQOUISE
if (potVal > 341 && potVal < 511) {
greenPwr = 255;
redPwr = 0;
analogWrite(ledGreen, greenPwr);
bluePwr = map(potVal, 341, 511, 0, 255);
analogWrite(ledBlue, bluePwr);
analogWrite(ledRed, redPwr);
}

// TURQOUISE > BLUE
if (potVal > 511 && potVal < 682) {
bluePwr = 255;
redPwr = 0;
analogWrite(ledBlue, bluePwr);
greenPwr = map(potVal, 682, 511, 0, 255);
analogWrite(ledGreen, greenPwr);
analogWrite(ledRed, redPwr);
}

// BLUE > PURPLE
if (potVal > 682 && potVal < 852) {
bluePwr = 255;
greenPwr = 0;
analogWrite(ledBlue, bluePwr);
redPwr = map(potVal, 682, 852, 0, 255);
analogWrite(ledRed, redPwr);
analogWrite(ledGreen, greenPwr);
}

// PURPLE > RED
if (potVal > 852 && potVal < 1023) {
redPwr = 255;
greenPwr = 0;
analogWrite(ledRed, redPwr);
bluePwr = map(potVal, 1023, 852, 0, 255);
analogWrite(ledBlue, bluePwr);
analogWrite(ledGreen, greenPwr);
}
redFloat = float(redPwr);
greenFloat = float(greenPwr);
blueFloat = float(bluePwr);

redKoff = redFloat / 255;
greenKoff = greenFloat / 255;
blueKoff = blueFloat / 255;

redPulse = redPwr;
greenPulse = greenPwr;
bluePulse = bluePwr;

/*
// Debug
Serial.print("redFLoat: ");
Serial.print(redFloat, DEC);
Serial.print(" redPwr: ");
Serial.print(redPwr, DEC);
Serial.print(" greenFloat: ");
Serial.print(greenFloat, DEC);
Serial.print(" greenPwr: ");
Serial.print(greenPwr, DEC);
Serial.print(" blueFloat: ");
Serial.print(blueFloat, DEC);
Serial.print(" bluePwr: ");
Serial.println(bluePwr, DEC);
// End debug
*/

}

if (lightMode == 2) {     // pulse fixed color

// display the colors
analogWrite(ledRed, redFloat);
analogWrite(ledGreen, greenFloat);
analogWrite(ledBlue, blueFloat);

// add delay here for speed control
delay(5);

// pulse down
if (pulse == 0) {
if (redFloat > 10) {
 redFloat = redFloat - redKoff;
}
if (greenFloat > 10) {
 greenFloat = greenFloat - greenKoff;
}
if (blueFloat > 10) {
 blueFloat = blueFloat - blueKoff;
}

// If all xFloat match 10 get pulse up
if (byte(redFloat) <= 10) {
if (byte(greenFloat) <= 10) {
if (byte(blueFloat) <= 10) {
pulse = 1;
}
}
}
}
// Pulse up
if (pulse == 1) {
if (redFloat < redPulse) {
redFloat = redFloat + redKoff;
}
if (greenFloat < greenPulse) {
greenFloat = greenFloat + greenKoff;
}
if (blueFloat < bluePulse) {
blueFloat = blueFloat + blueKoff;
}
// If all Pwr match Pulse get pulse down

if (byte(redFloat) == redPulse) {
if (byte(greenFloat) == greenPulse) {
if (byte(blueFloat) == bluePulse) {
pulse = 0;
}
}
}
}
/*
// Debug
Serial.print("redFloat: ");
Serial.print(redFloat, DEC);
Serial.print(" redPulse: ");
Serial.print(redPulse, DEC);
Serial.print(" greenFloat: ");
Serial.print(greenFloat, DEC);
Serial.print(" greenPulse: ");
Serial.print(greenPulse, DEC);
Serial.print(" blueFloat: ");
Serial.print(blueFloat, DEC);
Serial.print(" bluePulse: ");
Serial.print(bluePulse, DEC);
Serial.print(" pulse: ");
Serial.println(pulse, DEC);
// End debug
*/
}

if (lightMode == 3) {  // randomsize colorNew and step colorPwr to it
if (redPwr > redNew) {
redPwr--;
}
if (redPwr < redNew) {
redPwr++;
}
if (greenPwr > greenNew) {
greenPwr--;
}
if (greenPwr < greenNew) {
greenPwr++;
}
if (bluePwr > blueNew) {
bluePwr--;
}
if (bluePwr < blueNew) {
bluePwr++;
}

// If all Pwr match New get new colors

if (redPwr == redNew) {
if (greenPwr == greenNew) {
if (bluePwr == blueNew) {
redNew = random(254);
greenNew = random(254);
blueNew = random(254);
}
}
}

// display the colors
analogWrite(ledRed, redPwr);
analogWrite(ledGreen, greenPwr);
analogWrite(ledBlue, bluePwr);
delay(20);
}
}


Je moet hier en daar nog wel even aanpassen aan jouw config maar dit zou alles moeten doen wat jij wilt + nog wat extra.

Acties:
  • 0 Henk 'm!

  • AFR
  • Registratie: Juni 2001
  • Niet online

AFR

Verwijderd schreef op zondag 10 januari 2010 @ 01:02:
... Toch denk ik dat dit stukje code heel duidelijk en leerzaam is probeer het dan ook voor jezelf te snappen.
Het is natuurlijk prachtig dat iemand een stukje werkende code heeft gemaakt voor een moodlight met allerlei leuke opties, maar programmeertechnisch lijkt me dit een voorbeeld van hoe je juist niet moet programmeren. Het is duidelijk een script waaraan iemand is begonnen met programmeren zonder vooraf na te denken hoe het programma er uit moet komen te zien. De code is rommelig en onoverzichtelijk. Enkele voorbeelden:
  • Vreemde opslitsing van de code tussen regel 117-180: je slaat 2 voor dat deel van de code vaste waarden op in een variabele en berekent de derde. Daarna stuur je voor elke stap de 3 waarden naar buiten. Het lijkt me netter om in de if-blokken alleen de waarden te berekenen en pas na alle if-blokken alles naar buiten te sturen. Of stuur alles direct naar buiten en maak gebruik van het feit dat je vaste waarden hebt.
  • Extreem veel if-blokken die laten zien dat je de control structures van de taal nog niet beheerst: sommige blokken kunnen gewoon in een else-blok van de vorige if worden geplaatst, andere blokken kun je efficienter uitvoeren in een switch-blok, en in regel 89-100 kun je volstaan met 1 increment en overflow controle aan het einde (ligthmode++; if (lightmode>3) lightmode=0).
  • Diverse acties worden op diverse plaatsen herhaald. Dit is typisch iets waarvoor je een functie kunt definieren.
  • Er lijken diverse overbodige variabelen te zijn.
  • Etc Etc
Nogmaals: waardering voor degene die dit systeem ontwikkeld heeft! Alleen zou ik me juist wanneer ik leer programmeren niet laten verleiden om dit soort "minder mooie" code als voorbeeld te gebruiken. Tenzij.... je op zoek gaat naar de overige slordigheden, zelf een schets maakt van hoe het programma netter kan en dit ook zelf programmeert.

[ Voor 1% gewijzigd door AFR op 10-01-2010 13:54 . Reden: typo ]


Acties:
  • 0 Henk 'm!

  • Clementine
  • Registratie: Juli 2006
  • Laatst online: 07-08 19:39
Ik heb nu de volgende code waar ik eigenlijk wat aanpassingen wil doen maar ik krijg het niet voor elkaar. Iemand die voor mij de laatste aanpassingen kan doen?

Voor de knop:

1 klik: aan
2 klik: vaste kleur
3 klik: pulseren
4 klik: uit

Voor de potmeter:

De kleur kunnen instellen tijdens (2 klik & 3 klik).

De code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
const byte dim_curve[] = {
    0,   1,   1,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   3,   3,   3,
    3,   3,   3,   3,   3,   3,   3,   4,   4,   4,   4,   4,   4,   4,   4,   4,
    4,   4,   4,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   6,   6,   6,
    6,   6,   6,   6,   6,   7,   7,   7,   7,   7,   7,   7,   8,   8,   8,   8,
    8,   8,   9,   9,   9,   9,   9,   9,   10,  10,  10,  10,  10,  11,  11,  11,
    11,  11,  12,  12,  12,  12,  12,  13,  13,  13,  13,  14,  14,  14,  14,  15,
    15,  15,  16,  16,  16,  16,  17,  17,  17,  18,  18,  18,  19,  19,  19,  20,
    20,  20,  21,  21,  22,  22,  22,  23,  23,  24,  24,  25,  25,  25,  26,  26,
    27,  27,  28,  28,  29,  29,  30,  30,  31,  32,  32,  33,  33,  34,  35,  35,
    36,  36,  37,  38,  38,  39,  40,  40,  41,  42,  43,  43,  44,  45,  46,  47,
    48,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,
    63,  64,  65,  66,  68,  69,  70,  71,  73,  74,  75,  76,  78,  79,  81,  82,
    83,  85,  86,  88,  90,  91,  93,  94,  96,  98,  99,  101, 103, 105, 107, 109,
    110, 112, 114, 116, 118, 121, 123, 125, 127, 129, 132, 134, 136, 139, 141, 144,
    146, 149, 151, 154, 157, 159, 162, 165, 168, 171, 174, 177, 180, 183, 186, 190,
    193, 196, 200, 203, 207, 211, 214, 218, 222, 226, 230, 234, 238, 242, 248, 255,
};

  const int buttonPin = 8;

const int sensorPin = 0;  // pin the potmeter is attached too
const int ledPinR   = 9;  // pwm pin with red led
const int ledPinG   = 10; // pwm pin with green led
const int ledPinB   = 11; // pwm pin with blue led

 int buttonPushCounter = 1; // Hoe vaak je de knop in moet
 int buttonState = 0;       // current state of the button
 int lastButtonState = 0;   // previous state of the button

int sensorVal = 0; // store the value coming from the sensor
int fadeVal   = 0; // value that changes between 0-255
int fadeSpeed = 4; // 'speed' of fading

// getRGB function stores RGB values in this array
// use these values for the red, blue, green led. 
int rgb_colors[3]; 

int hue;
int saturation;
int brightness;

void setup() { 
  pinMode(buttonPin, INPUT);
  
  pinMode(ledPinR, OUTPUT);
  pinMode(ledPinG, OUTPUT);
  pinMode(ledPinB, OUTPUT);
}

void loop()  { 

  sensorVal = analogRead(sensorPin);
  buttonState = digitalRead(buttonPin);
  
  
  
  if (buttonState != lastButtonState) {
    
     if (buttonState == HIGH) {
      
    buttonPushCounter++;
       
    if(buttonPushCounter>1) 
    { buttonPushCounter=0;
       }
       
       Serial.println("on");
       Serial.print("number of button pushes:");
       Serial.println(buttonPushCounter, DEC);
     } 
     
     else
  
     lastButtonState = buttonState;
     
     //BRIGHTNESS
  if(buttonState==1) brightness = map(sensorVal, 0, 1023, 128, 255);
  else               brightness = 0;
     
  

  // fade from 0 - 255 and back with a certain speed   
  fadeVal = fadeVal + fadeSpeed;         // change fadeVal by speed
  fadeVal = constrain(fadeVal, 0, 255);  // keep fadeVal between 0 and 255

  if(fadeVal==255 || fadeVal==0)         // change from up>down or down-up (negative/positive)
  { fadeSpeed = -fadeSpeed;  
  }  

  // set HSB values
  hue        = map(sensorVal,0, 1023,0, 359);     // hue is a number between 0 and 360
  saturation = 255;                               // saturation is a number between 0 - 255
  brightness = fadeVal;                           // value is a number between 0 - 255

  getRGB(hue,saturation,brightness,rgb_colors);   // converts HSB to RGB

  analogWrite(ledPinR, rgb_colors[0]);            // red value in index 0 of rgb_colors array
  analogWrite(ledPinG, rgb_colors[1]);            // green value in index 1 of rgb_colors array
  analogWrite(ledPinB, rgb_colors[2]);            // blue value in index 2 of rgb_colors array

  delay(20); // delay to slow down fading
}}

void getRGB(int hue, int sat, int val, int colors[3]) { 
  /* convert hue, saturation and brightness ( HSB/HSV ) to RGB
     The dim_curve is used only on brightness/value and on saturation (inverted).
     This looks the most natural.      
  */

  val = dim_curve[val];
  sat = 255-dim_curve[255-sat];

  int r;
  int g;
  int b;
  int base;

  if (sat == 0) { // Acromatic color (gray). Hue doesn't mind.
    colors[0]=val;
    colors[1]=val;
    colors[2]=val;  
  } else  { 

    base = ((255 - sat) * val)>>8;

    switch(hue/60) {
        case 0:
                r = val;
                g = (((val-base)*hue)/60)+base;
                b = base;
        break;

        case 1:
                r = (((val-base)*(60-(hue%60)))/60)+base;
                g = val;
                b = base;
        break;

        case 2:
                r = base;
                g = val;
                b = (((val-base)*(hue%60))/60)+base;
        break;

        case 3:
                r = base;
                g = (((val-base)*(60-(hue%60)))/60)+base;
                b = val;
        break;

        case 4:
                r = (((val-base)*(hue%60))/60)+base;
                g = base;
                b = val;
        break;

        case 5:
                r = val;
                g = base;
                b = (((val-base)*(60-(hue%60)))/60)+base;
        break;
    }

    colors[0]=r;
    colors[1]=g;
    colors[2]=b; 
  }   
}

Macbook Pro 15" 


Acties:
  • 0 Henk 'm!

  • AFR
  • Registratie: Juni 2001
  • Niet online

AFR

Ik ga niet direct de oplossing geven maar kijk eens naar het volgende:
  • Welke mogelijke waarden kan buttonPushCounter aannemen?
  • In regel 83-85 lijk je in te zien dat voor het genereren van de 4 verschillende modi alleen de brightness moet aanpassen. Je zou dit via een switch statement voor de 4 modi kunnen doen. Eventueel voeg je direct een extra delay toe voor het knipperen.
  • ... Echter voordat de variabele brightness wordt gebruikt wordt deze in regel 94 alweer overschreven!
  • Wat is het verschil tussen modus 1 en modus 2? Indien het betekent dat de kleur niet wordt aangepast kun je natuurlijk alle functies die de kleur aanpassen in je code negeren op dat moment.
PS. Tip die ik al eerder gaf: maak eens een flowschema van je programma. Een grafische weergave maakt vaak inzichtelijk wat er gebeurt in de diverse blokken code en geeft je hints over hoe je het switchen tussen modi kunt implementeren.

Acties:
  • 0 Henk 'm!

  • Clementine
  • Registratie: Juli 2006
  • Laatst online: 07-08 19:39
AFR schreef op maandag 18 januari 2010 @ 12:59:
Ik ga niet direct de oplossing geven maar kijk eens naar het volgende:
  • Welke mogelijke waarden kan buttonPushCounter aannemen?
  • In regel 83-85 lijk je in te zien dat voor het genereren van de 4 verschillende modi alleen de brightness moet aanpassen. Je zou dit via een switch statement voor de 4 modi kunnen doen. Eventueel voeg je direct een extra delay toe voor het knipperen.
  • ... Echter voordat de variabele brightness wordt gebruikt wordt deze in regel 94 alweer overschreven!
  • Wat is het verschil tussen modus 1 en modus 2? Indien het betekent dat de kleur niet wordt aangepast kun je natuurlijk alle functies die de kleur aanpassen in je code negeren op dat moment.
PS. Tip die ik al eerder gaf: maak eens een flowschema van je programma. Een grafische weergave maakt vaak inzichtelijk wat er gebeurt in de diverse blokken code en geeft je hints over hoe je het switchen tussen modi kunt implementeren.
Ik zou willen dat ik zoveel tijd had. Ondertussen moet ik morgen het script inleveren en ik ben geen stap verder behalve alle opties die ik wil los en niet in 1 code die samenwerken.

Ik zou het echt op prijs stellen als je de code voor mij zou kunnen aanpassen want door tijdsdruk heb ik gewoon geen tijd om dit op tijd te leren.

Met vriendelijke groet,

Catz

Macbook Pro 15" 


Acties:
  • 0 Henk 'm!

  • pieturp
  • Registratie: April 2004
  • Laatst online: 27-08 14:18

pieturp

gaffa!

Misschien iets vaker de reacties op je post bekijken?
Uiteindelijk moet je 't toch echt allemaal zelf doen... :/

[ Voor 2% gewijzigd door pieturp op 20-01-2010 01:16 . Reden: overbodige letters: weg d'r mee! ]

... en etcetera en zo


Acties:
  • 0 Henk 'm!

  • BosGnoom
  • Registratie: Februari 2002
  • Laatst online: 11:09
Zelf ben ik net met een Arduino aan het werken. Om wat te oefenen met de Arduino lijkt mij deze opdracht erg geschikt. Waarom probeer je allemaal bestaande code aan te passen, zodat het voor jou opdracht werkt? Zelf iets maken geeft een veel grotere kick!

Gisteren heb ik op wikipedia even hue opgezocht, met die grafiek is het niet moeilijk om van een hue naar rgb toe te gaan.

Sensor uitlezen, vertalen naar 0...360 graden:

code:
1
hue=map(analogRead(sensorPin), 0, 1023, 0, 360);


En dan per "vakje" van 60 graden de r, g en b waarden uitrekenen. Omdat je toch geen gebruikt maakt van verzadiging en helderheid, hoef je daar niet mee te rekenen. Een simpele benadering van 0...255 voor iedere kleur is genoeg.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
a=hue/60;
  
  switch(a)
  {
    case 0: 
      // 0-59
      r=255;
      g=(255*hue/60);
      b=0;
      break;
      
    case 1:
      // 60-119
      r=(255*(1-((hue-60)/60)));
      g=255;
      b=0;
      break;

    case....


Was nog geen uur werk... Even op een kladblok tekenen wat de bedoeling is, en dan pas aan het typen gaan. Zoals AFR zegt: bij programmeren is een flowchart een goede tool!

Acties:
  • 0 Henk 'm!

  • AFR
  • Registratie: Juni 2001
  • Niet online

AFR

Catz schreef op woensdag 20 januari 2010 @ 00:23:
[...]
Ik zou het echt op prijs stellen als je de code voor mij zou kunnen aanpassen want door tijdsdruk heb ik gewoon geen tijd om dit op tijd te leren.
Ik zou dit erg graag doen, maar helaas staat de docent in mij dit niet toe omdat je dan uiteindelijk weinig leert. Het klinkt hard, maar persoonlijk vind ik het niet erg wanneer een schoolopdracht niet gehaald wordt. Dan komt men later maar terug voor extra uitleg/herkansing, leert men beter plannen, of kunnen cursus en begeleiding worden aangepast als we zien dat dit nodig is.
Pagina: 1