Повторение сигнала с цифрового входа

rykozhop
Offline
Зарегистрирован: 19.08.2014

Не обходимо записать сигнал с цифрового, а потом воспроизвести.

Вот что я написал:

Скейч принимает сигнал с 12 пина, одновременного воспроизведения на 13

При включении тумблера на 11 пине, сигнал воспроизводится по кругу

Так же к 13 пину присоединен динамик чтобы определять на звук

int duration;
int ArraySign[1000];
int i=0;
int S=1;
unsigned int SU;
void setup() {
 Serial.begin(9600); 
 pinMode(12,INPUT);
 pinMode(11,INPUT);
 pinMode(13,OUTPUT);   
}

void loop(){
//Serial.println();


if (digitalRead(11) == HIGH){

 S = ReadArray(); // Читаем из массива
  if ((S > 0) ){
    digitalWrite(13,HIGH);
    SU = S; // переводим из int в unsigned int
    delayMicroseconds(SU);
  }else{
    digitalWrite(13,LOW);
    S = S * (-1); // Переводим в положительное
    SU = S; // переводим из int в unsigned int
    delayMicroseconds(SU);
  }
}else{
 
if (digitalRead(12) == HIGH){ 
digitalWrite(13,HIGH);
duration = pulseIn(12, HIGH,30000);
if (duration == 0) { duration = 30000;}
//Serial.println(duration);
WriteArray(duration); // Пишем в массив
}else{
digitalWrite(13,LOW);
 duration = pulseIn(12, LOW,30000);
if (duration == 0) { duration = 30000;}
duration = duration*(-1); //Переводим в отрицательное показывая тем что согнал равен 0
//Serial.println(duration);
WriteArray(duration); // Пишем в массив
}
}


}




int ReadArray(){ //Функция читает по кругу
  int result;
  result = ArraySign[i];
  i = i + 1;
  if (i>1000) {i=0;}
  return result;
}
int WriteArray(int z){ //Функция пишет по кругу
  ArraySign[i]=z;
  i = i + 1;
  if (i>1000) {i=0;}
  return 0;
}

Так вот исходя из звука динамика могу сделать вывод об отличии сигнала.

P.S. У меня китайский Arduino Nano(Может в этом дело)

Radjah
Offline
Зарегистрирован: 06.08.2014

Меня смущает массив на 1000 интов. Компилятор не ругается при заливке?

rykozhop
Offline
Зарегистрирован: 19.08.2014

У меня все хорошо скомпилировалось.