Повторение сигнала с цифрового входа
- Войдите на сайт для отправки комментариев
Ср, 29/10/2014 - 16:43
Не обходимо записать сигнал с цифрового, а потом воспроизвести.
Вот что я написал:
Скейч принимает сигнал с 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(Может в этом дело)
Меня смущает массив на 1000 интов. Компилятор не ругается при заливке?
У меня все хорошо скомпилировалось.