Ovdje pročitajte kako se registrirati na forum.

rgb led, 3 push button, 2 potenciometra - POMOĆ!!!

Zapeli ste s projektom? Ovdje je pravo mjesto za postaviti pitanje. Imajte na umu da ekipa e-radionice neće uvijek i/ili redovno odgovarati na pitanja postavljena u ovom podforumu.
Odgovorite
dubravko.kegalj#8701
Novak
Novak
Postovi: 2
Pridružen/a: čet stu 22, 2018 3:09 am

rgb led, 3 push button, 2 potenciometra - POMOĆ!!!

Post Postao/la dubravko.kegalj#8701 » sri tra 03, 2019 2:51 am

Pozdrav svima!
Bio bi jako zahvalan na pomoci ukoliko netko ima rijesenje!
Spojio sam rgb ledicu koju trebam kontrolirati sa tri prekidaca i dva potenciometra..
Svaki prekidac pali odredjenu boju s time da na 1. i 2. boji mogu podesavati jacinu na 1. potenciometar, a
3. boja da se podešava na 2. potenciometar.
Negdje sam nešto promašio u programu jer mi se na 3. boji moze podesavati jacina ukoliko prekidac ostavim pritisnut..

Novi sam u programiranju pa molim za razumijevanje :)
Hvala!

Kod: Označite sve

int pot_pin1 = A0;
int pot_pin2 = A1;

int output;
int led_value1;
int led_value2;
const int GreenLED = 9;
const int BlueLED  = 10;
const int RedLED   = 11;
const int Led1 = 2;
const int Led2 = 8;
const int Led3 = 4;
// define Buttons code
const int GreenButton = 5;
const int BlueButton  = 6;
const int RedButton   = 7;
int pressed = 0;


void setup() {

     
// initialize the digital pin as an output.
  pinMode(GreenLED,OUTPUT);
  pinMode(BlueLED ,OUTPUT);
  pinMode(RedLED  ,OUTPUT); 
  pinMode(Led1, OUTPUT); 
  pinMode(Led2, OUTPUT);
  pinMode(Led3, OUTPUT);
//input pins
  pinMode(RedButton,INPUT_PULLUP);  
  pinMode(BlueButton,INPUT_PULLUP); 
  pinMode(GreenButton,INPUT_PULLUP);   
}
    
void loop() {
//Reading from potentiometer
  output = analogRead(pot_pin1);
   led_value1 = map(output, 0, 1023, 0, 255);
  output = analogRead(pot_pin2);
  led_value2 = map(output, 0, 1023, 0, 255);
//Mapping the Values between 0 to 255 because we can give output
//from 0 -255 using the analogwrite funtion
 
 
 
  
  delay(1);

  boolean GreenIs = digitalRead(GreenButton);
  boolean BlueIs  = digitalRead(BlueButton);
  boolean RedIs   = digitalRead(RedButton); 
  delay(50);
  if (pressed != 0){
    analogWrite(pressed, led_value2); 
    analogWrite(pressed, led_value1);
   
     
    
  }
  
  if(GreenIs==false)
  {
    pressed = GreenLED;
    analogWrite(GreenLED, led_value1);   // turn the LED on (HIGH is the voltage level) 
    digitalWrite(Led1, 0); 
   digitalWrite(Led2, 1); 
   digitalWrite(Led3, 0); 
    analogWrite(BlueLED , 0);    // turn the LED off by making the voltage LOW 
    analogWrite(RedLED  , 0);    // turn the LED off by making the voltage LOW    
  }  
  if(BlueIs==false)
  {
    pressed = BlueLED;
    analogWrite(BlueLED  , led_value1);   // turn the LED on (HIGH is the voltage level)   
    digitalWrite(Led1, 1);  
    digitalWrite(Led2, 0);
    digitalWrite(Led3, 0);
    analogWrite(GreenLED , 0);    // turn the LED off by making the voltage LOW 
    analogWrite(RedLED   , 0);    // turn the LED off by making the voltage LOW    
    }  
  if(RedIs==false)
  {
    pressed = RedLED;
    analogWrite(RedLED   , led_value2);   // turn the LED on (HIGH is the voltage level)   
    digitalWrite(Led1, 0); 
    digitalWrite(Led2, 0); 
    digitalWrite(Led3, 1); 
    analogWrite(GreenLED , 0);    // turn the LED off by making the voltage LOW 
    analogWrite(BlueLED  , 0);    // turn the LED off by making the voltage LOW    
    
  }    
  
}
domagoj#9358
Ozbiljni hardveraš
Ozbiljni hardveraš
Postovi: 88
Pridružen/a: ned tra 15, 2018 2:59 pm
Lokacija: Zagreb

Re: rgb led, 3 push button, 2 potenciometra - POMOĆ!!!

Post Postao/la domagoj#9358 » sri tra 03, 2019 9:26 am

Dubravko pozdrav!
Prvo jedno pitanje koje proizlazi iz komentara da se 3. boja može podešavati samo ako je prekidač stisnut. Znači li to da je zamišljeno da se boja može podešavati i ako prekidač nije stisnut? Bilo bi dobro da vidimo shemu spajanja.
Primjetio sam slijedeće: varijablu pressed kod inicijalizacije postavljaš na 0, a kasnije ispituješ je li različita od 0. Kasnije, kako se koji if izvrši dodjeljuješ joj određenu vrijednost, ali nigdje nema da pressed može poprimiti vrijednost 0. Je li to ok? Jer ako više nikad neće biti 0, uvijek će se izvršavati if(presed!=0). Ne znam kakva je logika programa, ali kad se jednom namjesti analogna vrijednost ne treba je u loop-u ponavljati. Dovoljno joj je promijeniti vrijednsot tek kad treba.
Primjetio sam još nešto, dio programa:

Kod: Označite sve

if (pressed != 0){
 analogWrite(pressed, led_value2); 
 analogWrite(pressed, led_value1);
}

i dijelovi:
if(GreenIs==false)
 {
 pressed = GreenLED;
 analogWrite(GreenLED, led_value1); // turn the LED on (HIGH is the voltage level) 
...
if(BlueIs==false)
 {
 pressed = BlueLED;
 analogWrite(BlueLED , led_value1); // turn the LED on (HIGH is the voltage level) 
...
if(RedIs==false)
 {
 pressed = RedLED;
 analogWrite(RedLED , led_value2); // turn the LED on (HIGH is the voltage level) 
...
Ne rade li oni jednu te istu stvar? Na dva mjesta u programu se postavlja ista analogna vrijednost. To možda nije uzrok problema ali zbunjuje.
Pozdrav, Domagoj
Avatar
david.zovko#5631
e-radionica.com team
e-radionica.com team
Postovi: 261
Pridružen/a: ned tra 15, 2018 2:59 pm
Lokacija: Osijek, Croatia
Kontakt:

Re: rgb led, 3 push button, 2 potenciometra - POMOĆ!!!

Post Postao/la david.zovko#5631 » sri tra 03, 2019 10:29 pm

Dečki, molim Vas samo koristite code tag na forumu kako bi kod izgledao bolje. Ja sam sada editirao vaše postove.

Inače je Domagoj dao dobar komentar pa čekamo OP-a da javi dokle je stigao s riješavanjem problema :)
dubravko.kegalj#8701
Novak
Novak
Postovi: 2
Pridružen/a: čet stu 22, 2018 3:09 am

Re: rgb led, 3 push button, 2 potenciometra - POMOĆ!!!

Post Postao/la dubravko.kegalj#8701 » čet tra 04, 2019 3:14 am

Hvala na odgovoru :)
Pošto sam tek krenuo sa programiranjem neznam još samostalno napisati program pa sam iz primjera na internetu spajao više programa u jedan.
Vjerojatno se tu desilo da se analogna vrijednost ponavlja.. :?
Budem sutra snimio kratki video pa cu staviti ovdje.
Odgovorite