Повторение сигнала с цифрового входа
- Войдите на сайт для отправки комментариев
Ср, 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 интов. Компилятор не ругается при заливке?
У меня все хорошо скомпилировалось.