Arduino Polska Forum
Selektor wejsc wzmacniacza, maly problem. - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: Selektor wejsc wzmacniacza, maly problem. (/watek-selektor-wejsc-wzmacniacza-maly-problem)



Selektor wejsc wzmacniacza, maly problem. - Lukasz_rgb - 06-03-2022

Witam,

chce zbudowac selektor wejsc, na przekaznikach, sterowany pilotem. Sketch wkleje ponizej. Z pilota wszystko dziala poprawnie. Dodatkowo chce dodac Button, ktory bedzie zmienial stany logiczne przekaznikow. Probowalem juz na wiele sposobow, ale zaden nie zadzialal poprawnie. Juz sam nie wiem gdzie robie blad Confused 

Kod:
#include <IRremote.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);

const int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
int led1 = 4;
int led2 = 5;
int led3 = 6;
int led4 = 7;

void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(led1, OUTPUT);
pinMode(pin2, INPUT_PULLUP);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);

lcd.begin(20,4);
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("   INPUT SELECTOR");
lcd.setCursor(6,2);
lcd.print("CD ");

}

void loop()
{
if (irrecv.decode(&results))
{
Serial.print(" DEC: ");
Serial.println(results.value, DEC);
if (((results.value) == (3073854602))||((results.value) == (1069224589)))
{
  lcd.setCursor(6,2);
  lcd.print("CD ");
  Serial.println("CD");
  cd();
}

else 

if (((results.value) == (3754691388))||((results.value) == (4218592207)))
  {
  lcd.setCursor(6,2);
  lcd.print("DVD ");
  Serial.println("DVD");
  dvd();
  }
else 



if (((results.value) == (517694878))||((results.value) == (4041752253)))
  {
  lcd.setCursor(6,2);
  lcd.print("TAPE ");
  Serial.println("TAPE");
  tape();
  }
else 
if (((results.value) == (2604307852))||((results.value) == (1349377433)))
  {
  lcd.setCursor(6,2);
  lcd.print("AUX ");
  Serial.println("AUX");
aux();
  }

irrecv.resume();
}

}
void cd()
{leds(0,1,1,1,0) && (pin2 == LOW);}

void dvd()
{leds(1,0,1,1,0);}


void tape()
{leds(1,1,0,1,0);}

void aux()
{leds(1,1,1,0,0);}



void leds(int le1,int le2,int le3,int le4, int pin2,)
digitalWrite (led1, le1);
digitalWrite (led2, le2);
digitalWrite (led3, le3);
digitalWrite (led4, le4);
}



RE: Selektor wejsc wzmacniacza, maly problem. - kaczakat - 07-03-2022

Pokaż to, co nie działa. Polecam bibliotekę OneButton.


RE: Selektor wejsc wzmacniacza, maly problem. - Lukasz_rgb - 07-03-2022

(07-03-2022, 10:18)kaczakat napisał(a): Pokaż to, co nie działa. Polecam bibliotekę OneButton.

Z pilota dziala wszystko poprawnie. Chce dodac do tego button, ktory bedzie zmienial stany logiczne przekaznikow. Dziala to nastepujaco, na pilocie mam przyciski od 1 do 4.

przycisk 1, stan na wyjsciu

0,1,1,1

przycisk 2, stan na wyjsciu

1,0,1,1

przycisk 3, stan na wyjsciu

1,1,0,1

przycisk 4, stan na wyjsciu

1,1,1,0

Nie mam pojecia jak dodac do tego button dzialajacy w petli.


RE: Selektor wejsc wzmacniacza, maly problem. - kaczakat - 07-03-2022

Ale w bibliotece są przykłady, zajrzałeś do nich?
A tu inny przykład, gdzie jednym przyciskiem wybierasz działanie 4 scenariuszy działania programu:
Kod:
#include "OneButton.h"

const int led=LED_BUILTIN;
  enum action{
  ACTION_OFF,  // set LED "OFF".
  ACTION_ON,   // set LED "ON"
  ACTION_SLOW, // blink LED "SLOW"
  ACTION_FAST  // blink LED "FAST"
} ;
uint8_t nuberOfAction=0;


OneButton button(2, true);


void setup() {
  // put your setup code here, to run once:
  pinMode(led, OUTPUT); 
  button.attachClick(myClickFunction);
  button.setDebounceTicks(80);


}

void loop() {
  // put your main code here, to run repeatedly:
button.tick();

wybranyRozdzial();

}



void myClickFunction() {
nuberOfAction++;

} // myClickFunction


void ledOff()
{
digitalWrite(led,false);
}

void ledOn()
{
digitalWrite(led,true); 
}

void ledFast()
{
static uint32_t poprzednio=0;
uint32_t  teraz=millis();
if ((uint32_t)(teraz-poprzednio)>200)
{
  poprzednio=teraz;
  digitalWrite(led,! digitalRead(led));
}

 
}

void ledSlow()
{
static uint32_t poprzednio=0;
uint32_t  teraz=millis();
if ((uint32_t)(teraz-poprzednio)>1000)
{
  poprzednio=teraz;
  digitalWrite(led,! digitalRead(led));

}


void wybranyRozdzial()
{
  switch (nuberOfAction)
{
  case ACTION_OFF:
  ledOff();
  break;
  case ACTION_ON:
  ledOn();
  break;
  case ACTION_SLOW:
  ledSlow();
  break;
  case ACTION_FAST:
  ledFast();
  break;
 
  default:
  nuberOfAction=0;
  break; 
 
}
 
}
Więszkość można wywalić, a to co chcesz zrobić można wstawić do myClickFunction().