Go Down

Topic: 2 RGB-led på et breadboard kontroleret af arduino uno (Read 6121 times) previous topic - next topic

navi_snuller

Jan 25, 2016, 05:57 pm Last Edit: Jan 28, 2016, 05:07 pm by navi_snuller
LØST LØST LØST
Dav i gruppen

Jeg er helt ny i dette univers.
Jeg har lavet et board der har 2 RGB-led på, men det virker ikke. Når jeg kører en CTRL-R fortælle det mig at det er ok. Jeg kan også uplode det, men igen ingen ting sker.

Her er min kode.
Vedhæftet er mit board.

Kan nogen hjælpe en lille begynder. :)

Hi
Ivan

Code: [Select]
int bluePin3 = 2;  // B petal on RGB LED module connected to digital pin 2
/**************************************************************************/      
void setup()
{
         pinMode(redPin, OUTPUT); // sets the redPin to be an output
         pinMode(greenPin, OUTPUT); // sets the greenPin to be an output
         pinMode(bluePin, OUTPUT); // sets the bluePin to be an output
         pinMode(redPin, OUTPUT); // sets the redPin to be an output
         pinMode(greenPin, OUTPUT); // sets the greenPin to be an output
         pinMode(bluePin, OUTPUT); // sets the bluePin to be an output
}    
/***************************************************************************/      
void loop()  // run over and over again  
{    
          // Basic colors:  
          color(255, 0, 0); // turn the RGB LED red
          delay(1000); // delay for 1 second  
          color(0,255, 255); // turn the RGB LED green  
          delay(1000); // delay for 1 second  
          color(0, 0, 255); // turn the RGB LED blue  
          delay(1000); // delay for 1 second
          // Example blended colors:  
          color(255,0,0); // turn the RGB LED red  
          delay(1000); // delay for 1 second  
          color(237,109,0); // turn the RGB LED orange  
          delay(1000); // delay for 1 second  
          color(255,215,0); // turn the RGB LED yellow  
          delay(1000); // delay for 1 second  
          color(34,139,34); // turn the RGB LED green  
          delay(1000); // delay for 1 second
          color(0,0,255); // turn the RGB LED blue  
          delay(1000); // delay for 1 second
          color(0,46,90); // turn the RGB LED  indigo
          delay(1000); // delay for 1 second
          color(128,0,128); // turn the RGB LED purple  
          delay(1000); // delay for 1 second
}    
/******************************************************/    
void color (unsigned char red, unsigned char green, unsigned char blue)     // the color generating function  
{    
          analogWrite(redPin, red);  
          analogWrite(bluePin, blue);
          analogWrite(greenPin, green);
}
/******************************************************/

 



RuneJ

Hej Ivan

For det første skal du lige huske, at Uno har PWM (analog output) på pin 3, 5, 6, 9, 10 og 11. Det OK med din første LED (pin 11, 10 og 9), men du skal huske det, til når du går i gang med den anden LED.

Hvad er det for en slags RGB-LED, du har? Er det fælles anode eller fælles katode? Og hvordan har du forbundet den til din arduino? Kan du eventuelt prøve at tegne et diagram/skitse?

Mvh.
Rune

navi_snuller

Hej Rune

Har du kikket på min vedhæftede fil, der er et billede at hvordan jeg har sat det op.

RGB led er noget der hedder "common anode"

Ang. evt. skitse så der mit board på ved vedhæftede fil på  mit første indlæg. ;)

Hi
Ivan

RuneJ

Den vedhæftede fil er dit Arduino-program (RGB_LED_01.ino), og ikke et elektrisk diagram. Men prøv at se på den her side:

http://johnny-five.io/examples/led-rgb-anode/

Dér er der vist en helt grundlæggende forbindelse af en common anode RGB LED. Det er godt nok nogle andre pins, end du bruger, men princippet er det samme.

En vigtig ting at huske med common anode LED er, at den virker "omvendt" af en almindelig LED eller en common cathode RGB LED. Det vil sige, at den tænder dioden når output er LOW, og slukker når output er HIGH. Den kode, du har angivet, er tydeligvis skrevet med common cathode i tankerne.

Så i dit tilfælde vil color(255, 255, 255); slukke LED'en, mens f.eks. color(0, 255, 255); vil få den til at lyse rød. Hvis du i stedet foretrækker at styre farven med 0 for slukket og 255 for tændt, så kan du bare ændre color() til:

Code: [Select]
void color (unsigned char red, unsigned char green, unsigned char blue)     // the color generating function 
{   
  analogWrite(255 - redPin, red);   
  analogWrite(255 - bluePin, blue);
  analogWrite(255 - greenPin, green);
}

navi_snuller

Hej Rune

Nu har jeg sat de tre andre ledninger til 6,5 og 3 alle er, som du siger, er det PWM. Det virker som jeg vill have det til.
El. diagram, er det, det der hedder "Schematic"
Som sagt det virker, jeg ved bare ikke hvorfor. De tre første sidder også i PWM. Da begge set pin er sat på PWM hvordan kan det være at andet set pin(6,5,3) skal have "analogWrite"

Jeg kan ikke lige se hvorfor??

Hvad nu hvis jeg vil have flere RGB'er på, hvordan klarer jeg det.

Hi
Ivan

RuneJ

El. diagram, er det, det der hedder "Schematic"
Ja, lige præcis. Altså en tegning over komponenterne og hvordan de er forbundet.

Som sagt det virker, jeg ved bare ikke hvorfor.
"If it ain't broke, don't fix it!" :-)

De tre første sidder også i PWM. Da begge set pin er sat på PWM hvordan kan det være at andet set pin(6,5,3) skal have "analogWrite"

Jeg kan ikke lige se hvorfor??
Jeg er ikke sikker på, at jeg forstår hvad du spørger om. Du kan i princippet styre LED'en både med digitalWrite og analogWrite, men hvis du vil have finkontrol over farverne, så skal du bruge analogWrite på PWM-porte.

Hvad nu hvis jeg vil have flere RGB'er på, hvordan klarer jeg det.
Ja, så er du nødt til at bygge eller købe en port-udvidelse til din arduino. Der er mange forskellige løsninger.

En let løsning er at bruge Adafruit's 16-kanals servo-drivere (kopiprodukter kan købes i Kina på ebay for ca. 25 kr/stk). Det er små moduler med 16 PWM-porte. De forbindes til din Arduino med to ledninger til det der hedder I2C (eller TWI). Du kan kæde helt op til 62 moduler sammen, så du kan styre mere end 300 RGB-LED'er, hvis du skulle få lyst til det.

Hvis du er mere eventyrlysten er der chips som f.eks. TLC5940 (seriel styring) fra Texas Instruments eller MAX7313 (I2C) fra Maxim Integrated. Det kræver bare lidt mere arbejde.

Jeg har selv brugt MCP23017 port expanders til RGB-LED'er i et lille projekt, men de understøtter ikke PWM - kun digital output (dvs. HIGH eller LOW). Det giver dog mulighed for at vælge mellem slukket, rød, grøn, blå, tyrkis, gul og hvid.

RuneJ

Afhængigt af hvor mange flere RGB-LED'er du vil have, så kan du også overveje at "opgradere" til en Arduino Mega, som har 14 PWM-porte. En kopi-Mega kan man købe på ebay for ca. 50 kr.

navi_snuller

Dav igen

Jeg har forsøgt at tegne et diagram over mit lille projekt, det lykkes ikke rigtigt. Findes der et program til at lave den slags tegninger i??

Hi
Ivan

RuneJ

Jeg bruger ofte et program, der hedder Fritzing (http://fritzing.org/home/). Det kan både lave diagrammer, breadboard/fumlebræt-tegninger og simple print/PCB-layouts, men uden at det bliver så avanceret som de mere professionelle CAD-programmer. Fritzing er ret oplagt til arduino-projekter, hvilket også afspejles af de indbyggede komponentbiblioteker. Programmet kræver lige lidt tilvænning, men når man har lært det at kende, er det faktisk ret godt.

Hvis det bare er til små kredsløb, så er håndtegninger dog ofte det hurtigste.

A propos portudvidelser, så vedhæfter jeg lige som eksempel et diagram (schematic), jeg har lavet i fritzing af en 4 x 16-ports udvidelse til en arduino.

navi_snuller

Hej

Det er også det program jeg bruger, men når jeg vil lave en Schematic tegning så bliver det Breadboard der kommer på billed og det ser ikke så godt ud.
Hvordan for du Scheamatic ud som billed.

jeg gør det at jeg "File/Export/As Image/JPG" så er det at der kun kommer et billede af Breadboard? :smiley-evil:

RuneJ

Når du arbejder med et projekt i fritzing, så kan du oppe i toppen vælge mellem Breadboard, Schematic og PCB. Det er i princippet 3 forskellige måder at lave det samme, afhængigt af, hvad man vil have. Personligt bruger jeg kun Schematic. Hvis jeg vil gemme et diagram som et billede, vælger jeg File > Export > As Image > PNG.

navi_snuller

Dav igen igen

Jeg har arbejdet lidt med Schematic.

Håber at det er, bare lidt, rigtigt.

Hi Ivan

RuneJ

Det er i hvert fald et hæderligt første forsøg ;-)

Når du sætter en RGB-LED ind i fritzing, vil den som udgangspunkt være "common cathode". Dette skal du rette ved at markere LED'en og så rette "polarity" til "common anode" ovre i Inspector-vinduet til højre.

Jeg har vedhæftet et ændringsforslag.

navi_snuller

Dav

Det er da altid noget at du syntes at det er et hæderligt forsøg.  :D

nu der er kommet noget der hedder "color is not declared"

Hvad er nu det for noget, der står jo "color" i en oprindelige code ??


exit status 1
'color' was not declared in this scope

  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.

RuneJ

Det kan være en manglende tuborg-parantes eller semikolon eller lignende. Prøv at gå dit arduino-program efter en gang til. Hvis du ikke kan finde fejlen, kan du vedhæfte den her.

Go Up