User Tools

Site Tools


smartway

This is an old revision of the document!


Умная дорожка

На входе в школу ученик 1-го класса (неопытный школьник) выбирает на сенсорном экране дисплея фото своего преподавателя. На определенное время загорается дорожка из «бегущих огней» от местоположения ученика до класса.

Во время объявления пожарной тревоги от всех классов загораются дорожки «бегущих огней» красного цвета от классов до соответствующих аварийных выходов.

Схема

Код

#include <SoftwareSerial.h>
 
int latchPin = 12;
int clockPin = 13;
int dataPin = 11;
 
int numOfRegisters = 2;
byte* registerState;
 
int val;
 
int gRxPin = 3;
int gTxPin = 2;
 
SoftwareSerial BTSerial(gRxPin, gTxPin);
 
void setup() {
  registerState = new byte[numOfRegisters];
    for (size_t i = 0; i < numOfRegisters; i++) {
    registerState[i] = 0;
  }
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
 
  pinMode(13, OUTPUT);
 
  BTSerial.begin(9600);
}
 
void loop() {
  if (BTSerial.available()) {
    val = BTSerial.read();
    // При символе "0" включаем красный
    if (val == '0') {
      RedWay();
    }
    // При символе "1" включаем зеленый
    if ( val == '1') {
      GreenWay();
    }
  }
}
 
 
// изменение состояния светодиода с номером pin
void regWrite(int pin, bool state){
  int reg = pin / 8;
  int actualPin = pin - (8 * reg);
  digitalWrite(latchPin, LOW);
  for (int i = 0; i < numOfRegisters; i++){
    byte* states = &registerState[i];
    if (i == reg){
      bitWrite(*states, actualPin, state);
    }
    shiftOut(dataPin, clockPin, MSBFIRST, *states);
  }
  digitalWrite(latchPin, HIGH);
}
 
void RedWay(){
  for (int i = 8; i < 15; i++){
    regWrite(i, HIGH);
    delay(100);
    regWrite(i, LOW);
  }
}
 
void GreenWay(){
  for (int i = 0; i < 7; i++){
    regWrite(i, HIGH);
    delay(100);
    regWrite(i, LOW);
  }
}
smartway.1624125607.txt.gz · Last modified: by admin