Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.11.2010, 00:35   #1
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Красивый звонок для ...

Проект переехал в тему "Воспроизведение Wav на Arduino"

Для проекта используем arduino
При нажатии на кнопку начнется воспроизведение звука , если кого заинтересует конвертер пишите скину.
Нажмите на изображение для увеличения
Название: wave.png
Просмотров: 431
Размер:	3.2 Кб
ID:	248

PHP код:
#include <stdint.h>
#include <avr/interrupt.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include "sounddata.h"
#define SAMPLE_RATE 16000

int ledPin 13;
int speakerPin 11;
volatile uint16_t sample;
byte lastSample;

// This is called at 16000 Hz to load the next sample.
ISR(TIMER1_COMPA_vect) {
    if (
sample >= sounddata_length) {
        if (
sample == sounddata_length lastSample) {
            
stopPlayback();
        }
        else {
            
// Ramp down to zero to reduce the click at the end of playback.
            
OCR2A sounddata_length lastSample sample;
        }
    }
    else {
          
OCR2A pgm_read_byte(&sounddata_data[sample]);
          }
    ++
sample;
}

void startPlayback()
{
    
pinMode(speakerPinOUTPUT);

    
// Set up Timer 2 to do pulse width modulation on the speaker
    // pin.

    // Use internal clock (datasheet p.160)
    
ASSR &= ~(_BV(EXCLK) | _BV(AS2));

    
// Set fast PWM mode  (p.157)
    
TCCR2A |= _BV(WGM21) | _BV(WGM20);
    
TCCR2B &= ~_BV(WGM22);

    
// Do non-inverting PWM on pin OC2A (p.155)
    // On the Arduino this is pin 11.
    
TCCR2A = (TCCR2A _BV(COM2A1)) & ~_BV(COM2A0);
    
TCCR2A &= ~(_BV(COM2B1) | _BV(COM2B0));

    
// No prescaler (p.158)
    
TCCR2B = (TCCR2B & ~(_BV(CS12) | _BV(CS11))) | _BV(CS10);

    
// Set initial pulse width to the first sample.
    
OCR2A pgm_read_byte(&sounddata_data[0]);


    
// Set up Timer 1 to send a sample every interrupt.

    
cli();

    
// Set CTC mode (Clear Timer on Compare Match) (p.133)
    // Have to set OCR1A *after*, otherwise it gets reset to 0!
    
TCCR1B = (TCCR1B & ~_BV(WGM13)) | _BV(WGM12);
    
TCCR1A TCCR1A & ~(_BV(WGM11) | _BV(WGM10));

    
// No prescaler (p.134)
    
TCCR1B = (TCCR1B & ~(_BV(CS12) | _BV(CS11))) | _BV(CS10);

    
// Set the compare register (OCR1A).
    // OCR1A is a 16-bit register, so we have to do this with
    // interrupts disabled to be safe.
    
OCR1A F_CPU SAMPLE_RATE;    // 16e6 / 8000 = 2000

    // Enable interrupt when TCNT1 == OCR1A (p.136)
    
TIMSK1 |= _BV(OCIE1A);

    
lastSample pgm_read_byte(&sounddata_data[sounddata_length-1]);
    
sample 0;
    
sei();
}

void stopPlayback()
{
    
// Disable playback per-sample interrupt.
    
TIMSK1 &= ~_BV(OCIE1A);

    
// Disable the per-sample timer completely.
    
TCCR1B &= ~_BV(CS10);

    
// Disable the PWM timer.
    
TCCR2B &= ~_BV(CS10);

    
digitalWrite(speakerPinLOW);
}

void setup()
{
    
pinMode(12INPUT);
    
digitalWrite(12HIGH);//подтягивающий резистор
    
pinMode(13OUTPUT);
    
pinMode(10OUTPUT);
}

void loop()
{
  if (
digitalRead(12)==LOW)
  {
    
delay(30);
    if (
digitalRead(12)==LOW)
     {
       
digitalWrite(10LOW);
       
digitalWrite(13HIGH);
         
startPlayback();
         
delay(2500);
         
startPlayback();
         
delay(2500);
         
pinMode(speakerPinINPUT);
         
digitalWrite(13LOW);
         
digitalWrite(10HIGH);
     } 
  }

Вложения
Тип файла: rar zvon.rar (29.0 Кб, 508 просмотров)
Admin вне форума   Ответить с цитированием
Старый 26.02.2012, 22:47   #2
ostapenko
Junior Member
 
Регистрация: 26.02.2012
Сообщений: 1
Вес репутации: 0
ostapenko is on a distinguished road
По умолчанию

Мне кажется очень интересная схема, а какой источник питания используется? Можно ли заказать детали через интернет или как то связаться с вами? Где узнать подробнее про конвертер? Может очень много вопросов , но я действительно очень рад что нашел ваш сайт, прямо глаза разбегаются!
ostapenko вне форума   Ответить с цитированием
Старый 26.02.2012, 23:23   #3
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Источник питания любой от 12 до 5в , можно использовать зарядку от мобильного телефона
Купить Arduino
Конвертер выложу
Admin вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 01:47. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика