Felvez
Published

Sakura Densya Mod

In setting up my Sakura Densya, I made some modifications to the lighting using an Arduino Nano. "

IntermediateFull instructions provided5 hours28
Sakura Densya Mod

Things used in this project

Hardware components

1BitSquared Robotime Book Nook Sakura Densya
×1
Arduino Nano R3
Arduino Nano R3
×1
SMD LEDs
×15
Through Hole Resistor, 560 ohm
Through Hole Resistor, 560 ohm
×2
IR receiver (generic)
×1

Story

Read more

Custom parts and enclosures

Light tram barrier

Backplate

Schematics

Schematic

Code

Code

Arduino
#include <IRremote.h>

#define PIN_BUTTON 2  // Pin, an dem der Taster angeschlossen ist.

boolean buttonState = false;     // Zum merken, ob der Taster gedrckt wurde
boolean aButtonPressed = false;  // True, wenn der Taster gedrueckt wird, sonst false.
boolean taster = true;           //Zustand fr den Taster-Sensor

int EmpfaengerPin = 3;

// Pin der LED
int LED0 = 4;   // Hauptlicht
int LED1 = 5;   // Licht oben links
int LED2 = 6;   // Licht oben rechts
int LED3 = 7;   // Licht unten rechts
int LED4 = 8;   //  Licht in der Bahn
int LED5 = 9;   // Licht under der Brcke
int LED6 = 10;  //Licht am Schild
int LED7 = 11;  // Oberes Licht der Schranke
int LED8 = 12;  // Unteres Licht der Schranke

int schrankenlicht = 0;  // Steuert das Schrankenlicht
//int taster = 0;          // Signal des manuellen Tasters
int program = 0;  // speichert das aktuelle Programm

int buttonPushCounter = 0;  // counter for the number of button presses
int lastButtonState = 0;    // previous state of the button


unsigned long previousMillis = 0;
const long interval = 1000;

void setup() {
  IrReceiver.begin(EmpfaengerPin);
  pinMode(PIN_BUTTON, INPUT_PULLUP);  // Pin, an dem der Taster angeschlossen ist, als Eingang mit aktiviertem Pull-Up-Widerstand festlegen.
  Serial.begin(9600);
}

void loop() {

  //###############################################
  // Zustand des Tasters wird ermittelt

  {
    if (digitalRead(PIN_BUTTON) == LOW) {  // Wenn der Taster aktuell gedrueckt wird, ...
      aButtonPressed = true;               // merke dir, dass der Taster gedrueckt wurde.
    }

    if (digitalRead(PIN_BUTTON) == HIGH && aButtonPressed == true) {  // Wenn der Taster nicht gedrueckt wird, aber zuvor gedrckt wurde ...
      aButtonPressed = false;                                         // vergesse, dass der Taster gedrckt wude.
    }

    if (aButtonPressed == true) {  // Wenn die LED gerade leuchtet ...
      taster = true;               // schaltet tasterzustand
    } else {                       // sonst ...
      taster = false;              // schaltet tasterzustand
    }
  }

  //#############################################################
  // Wird der Taster gedrckt geht das Licht aus, bzw. wieder mit der ausgewaehlten Szene an

  if (taster != buttonState) {
    if (buttonState == false) {
      licht_aus();
      Serial.println(program);
    } else {
      if (program == 1) {
        szene1();
      }
      if (program == 2) {
        szene2();
        Serial.println("szene2");
      }
      if (program == 3) {
        szene3();
      }
      if (program == 4) {
        szene4();
      }
      Serial.println("Laufe durchs Programm");
    }

    buttonState = taster;

    delay(300);
  }




  //###################################################################
  // Bereich fr "Blink without delay", fr die Schranke

  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;
    if (schrankenlicht == 1) {
      // if the LED is off turn it on and vice-versa:
      if (digitalRead(LED8) == LOW) {
        analogWrite(LED8, 255);
        analogWrite(LED7, 0);
      } else {
        analogWrite(LED8, 0);
        analogWrite(LED7, 255);
      }
    }
  }


  //##################################################################
  // Daten des IR-Kopfes lesen
  if (IrReceiver.decode()) {
    // nchsten Wert lesen
    IrReceiver.resume();

    if (IrReceiver.decodedIRData.address == 0) {
      if (IrReceiver.decodedIRData.command == 22) {
        licht_aus();
      }
      if (IrReceiver.decodedIRData.command == 12) {
        szene1();
      }
      if (IrReceiver.decodedIRData.command == 24) {
        szene2();
      }
      if (IrReceiver.decodedIRData.command == 94) {
        szene3();
      }
      if (IrReceiver.decodedIRData.command == 8) {
        szene4();
      }
    }
  }
}

void licht_aus() {
  Serial.print(" licht aus ");
  digitalWrite(LED0, LOW);
  digitalWrite(LED1, LOW);
  digitalWrite(LED2, LOW);
  digitalWrite(LED3, LOW);
  digitalWrite(LED4, LOW);
  digitalWrite(LED5, LOW);
  digitalWrite(LED6, LOW);
  digitalWrite(LED7, LOW);
  analogWrite(LED8, 0);
  schrankenlicht = 0;
}

void szene1() {  // Nur das Hauptlicht
  licht_aus();
  analogWrite(LED0, 255);
  program = 1;
}

void szene2() {  // Licht in allen Fenstern
  licht_aus();
  analogWrite(LED1, 255);
  analogWrite(LED2, 255);
  analogWrite(LED3, 255);
  program = 2;
}

void szene3() {  // Licht am Schild, unter der Brcke und am oberen rechten Fenster
  licht_aus();
  analogWrite(LED2, 255);
  analogWrite(LED5, 255);
  analogWrite(LED6, 255);
  program = 3;
}
void szene4() {  // Licht am Schild Unter der Brcke, in der Bahn und das Schrankenlicht
  licht_aus();
  analogWrite(LED4, 255);
  analogWrite(LED5, 255);
  analogWrite(LED6, 255);
  schrankenlicht = 1;
  program = 4;
}

Credits

Felvez

Felvez

2 projects • 0 followers

Comments