User:Birgit bachler/BBB/rescue: Difference between revisions

From XPUB & Lens-Based wiki
No edit summary
Line 217: Line 217:
   pygame.display.flip()
   pygame.display.flip()
   clock.tick(30)
   clock.tick(30)
</source>
== readthem.sh ==
<source lang="">
#!/bin/bash
for x in $(ls *.txt)
do
cat $x | text2wave -f 44100 -o $x.ogg
done
</source>
</source>

Revision as of 14:45, 17 December 2010

phone_cont.pde

#include <avr/io.h>
#include <avr/interrupt.h>

#define gabelPin 4
#define klingelEn 7
#define klingelA 5
#define klingelB 6
#define klingelPeriod 2500 //1250

void setup(void){
  pinMode(gabelPin, INPUT);
  digitalWrite(gabelPin, HIGH);
  pinMode(klingelEn, OUTPUT);
  pinMode(klingelA, OUTPUT);
  pinMode(klingelB, OUTPUT);
  sei();

  TCCR1B = (_BV(CS12)); //timer at Fcpu/256  
  Serial.begin(115200);

}

void scheduleTimerInterrupt(void){
  OCR1A = (unsigned int)TCNT1 + (unsigned int)klingelPeriod; 
}

void startKlingel(void){
  scheduleTimerInterrupt();
  TIFR1 |= _BV(OCF1A); 
  TIMSK1 |= _BV(OCIE1A); 
  digitalWrite(klingelEn, HIGH);
  digitalWrite(klingelA, HIGH);
  digitalWrite(klingelB, LOW);
}

void stopKlingel(void){
  TIMSK1 &= ~_BV(OCIE1A); 
  digitalWrite(klingelEn, LOW);
}

ISR(TIMER1_COMPA_vect){
  PORTD ^= (_BV(5) | _BV(6));
  scheduleTimerInterrupt();
}

int gabel = 0;

void loop(void){
  int g;
  if (Serial.available()){
    switch (Serial.read()){
    case 75: //K
      startKlingel();
      break;
    case 107: //k
      stopKlingel();
      break;
    case 114:  //r
      g = digitalRead(gabelPin);
      if(g){
        Serial.write("g\n");
      }
      else {
        Serial.write("G\n");
      }
      break;
    }
  }
}


mastercontrolprogram.py

# 7th december 2010
# A telephone state machine with pygame
# state 1: WAIT, state 2: RING, state 3: PLAY, state 4: OVER, state5: RING2(on/on/off)
# simulate a hook with your hand on the space-key
# 3 testing sound files: ringringring.ogg for ring, offthehook.ogg for "besetzt", test.ogg for speech
# phone rings after random time (here, 15-90 seconds), gives up after 10 seconds
# important: serial crashes, timeout now 5, maybe size=1, timeout=None to test

#!/usr/bin/python

import sys, pygame, time, random, os
import serial

import glob


  
device = glob.glob("/dev/ttyUSB*")[0]
time.sleep(1)
arduino = serial.Serial(device, 115200, timeout=5)


time.sleep(2)

pygame.mixer.init(frequency = 44100)
pygame.init()



width, height = (640, 480)
screen = pygame.display.set_mode((width, height))
clock = pygame.time.Clock()



offthehook = pygame.mixer.Sound("offthehook.ogg")

WAIT=1
RING=2
RING2=5
PLAY=3
OVER=4


rtime = random.randint(15,90)
state = WAIT
pickup = False
statetime = time.time()
ringing = False
shringing = False


def getPickup():
  arduino.write('r')
  resp=arduino.readline().strip()
  #print resp
  return resp == 'G'


#  return not pygame.key.get_pressed()[pygame.K_SPACE]
#  return line

def newMessage():
  messagelist = glob.glob("messages/*.ogg")
  rmes = random.randint(0, len(messagelist)-1)
  return messagelist[rmes]

themessage = newMessage()

while True:
  for event in pygame.event.get():
    if event.type == pygame.QUIT or \
      (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
        sys.exit()

  pygame.draw.rect(screen, (0, 0, 0), (0,0,width,height), 0)
  p = getPickup()
  if p != pickup:
    pickup = p
    # pickup event
    if state == WAIT and pickup:
      state = OVER
      statetime = time.time()
      offthehook.play(loops=-1)
    if state == OVER and not pickup:
      state = WAIT
      statetime = time.time()
      pygame.mixer.stop()
    if state == RING and pickup:
      state = PLAY
      statetime = time.time()
      arduino.write('k')
      pygame.mixer.stop()  
      message = pygame.mixer.Sound(themessage)
      time.sleep(1)
      message.play()
      themessage = newMessage()
    if state == PLAY and not pickup:
      state = WAIT
      statetime = time.time()
      pygame.mixer.stop() 
  if state == PLAY and not pygame.mixer.get_busy():
    state = OVER
    statetime = time.time()
    time.sleep(1)
    offthehook.play(loops=-1)

  timeinstate = time.time() - statetime

  print state, timeinstate

  if state == WAIT and timeinstate >= rtime:
    rtime = random.randint(15,90)
    state = RING
    statetime = time.time()
    pygame.mixer.stop()
    arduino.write('K')
    ringing = True

  elif state == RING:
    # moduloring
    shringing = int(timeinstate)%3 != 2
    if ringing != shringing:
      if shringing:
        arduino.write('K')
      else:
        arduino.write('k')
      ringing = shringing

    if timeinstate >= 12:
      state = WAIT
      statetime = time.time()
      arduino.write('k')
      pygame.mixer.stop()
  

  pygame.display.flip()
  clock.tick(30)


readthem.sh

#!/bin/bash
for x in $(ls *.txt)
do
cat $x | text2wave -f 44100 -o $x.ogg
done