• 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
Selektor wejsc wzmacniacza, maly problem.
#1
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);
}
 
Odpowiedź
#2
Pokaż to, co nie działa. Polecam bibliotekę OneButton.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
(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.
 
Odpowiedź
#4
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().
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości