Re: Dimma med Nexa och en Arduino, lite problem..
Postat: 20 januari 2017, 23:54:26
Sitter och kikar nu men input:en från NEXAn ligger som en interrupt så det var därför man inte hade något mer i loopen i alla fall. Det blir lite att läsa på när man är kod-dyslektiker..
Funktionen du är ute efter är att vid ON så ska tejpen tändas och börja dimma upp och ner. Trycker du ON igen så ska den stanna där den är i fade:ningen men fortsätta vara på. Trycker du ON igen så ska den återuppta fade:ningen.
När du slutligen trycker OFF så ska den släckas?
Om det stämmer så hade jag missat det där med "pausen".
Vad jag kan se så gör det inget att fade-funktionen ligger i loop:en. Denna funktionen kommer rullas om och om igen fram till du trycker på ON/OFF, då triggas ett interrupt som pausar fade-funktionen, utför processCode() och sedan återgår där den var i fade-funktionen/loopen.
Måste klura lite mer men en sak vi kan göra (om ingen annan ser problemet) är att ladda ner "NEXA-koden" igen om verkligen bekräfta att den dimmar LED:en upp och ner med nedan modiferad kod.
Har inte provkört eller kompilerat koden men säg till om du får något fel du inte klurar ut direkt.
Funktionen du är ute efter är att vid ON så ska tejpen tändas och börja dimma upp och ner. Trycker du ON igen så ska den stanna där den är i fade:ningen men fortsätta vara på. Trycker du ON igen så ska den återuppta fade:ningen.
När du slutligen trycker OFF så ska den släckas?
Om det stämmer så hade jag missat det där med "pausen".
Vad jag kan se så gör det inget att fade-funktionen ligger i loop:en. Denna funktionen kommer rullas om och om igen fram till du trycker på ON/OFF, då triggas ett interrupt som pausar fade-funktionen, utför processCode() och sedan återgår där den var i fade-funktionen/loopen.
Måste klura lite mer men en sak vi kan göra (om ingen annan ser problemet) är att ladda ner "NEXA-koden" igen om verkligen bekräfta att den dimmar LED:en upp och ner med nedan modiferad kod.
Har inte provkört eller kompilerat koden men säg till om du får något fel du inte klurar ut direkt.
Kod: Markera allt
#include <NewRemoteReceiver.h>
boolean codeLearned = false;
unsigned long learnedAddress;
unsigned short learnedUnit;
int receivedCmd;
const int ledPin = 9; // the pin that the LED is attached to
int brightness = 0; // how bright the LED is
int fadeAmount = 5; // how many points to fade the LED by
void setup() {
// LED-pin as output
pinMode(9, OUTPUT);
// Init a new receiver on interrupt pin 0, minimal 2 identical repeats, and callback set to processCode.
NewRemoteReceiver::init(0, 2, processCode);
}
void loop() {
// Blink led until a code has been learned
if (!codeLearned) {
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}
while(receivedCmd){
analogWrite(ledPin, brightness);
// change the brightness for next time through the loop:
brightness = brightness + fadeAmount;
// reverse the direction of the fading at the ends of the fade:
if (brightness <= 0 || brightness >= 255) {
fadeAmount = -fadeAmount;
}
// wait for 30 milliseconds to see the dimming effect
delay(30);
}
brightness = 0;
analogWrite(ledPin, brightness);
}
// Callback function is called only when a valid code is received.
void processCode(NewRemoteCode receivedCode) {
// A code has been received.
// Do we already know the code?
if (!codeLearned) {
// No! Let's learn the received code.
learnedAddress = receivedCode.address;
learnedUnit = receivedCode.unit;
codeLearned = true;
} else {
// Yes!
// Is the received code identical to the learned code?
if (receivedCode.address == learnedAddress && receivedCode.unit == learnedUnit) {
// Yes!
// switchType == 1 means on, switchType == 0 means off.
if (receivedCode.switchType == 1) {
digitalWrite(13, HIGH);
receivedCmd = 1;
} else if (receivedCode.switchType == 0) {
digitalWrite(13, LOW); //<<<<< Här är det FRÅN
receivedCmd = 0;
}
}
}
}