Помогите с кодом (еще одно)

1Evgen3543
Offline
Зарегистрирован: 06.01.2012

Здравствуйте!
Хочу сделать домашний светофор для игры ZDSimulator, данные передает ZDSReceiver, но я не знаю, как писать код, чтобы arduino могла считать эти данные.
Помогите, пожалуйста, с кодом.

ZDSReceiver передает данные в таком порядке: zds=0;0;0;0 как считать их на arduino по такой схеме?

Светофор
В первом ряду кода включается цифра 1; (zds=1;0;0;0) тогда должен загораться светодиод на 13
В первом ряду кода включается цифра 2; (zds=2;0;0;0) тогда должен загораться светодиод на 12
В первом ряду кода включается цифра 3; (zds=3;0;0;0) тогда должен загораться светодиод на 11
В первом ряду кода включается цифра 4; (zds=4;0;0;0) тогда должен загораться светодиод на 10
В первом ряду кода включается цифра 5; (zds=5;0;0;0) тогда должен загораться светодиод на 9

В третьем ряду, когда включается цифра 1; (zds=0;0;1;0) тогда должен загораться светодиод на 8.
Когда цифра выключается - светодиод выключается.

piccy.info/view3/2569437/75f06c04375b54e5ce7079d93125b38d/

1Evgen3543
Offline
Зарегистрирован: 06.01.2012

Уже помогли!

// устанавливаем выходы
const int lampPin = 8;  // лампа
const int wPin = 9;     // белый
const int rPin = 10;    // красный
const int ryPin = 11;   // КЖ
const int yPin = 12;    // желтый
const int gPin = 13;    // зеленый

// переменная с предыдущим показанием локомотивного светофора
// (чтобы знать, какой светодиод тушить после переключения сигнала)
int previous = 1;

void setup()
{
// устанавливаем 8 - 13 на вывод
// (вообще лучше сделать циклом, но я оставил для наглядности)
  pinMode(lampPin, OUTPUT);
  pinMode(gPin, OUTPUT);
  pinMode(yPin, OUTPUT);
  pinMode(ryPin, OUTPUT);
  pinMode(rPin, OUTPUT);
  pinMode(wPin, OUTPUT);

  Serial.begin(9600); // устанавливаем скорость передачи 9600 бод
  Serial.flush();     // очищаем буфер последовательного соединения
}

void loop()
{
  int light;
  int lamp;

  // если доступно 3 или больше байта на входе
  if(Serial.available() >= 3)
  {
    light = Serial.read();  // читаем показание светофора
    Serial.read();          // пропускаем симваол;
    lamp = Serial.read();   // состаояние лампы

    // если показание светофора поменялось
    if(light != previous)
    {
      analogWrite(previous + 8, LOW); // тушим светодиод предыдущего показания
      analogWrite(light + 8, HIGH);   // зажигаем новый

      previous = light; // запоминаем показание
    }

    //если состояние лампы 1, зажигаем светодиод; если - 0, то тушим
    if(lamp == 1)
      analogWrite(lampPin, HIGH);
    else
      analogWrite(lampPin, LOW);
  }
}