• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Problem z obsługą przycisku
#1
Witam
Na wstępie chciałbym zaznaczyć iż jestem nowym użytkownikiem na tym forum, jednocześnie nie mam dużego doświadczenia w programowaniu (jestem samoukiem z YT elektroprzewodnik i elektromaras) jednak mimo to udało mi się stworzyć kilka projektów. Niestety tym razem walczę ze sterownikiem do oświetlenia led do kuchni sterowanego z pilota od tv. Póki co udało mi się zbudować sterownik włączanie i wyłączanie kanałów z pilota działa, przyciemnianie i rozjaśnianie też działa. Niestety nie daje rady z przyciskiem który ma włączać i wyłączać kanał z ledami pod szafkami (dodatkowe sterowanie jednym kanałem poza pilotem). Problem polega na tym iż fragment kodu obsługi przycisku jest w jakiś sposób pomijany. 
Tutaj wstawiam cały kod.
Kod:
int ir_pin = 2;                        //Sensor pin 1 wired through a 220 ohm resistor                  //"Ready to Recieve" flag, not needed but nice
int debug = 0;                         //Serial connection must be started to debug
int start_bit = 2000;                  //Start bit threshold (Microseconds)
int bin_1 = 1000;                      //Binary 1 threshold (Microseconds)
int bin_0 = 400;                       //Binary 0 threshold (Microseconds)

 
void setup() {

 pinMode(3, OUTPUT);
 pinMode(5,OUTPUT);
 pinMode(6, OUTPUT);
 pinMode(9, OUTPUT);
 pinMode(10, OUTPUT);    
 pinMode(11, OUTPUT);  
 pinMode(12, INPUT);    
 pinMode(ir_pin, INPUT);
}
boolean jeden = 0;
boolean dwa = 0;
boolean trzy = 0;
boolean cztery = 0;
int czas= 200;
int jasnosc=255;
int stare=255;

void loop() {

int key = getIRKey();
int guzik = guzik2();
if (key == 146 & jasnosc <= 255)
{
 jasnosc=jasnosc+50;
 delay(czas);
}
if (key == 146 & jasnosc >= 255)
{
 jasnosc=255;
  delay(czas);
    }
if (key == 147 & jasnosc >= 5)
{
 jasnosc=jasnosc-50;
  delay(czas);
}
if (key == 147 & jasnosc <=5)
{
 jasnosc=5;
  delay(czas);
 }
if (stare == jasnosc)
{  
if (key == 128)
{
 jeden=!jeden;
key = 0;
delay(czas);
}  
if (jeden == 0)
{
analogWrite(3,0);
analogWrite(5,0);
}
if (jeden == 1)
{
analogWrite(3,stare);
analogWrite(5,stare);
}
if (key == 129)
{
 dwa=!dwa;
key = 0;
delay(czas);
}  
if (dwa == 0)
{
analogWrite(6,0);
analogWrite(9,0);
}
if (dwa == 1)
{
analogWrite(6,stare);
analogWrite(9,stare);
}
if (key == 130)
{
 trzy=!trzy;
key = 0;
delay(czas);
}  
if (trzy == 0)
{
analogWrite(10,0);
}
if (trzy == 1)
{
analogWrite(10,stare);
}
if (key == 131)
{
cztery=!cztery;
key = 0;
delay(czas);
}  
if (cztery == 0)
{
analogWrite(11,0);
}
if (cztery == 1)
{
analogWrite(11,stare);
}
}
if (stare != jasnosc)
{  
if (key == 128)
{
jeden=!jeden;
key = 0;
delay(czas);
}  
if (jeden == 0)
{
analogWrite(3,0);
analogWrite(5,0);
}
if (jeden == 1)
{
analogWrite(3,jasnosc);
analogWrite(5,jasnosc);
}
if (key == 129)
{
dwa=!dwa;
key = 0;
delay(czas);
}  
if (dwa == 0)
{
analogWrite(6,0);
analogWrite(9,0);
}
if (dwa == 1)
{
analogWrite(6,jasnosc);
analogWrite(9,jasnosc);
}
if (key == 130)
{
trzy=!trzy;
key = 0;
delay(czas);
}  
if (trzy == 0)
{
analogWrite(10,0);
}
if (trzy == 1)
{
analogWrite(10,jasnosc);
}
if (key == 131)
{
cztery=!cztery;
key = 0;
delay(czas);
}  
if (cztery == 0)
{
analogWrite(11,0);
}
if (cztery == 1)
{
analogWrite(11,jasnosc);
}
}
if (key == 149)
{
 jeden=0;
 dwa=0;
 trzy=0;
cztery=0;
 }
if (key == 165)
{
 jeden=1;
 dwa=1;
 trzy=1;
 cztery=1;
}

}
 
}
int getIRKey() {
 int data[12];
 while(pulseIn(ir_pin, LOW) < 2200) { //Wait for a start bit
 }
 data[0] = pulseIn(ir_pin, LOW);      //Start measuring bits, I only want low pulses
 data[1] = pulseIn(ir_pin, LOW);
 data[2] = pulseIn(ir_pin, LOW);
 data[3] = pulseIn(ir_pin, LOW);
 data[4] = pulseIn(ir_pin, LOW);
 data[5] = pulseIn(ir_pin, LOW);
 data[6] = pulseIn(ir_pin, LOW);
 data[7] = pulseIn(ir_pin, LOW);
 data[8] = pulseIn(ir_pin, LOW);
 data[9] = pulseIn(ir_pin, LOW);
 data[10] = pulseIn(ir_pin, LOW);
 data[11] = pulseIn(ir_pin, LOW);
 for(int i=0;i<11;i++) {              //Parse them      
   if(data[i] > bin_1) {              //is it a 1?
     data[i] = 1;
   }  else {
     if(data[i] > bin_0) {            //is it a 0?
       data[i] = 0;
     }
   }
 }  
 int result = 0;  
 int seed = 1;                                      
 for(int i=0;i<11;i++) {              //Convert bits to integer
   if(data[i] == 1) {
     result += seed;
   }
   seed = seed * 2;
 }
 return result;                       //Return key number
}
Dodam jeszcze to iż fragmen kodu:
int getIRKey() .....
jest to gotowiec z internetu pilota czyta i przypisuje przyciskom wartości niestety przez niego nie działa przcisk
jak wprowadze przróbkę typu 
void loop() {

int key = 0;
//int key = getIRKey();
zamiast
void loop() {


int key = getIRKey();
wtedy przycisk działa niestety nie reaguje we właściwym kodzie 
proszę o pomoc już kilka dni z tym walczę sam i doszedłem do etapu gdzie dalej sam nie dam rady
pozdrawiam 
z góry dzięki za pomoc
 
Odpowiedź
  


Wiadomości w tym wątku
Problem z obsługą przycisku - przez fgt90 - 01-06-2019, 15:31
RE: Problem z obsługą przycisku - przez kaczakat - 01-06-2019, 19:06
RE: Problem z obsługą przycisku - przez fgt90 - 02-06-2019, 19:22
RE: Problem z obsługą przycisku - przez fgt90 - 02-06-2019, 20:44
RE: Problem z obsługą przycisku - przez kaczakat - 02-06-2019, 23:48
RE: Problem z obsługą przycisku - przez fgt90 - 03-06-2019, 00:25
RE: Problem z obsługą przycisku - przez kaczakat - 03-06-2019, 02:54
RE: Problem z obsługą przycisku - przez fgt90 - 03-06-2019, 14:16

Skocz do:


Przeglądający: 1 gości