Arduino kod, värre än nybörjare...!
-
- Inlägg: 23
- Blev medlem: 5 januari 2015, 22:32:13
Arduino kod, värre än nybörjare...!
Tjena!
Har en Arduino mega 2560 med breadboard, 2 RGB common anode lysdioder och 3 st 100 ohm inkopplade.
Hittade denna kod på internet, hade en annan förut med samma funktion utom att hela koden såg totalt annorlunda ut.
Problemet med första koden, och denna är att bara en av de två lysdioderna lyser. Första koden så "fade:ade" den ena medans den andra lös blått med kort delay.
Nu är den ena helt släckt.
Skulle vilja veta hur man lägger till flera portar (utgångar) i/under samma #define.
Så här ser koden ut:
#define GRN_PIN 5
#define GRN_PIN 8
#define RED_PIN 6
#define RED_PIN 9
#define BLU_PIN 7
#define BLU_PIN 10
byte RED, GREEN, BLUE;
byte RED_A = 0;
byte GREEN_A = 0;
byte BLUE_A = 0;
int led_delay = 0;
byte colour_count = 1; //Count the colours out
#define colour_count_max 7 //Set this to the max number of colours defined
#define colour_delay 4000 //Define the delay between changing colours in ms
#define time_at_colour 1000 //Time to stay on a colour in ms
//Some Time values
unsigned long TIME_LED = 0;
unsigned long TIME_COLOUR = 0;
//Define Colours here.
//Blue
#define C1_R 0
#define C1_G 0
#define C1_B 255
//Red
#define C2_R 255
#define C2_G 0
#define C2_B 0
//White
#define C3_R 255
#define C3_G 255
#define C3_B 255
//Orange
#define C4_R 255
#define C4_G 186
#define C4_B 0
//Light Blue
#define C5_R 0
#define C5_G 168
#define C5_B 255
//Purple
#define C6_R 255
#define C6_G 0
#define C6_B 255
//Yellow
#define C7_R 255
#define C7_G 250
#define C7_B 0
void setup()
{
//Assign initial values
RED = C1_R;
GREEN = C1_G;
BLUE = C1_B;
//Get the led_delay speed
led_delay = (colour_delay - time_at_colour) / 255;
analogWrite(GRN_PIN, 0);
analogWrite(RED_PIN, 0);
analogWrite(BLU_PIN, 0);
}
void loop()
{
//Rest of your program - Avoid using delay(); function!
if(millis() - TIME_LED >= led_delay){
TIME_LED = millis();
//Run the LED Function to check and adjust the values
LED();
}
if(millis() - TIME_COLOUR >= colour_delay){
TIME_COLOUR = millis();
//Run the Colour Change function
COLOUR();
}
}
void LED()
{
//Check Values and adjust "Active" Value
if(RED != RED_A){
if(RED_A > RED) RED_A = RED_A - 1;
if(RED_A < RED) RED_A++;
}
if(GREEN != GREEN_A){
if(GREEN_A > GREEN) GREEN_A = GREEN_A - 1;
if(GREEN_A < GREEN) GREEN_A++;
}
if(BLUE != BLUE_A){
if(BLUE_A > BLUE) BLUE_A = BLUE_A - 1;
if(BLUE_A < BLUE) BLUE_A++;
}
//Assign modified values to the pwm outputs for each colour led
analogWrite(RED_PIN, RED_A);
analogWrite(GRN_PIN, GREEN_A);
analogWrite(BLU_PIN, BLUE_A);
}
void COLOUR()
{
//Increment the colour by one or go back to 1 if maxed out
if(colour_count < colour_count_max) colour_count++;
else colour_count = 1;
if(colour_count == 1){
RED = C1_R;
GREEN = C1_G;
BLUE = C1_B;
} else if(colour_count == 2){
RED = C2_R;
GREEN = C2_G;
BLUE = C2_B;
} else if(colour_count == 3){
RED = C3_R;
GREEN = C3_G;
BLUE = C3_B;
} else if(colour_count == 4){
RED = C4_R;
GREEN = C4_G;
BLUE = C4_B;
} else if(colour_count == 5){
RED = C5_R;
GREEN = C5_G;
BLUE = C5_B;
} else if(colour_count == 6){
RED = C6_R;
GREEN = C6_G;
BLUE = C6_B;
} else if(colour_count == 7){
RED = C7_R;
GREEN = C7_G;
BLUE = C7_B;
}
}
Ändrade port nummer högst upp och lade dessutom till en av varje extra med en ny siffra. Det funkar inte. Har testat , +- && lite allt möjligt.
Hittade denna sida med de flesta variablerna http://arduino.cc/en/Reference/HomePage
Har en Arduino mega 2560 med breadboard, 2 RGB common anode lysdioder och 3 st 100 ohm inkopplade.
Hittade denna kod på internet, hade en annan förut med samma funktion utom att hela koden såg totalt annorlunda ut.
Problemet med första koden, och denna är att bara en av de två lysdioderna lyser. Första koden så "fade:ade" den ena medans den andra lös blått med kort delay.
Nu är den ena helt släckt.
Skulle vilja veta hur man lägger till flera portar (utgångar) i/under samma #define.
Så här ser koden ut:
#define GRN_PIN 5
#define GRN_PIN 8
#define RED_PIN 6
#define RED_PIN 9
#define BLU_PIN 7
#define BLU_PIN 10
byte RED, GREEN, BLUE;
byte RED_A = 0;
byte GREEN_A = 0;
byte BLUE_A = 0;
int led_delay = 0;
byte colour_count = 1; //Count the colours out
#define colour_count_max 7 //Set this to the max number of colours defined
#define colour_delay 4000 //Define the delay between changing colours in ms
#define time_at_colour 1000 //Time to stay on a colour in ms
//Some Time values
unsigned long TIME_LED = 0;
unsigned long TIME_COLOUR = 0;
//Define Colours here.
//Blue
#define C1_R 0
#define C1_G 0
#define C1_B 255
//Red
#define C2_R 255
#define C2_G 0
#define C2_B 0
//White
#define C3_R 255
#define C3_G 255
#define C3_B 255
//Orange
#define C4_R 255
#define C4_G 186
#define C4_B 0
//Light Blue
#define C5_R 0
#define C5_G 168
#define C5_B 255
//Purple
#define C6_R 255
#define C6_G 0
#define C6_B 255
//Yellow
#define C7_R 255
#define C7_G 250
#define C7_B 0
void setup()
{
//Assign initial values
RED = C1_R;
GREEN = C1_G;
BLUE = C1_B;
//Get the led_delay speed
led_delay = (colour_delay - time_at_colour) / 255;
analogWrite(GRN_PIN, 0);
analogWrite(RED_PIN, 0);
analogWrite(BLU_PIN, 0);
}
void loop()
{
//Rest of your program - Avoid using delay(); function!
if(millis() - TIME_LED >= led_delay){
TIME_LED = millis();
//Run the LED Function to check and adjust the values
LED();
}
if(millis() - TIME_COLOUR >= colour_delay){
TIME_COLOUR = millis();
//Run the Colour Change function
COLOUR();
}
}
void LED()
{
//Check Values and adjust "Active" Value
if(RED != RED_A){
if(RED_A > RED) RED_A = RED_A - 1;
if(RED_A < RED) RED_A++;
}
if(GREEN != GREEN_A){
if(GREEN_A > GREEN) GREEN_A = GREEN_A - 1;
if(GREEN_A < GREEN) GREEN_A++;
}
if(BLUE != BLUE_A){
if(BLUE_A > BLUE) BLUE_A = BLUE_A - 1;
if(BLUE_A < BLUE) BLUE_A++;
}
//Assign modified values to the pwm outputs for each colour led
analogWrite(RED_PIN, RED_A);
analogWrite(GRN_PIN, GREEN_A);
analogWrite(BLU_PIN, BLUE_A);
}
void COLOUR()
{
//Increment the colour by one or go back to 1 if maxed out
if(colour_count < colour_count_max) colour_count++;
else colour_count = 1;
if(colour_count == 1){
RED = C1_R;
GREEN = C1_G;
BLUE = C1_B;
} else if(colour_count == 2){
RED = C2_R;
GREEN = C2_G;
BLUE = C2_B;
} else if(colour_count == 3){
RED = C3_R;
GREEN = C3_G;
BLUE = C3_B;
} else if(colour_count == 4){
RED = C4_R;
GREEN = C4_G;
BLUE = C4_B;
} else if(colour_count == 5){
RED = C5_R;
GREEN = C5_G;
BLUE = C5_B;
} else if(colour_count == 6){
RED = C6_R;
GREEN = C6_G;
BLUE = C6_B;
} else if(colour_count == 7){
RED = C7_R;
GREEN = C7_G;
BLUE = C7_B;
}
}
Ändrade port nummer högst upp och lade dessutom till en av varje extra med en ny siffra. Det funkar inte. Har testat , +- && lite allt möjligt.
Hittade denna sida med de flesta variablerna http://arduino.cc/en/Reference/HomePage
Re: Arduino kod, värre än nybörjare...!
Använd alltid code-taggarna till kod!
Då blir det betydligt lättare att läsa...
Då blir det betydligt lättare att läsa...
Re: Arduino kod, värre än nybörjare...!
-> Skulle vilja veta hur man lägger till flera portar (utgångar) i/under samma #define.
-> Ändrade port nummer högst upp och lade dessutom till en av varje extra med en ny siffra.
Kan du förklara lite mer vad det är du vill uppnå? Kanske visa hur du skrev när det inte fungerade?
Hur har du lysdioderna kopplade med dina 100 ohm? Har du räknat på vilka strömmar det blir och om din Arduino klarar av att leverera det?
Mvh
Nisse
-> Ändrade port nummer högst upp och lade dessutom till en av varje extra med en ny siffra.
Kan du förklara lite mer vad det är du vill uppnå? Kanske visa hur du skrev när det inte fungerade?
Hur har du lysdioderna kopplade med dina 100 ohm? Har du räknat på vilka strömmar det blir och om din Arduino klarar av att leverera det?
Mvh
Nisse
-
- Inlägg: 23
- Blev medlem: 5 januari 2015, 22:32:13
Re: Arduino kod, värre än nybörjare...!
Tackar för kodtaggarna, visste ej att de fanns!
Så här såg koden ut från början fast det var typ 5 6 9 istället. Ändrade till mina utgångar, vilket är 5 6 7.
Det jag menar under samma #define är att istället för att skriva
Etc, så man skrivet
Samma funktion fast att man skickar ut den över fler utgångar samtidigt.
Har säkert simmat ut på alldeles för djupt vatten, kan knappt någonting om programmering, ej hittat någon bra tutorial för grunderna heller. Dock ser Arduino 10 ggr lättare ut än C++ som jag ibland kollar lite på
Använder för tillfället Arduinon genom usbporten. Mina RGB lysdioder är kopplade med anode pin till 5V på arduinon, R G B är kopplade över varsin 100 ohm resistor till respektive utgång. Räknat 5V - 3V = 2V. 2V / 0.020 mah = 100 ohm.
Så här såg koden ut från början fast det var typ 5 6 9 istället. Ändrade till mina utgångar, vilket är 5 6 7.
Kod: Markera allt
#define GRN_PIN 5
#define RED_PIN 6
#define BLU_PIN 7
byte RED, GREEN, BLUE;
byte RED_A = 0;
byte GREEN_A = 0;
byte BLUE_A = 0;
int led_delay = 0;
byte colour_count = 1; //Count the colours out
#define colour_count_max 7 //Set this to the max number of colours defined
#define colour_delay 4000 //Define the delay between changing colours in ms
#define time_at_colour 1000 //Time to stay on a colour in ms
//Some Time values
unsigned long TIME_LED = 0;
unsigned long TIME_COLOUR = 0;
//Define Colours here.
//Blue
#define C1_R 0
#define C1_G 0
#define C1_B 255
//Red
#define C2_R 255
#define C2_G 0
#define C2_B 0
//White
#define C3_R 255
#define C3_G 255
#define C3_B 255
//Orange
#define C4_R 255
#define C4_G 186
#define C4_B 0
//Light Blue
#define C5_R 0
#define C5_G 168
#define C5_B 255
//Purple
#define C6_R 255
#define C6_G 0
#define C6_B 255
//Yellow
#define C7_R 255
#define C7_G 250
#define C7_B 0
void setup()
{
//Assign initial values
RED = C1_R;
GREEN = C1_G;
BLUE = C1_B;
//Get the led_delay speed
led_delay = (colour_delay - time_at_colour) / 255;
analogWrite(GRN_PIN, 0);
analogWrite(RED_PIN, 0);
analogWrite(BLU_PIN, 0);
}
void loop()
{
//Rest of your program - Avoid using delay(); function!
if(millis() - TIME_LED >= led_delay){
TIME_LED = millis();
//Run the LED Function to check and adjust the values
LED();
}
if(millis() - TIME_COLOUR >= colour_delay){
TIME_COLOUR = millis();
//Run the Colour Change function
COLOUR();
}
}
void LED()
{
//Check Values and adjust "Active" Value
if(RED != RED_A){
if(RED_A > RED) RED_A = RED_A - 1;
if(RED_A < RED) RED_A++;
}
if(GREEN != GREEN_A){
if(GREEN_A > GREEN) GREEN_A = GREEN_A - 1;
if(GREEN_A < GREEN) GREEN_A++;
}
if(BLUE != BLUE_A){
if(BLUE_A > BLUE) BLUE_A = BLUE_A - 1;
if(BLUE_A < BLUE) BLUE_A++;
}
//Assign modified values to the pwm outputs for each colour led
analogWrite(RED_PIN, RED_A);
analogWrite(GRN_PIN, GREEN_A);
analogWrite(BLU_PIN, BLUE_A);
}
void COLOUR()
{
//Increment the colour by one or go back to 1 if maxed out
if(colour_count < colour_count_max) colour_count++;
else colour_count = 1;
if(colour_count == 1){
RED = C1_R;
GREEN = C1_G;
BLUE = C1_B;
} else if(colour_count == 2){
RED = C2_R;
GREEN = C2_G;
BLUE = C2_B;
} else if(colour_count == 3){
RED = C3_R;
GREEN = C3_G;
BLUE = C3_B;
} else if(colour_count == 4){
RED = C4_R;
GREEN = C4_G;
BLUE = C4_B;
} else if(colour_count == 5){
RED = C5_R;
GREEN = C5_G;
BLUE = C5_B;
} else if(colour_count == 6){
RED = C6_R;
GREEN = C6_G;
BLUE = C6_B;
} else if(colour_count == 7){
RED = C7_R;
GREEN = C7_G;
BLUE = C7_B;
}
}
Det jag menar under samma #define är att istället för att skriva
Kod: Markera allt
#define GRN_PIN 5
#definre GRN_PIN 6
Etc, så man skrivet
Kod: Markera allt
#define GRN_PIN 5, 6
Har säkert simmat ut på alldeles för djupt vatten, kan knappt någonting om programmering, ej hittat någon bra tutorial för grunderna heller. Dock ser Arduino 10 ggr lättare ut än C++ som jag ibland kollar lite på
Använder för tillfället Arduinon genom usbporten. Mina RGB lysdioder är kopplade med anode pin till 5V på arduinon, R G B är kopplade över varsin 100 ohm resistor till respektive utgång. Räknat 5V - 3V = 2V. 2V / 0.020 mah = 100 ohm.
Re: Arduino kod, värre än nybörjare...!
Röd och grön LED har en Vf på ~2V.
0,02mAh är en mycket låg ström i en timme, vad det har med saken att göra kan jag inte klura ut.
5V - 2V = 3V
3V @ 20mA = 150 Ohm.
Och din omdefiniering fungerar helt enkelt inte! En #define gör en textmässig ombyte innan själva kompileringen sker. Alltså måste du definiera alla utgångarna med unika namn och ändra programmet så att det skriver till dom alla.
0,02mAh är en mycket låg ström i en timme, vad det har med saken att göra kan jag inte klura ut.
5V - 2V = 3V
3V @ 20mA = 150 Ohm.
Och din omdefiniering fungerar helt enkelt inte! En #define gör en textmässig ombyte innan själva kompileringen sker. Alltså måste du definiera alla utgångarna med unika namn och ändra programmet så att det skriver till dom alla.
Re: Arduino kod, värre än nybörjare...!
> Så här såg koden ut från början...
Jag har ingen idé om själva problemet, men bara en sak
som kan underlätta, speciellt för den som ska läsa koden.
http://sv.wikipedia.org/wiki/Indentering
Jämför detta med din kod utan indentering:
Sen så är det väl samma sak som:
Jag har ingen idé om själva problemet, men bara en sak
som kan underlätta, speciellt för den som ska läsa koden.
http://sv.wikipedia.org/wiki/Indentering
Jämför detta med din kod utan indentering:
Kod: Markera allt
//Check Values and adjust "Active" Value
if(RED != RED_A){
if(RED_A > RED) RED_A = RED_A - 1;
if(RED_A < RED) RED_A++;
}
if(GREEN != GREEN_A){
if(GREEN_A > GREEN) GREEN_A = GREEN_A - 1;
if(GREEN_A < GREEN) GREEN_A++;
}
if(BLUE != BLUE_A){
if(BLUE_A > BLUE) BLUE_A = BLUE_A - 1;
if(BLUE_A < BLUE) BLUE_A++;
}
Kod: Markera allt
//Check Values and adjust "Active" Value
if(RED != RED_A){
if(RED_A > RED) RED_A--;
if(RED_A < RED) RED_A++;
}
if(GREEN != GREEN_A){
if(GREEN_A > GREEN) GREEN_A--;
if(GREEN_A < GREEN) GREEN_A++;
}
if(BLUE != BLUE_A){
if(BLUE_A > BLUE) BLUE_A--;
if(BLUE_A < BLUE) BLUE_A++;
}
-
- Inlägg: 23
- Blev medlem: 5 januari 2015, 22:32:13
Re: Arduino kod, värre än nybörjare...!
Ja mA ska det såklart va! Fel av mig, ursäkta.
Enligt tabellen jag fått av tillverkan så ligger röd på 2V, grön och blå 3 V. Så ja, jag bör ha en aning högre ohm för röd, får se till att fixa det.
Tror också jag förstår vad du menar med att deklarera var för sig. Finns det något att annat sätt man kan deklarera utgångarna på?
Enligt tabellen jag fått av tillverkan så ligger röd på 2V, grön och blå 3 V. Så ja, jag bör ha en aning högre ohm för röd, får se till att fixa det.
Tror också jag förstår vad du menar med att deklarera var för sig. Finns det något att annat sätt man kan deklarera utgångarna på?
Re: Arduino kod, värre än nybörjare...!
#define GRN_PIN 5, 6
Detta fungerar inte, det har du ju märkt själv.
#define GRN_PIN 5
#define GRN_PIN 6
Fungerar inte som du önskar eftersom du först talar om att GRN_PIN ska betyda 5 bara för att i nästa rad tala om att GRN_PIN inte alls ska betyda 5 utan 6 istället
http://arduino.cc/en/Reference/Define
Tyvärr kan inte kommandot AnalogWrite manipulera flera utgångar på samma gång.
http://arduino.cc/en/Reference/analogWrite
Hur många lysdioder tänker du driva med 20mA styck? Varje RGB-diod är ju tre dioder i en vilket ger 60 mA vid vitt ljus på full effekt. Hur mycket ström klarar din Arduino att leverera totalt?
Detta fungerar inte, det har du ju märkt själv.
#define GRN_PIN 5
#define GRN_PIN 6
Fungerar inte som du önskar eftersom du först talar om att GRN_PIN ska betyda 5 bara för att i nästa rad tala om att GRN_PIN inte alls ska betyda 5 utan 6 istället
http://arduino.cc/en/Reference/Define
Tyvärr kan inte kommandot AnalogWrite manipulera flera utgångar på samma gång.
http://arduino.cc/en/Reference/analogWrite
Hur många lysdioder tänker du driva med 20mA styck? Varje RGB-diod är ju tre dioder i en vilket ger 60 mA vid vitt ljus på full effekt. Hur mycket ström klarar din Arduino att leverera totalt?