|
hifi.slovanet.sk
Bolo zavedene manualne potvrdzovanie registracii !!!
|
|
Zobraziť predchádzajúcu tému :: Zobraziť nasledujúcu tému |
Autor |
Správa |
NeoV Nádejný hifista
Založený: 20 november 2014 Príspevky: 51
|
|
Návrat hore |
|
|
Quart Hifi expert
Založený: 26 december 2008 Príspevky: 1377 Bydlisko: Litoměřice
|
|
Návrat hore |
|
|
NeoV Nádejný hifista
Založený: 20 november 2014 Príspevky: 51
|
Zaslal: Ne apríl 19, 2015 18:57:07 Predmet: |
|
|
Tak po hodinach studia co to o elektronike a elektro suciastkach uz viem naco je transistor a co je to optoclen... som problem poriesil.... a nasiel som vyuzitie i pre posledne volne tlacidlo apple dialkoveho "MENU" pre prepinanie inputov na DAC prevodniku
foto tu:
https://www.facebook.com/media/set/?set=a.10206300551026293.1073741829.1641891389&type=1&l=157f7d47cd
neskor pastnem i schemu a mozno i kod _________________ North Star Design Essensio Plus ▶ Unison Research Unico P ▶ DynAudio Special Forty
├ Optical IN: HTPC ▶ LG OLED C1
└ Dig. RCA IN: Sonos Port |
|
Návrat hore |
|
|
NeoV Nádejný hifista
Založený: 20 november 2014 Príspevky: 51
|
Zaslal: Ne apríl 19, 2015 21:15:23 Predmet: |
|
|
Schema pridana do albumu... a tu je kod (osekol som 180 bajtove polia signalov zapnutia a vypnutia svetiel - nech mi sem niekto nepride svietit svetla ):
kód: |
#define ampPin 3
#define dacInputCheckPin 4
#define dacInputPin 5
#define dacPowerPin 6
#define buttonPin 7
#define irPin 8
#define rfTransmitPin 12
#define ledPin 13
#define lightPin A5
#define lightTresholdLow 40
#define lightTresholdHigh 60 //set to very low values as sensor behind TV...
#define buttonPulseLen 1500
#define irValue 2011250883
#define dacInputDelay 150
#define ampMinTreshold 10
#define ampOffTreshold 35
#define lightOffDelay 120000 //2mins
#include <IRremote.h>
IRrecv irrecv(irPin);
decode_results results;
const int dataSize = 180;
const byte signalOn[] = {7,4,4,8,8,4,7,.....,3,2,10}; // SHAPED !!!!
const byte signalOff[] = {3,9,8,3,4,8,8....2,10,2,9}; // SHAPED !!!!
const int timeDelay = 105; //Used to slow down the signal transmission (can be from 75 - 135)
volatile boolean lightIsOn = false;
volatile boolean lightAutoOn = false;
volatile unsigned long ampTime = 0;
volatile unsigned long ampOffTime = 0;
boolean buttonPinWasLow = true;
boolean dacInputCheckPinWasLow = true;
void setup(){
Serial.begin(9600); //Initialise Serial communication - only required if you plan to print to the Serial monitor
attachInterrupt(0, ampStartTime, FALLING);
attachInterrupt(1, ampEndTime, RISING);
pinMode(ampPin, INPUT);
pinMode(buttonPin, INPUT);
pinMode(dacInputCheckPin, INPUT);
pinMode(rfTransmitPin, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(dacInputPin, OUTPUT);
pinMode(dacPowerPin, OUTPUT);
digitalWrite(dacInputPin, LOW);
digitalWrite(dacPowerPin, LOW);
irrecv.enableIRIn(); // Start the receiver
Serial.println("Setup Done");
}
void loop(){
// check photoresistor
/*if(millis()%5000 == 0)
{
Serial.print(" | lightIsOn: "); Serial.print(lightIsOn);
Serial.print(" | lightAutoOn: "); Serial.print(lightAutoOn);
Serial.print(" | ampTime: "); Serial.print(ampTime);
Serial.print(" | ampOffTime: "); Serial.print(ampOffTime);
Serial.print(" | LIGHT: "); Serial.println(analogRead(lightPin));
}*/
if(lightAutoOn)
{
if(analogRead(lightPin) < lightTresholdLow && !lightIsOn)
{
Serial.print("LIGHT trigger ON: "); Serial.println(analogRead(lightPin));
sendOnSignal();
lightIsOn = true;
}
else
{
if(analogRead(lightPin) > lightTresholdHigh && lightIsOn)
{
Serial.print("LIGHT trigger OFF: "); Serial.println(analogRead(lightPin));
sendOffSignal();
lightIsOn = false;
}
}
}
// check light Button
if(digitalRead(buttonPin) == HIGH)
{
if(buttonPinWasLow)
{
Serial.println("Button Pressed");
if(pulseLength(buttonPin, HIGH, buttonPulseLen) >= buttonPulseLen)
{
Serial.println("Set lightAutoOn TRUE");
lightAutoOn = true;
}
else
{
Serial.println("Set lightAutoOn FALSE");
lightAutoOn = false;
}
if(lightIsOn)
{
sendOffSignal();
lightIsOn = false;
}
else
{
sendOnSignal();
lightIsOn = true;
}
buttonPinWasLow = false;
}
}
else
{
if(!buttonPinWasLow)
{
Serial.print("Button released.........");
buttonPinWasLow = true;
}
}
// check dac in
// TODO: HW riesenie in progress :-)
/*if(digitalRead(dacInputCheckPin) == HIGH)
{
if(dacInputCheckPinWasLow)
{
Serial.println("DAC Input button pressed.........");
if(digitalRead(dacPowerPin) == LOW)
{
//turn on DAC
digitalWrite(dacPowerPin, HIGH);
}
dacInputCheckPinWasLow = false;
}
}
else
{
if(!dacInputCheckPinWasLow)
{
Serial.println("DAC Button released.........");
dacInputCheckPinWasLow = true;
}
}*/
// check IR
if (irrecv.decode(&results))
{
if(results.value == irValue)
{
Serial.print("IR: ");
Serial.println(results.value);
if(digitalRead(dacPowerPin) == LOW)
{
//turn on DAC
digitalWrite(dacPowerPin, HIGH);
lightAutoOn = true;
ampOffTime = 0;
}
else
{
//switch Input
digitalWrite(dacInputPin, HIGH);
delay(dacInputDelay);
digitalWrite(dacInputPin, LOW);
//digitalWrite(dacPowerPin, (digitalRead(dacPowerPin)+1)%2);
}
}
irrecv.resume(); // Receive the next value
}
// check aduio shutdown -- handle long type reset to zero
if(ampOffTime > 0 && lightIsOn && (millis() - ampOffTime > lightOffDelay || (ampOffTime > millis() && millis() > lightOffDelay)))
{
Serial.print("LIGHT Delayed OFF");
sendOffSignal();
lightIsOn = false;
ampOffTime = 0;
}
}
void sendOnSignal(){
digitalWrite(ledPin, HIGH);
cli();
for(int i=0; i<dataSize; i=i+2){
//Send HIGH signal
digitalWrite(rfTransmitPin, HIGH);
delayMicroseconds(signalOn[i]*timeDelay);
//Send LOW signal
digitalWrite(rfTransmitPin, LOW);
delayMicroseconds(signalOn[i+1]*timeDelay);
}
sei();
digitalWrite(ledPin, LOW);
Serial.println("Send ON Signal");
}
void sendOffSignal(){
digitalWrite(ledPin, HIGH);
cli();
for(int i=0; i<dataSize; i=i+2){
//Send HIGH signal
digitalWrite(rfTransmitPin, HIGH);
delayMicroseconds(signalOff[i]*timeDelay);
//Send LOW signal
digitalWrite(rfTransmitPin, LOW);
delayMicroseconds(signalOff[i+1]*timeDelay);
}
sei();
digitalWrite(ledPin, LOW);
Serial.println("Send OFF Signal");
}
int pulseLength(byte pin, byte STATE, int limit)
{
unsigned long time = millis();
// do nothing while input in state...
while(digitalRead(pin) == STATE && (millis() - time) <= limit) {}
return millis() - time;
}
void ampStartTime()
{
Serial.print("Interrupt - START");
ampTime = millis();
Serial.println(ampTime);
}
void ampEndTime()
{
Serial.print("Interrupt - END -> ");
ampTime = millis() - ampTime;
Serial.println(ampTime);
if(ampTime > ampMinTreshold && ampTime != millis())
{
if(ampTime < ampOffTreshold)
{
//on
digitalWrite(dacPowerPin, HIGH);
lightAutoOn = true;
ampOffTime = 0;
}
else
{
//off
ampOffTime = millis();
lightAutoOn = false;
digitalWrite(dacPowerPin, LOW);
}
}
ampTime = 0;
}
|
_________________ North Star Design Essensio Plus ▶ Unison Research Unico P ▶ DynAudio Special Forty
├ Optical IN: HTPC ▶ LG OLED C1
└ Dig. RCA IN: Sonos Port |
|
Návrat hore |
|
|
|
|
Nemôžete pridávať nové témy do tohto fóra. Nemôžete odpovedať na témy v tomto fóre. Nemôžete upravovať svoje príspevky v tomto fóre. Nemôžete mazať svoje príspevky v tomto fóre. Nemôžete hlasovať v tomto fóre. Nemôžete pripojiť súbory do tohto fóra. Nemôžete sťahovať súbory z tohto fóra.
|
|