matpi / EmbeddedSystemsUTU

This repository concerns the course KSA4 Embedded Systems (craft, design and technology education) in the University of Turku, Department of Teacher Education, Rauma Unit in the academic year 2014
4 stars 5 forks source link

Leppäkertun koodi/Harri&Jarmo #43

Open jarmoharri opened 9 years ago

jarmoharri commented 9 years ago

Tässä koodimme, jolla leppis etenee,tunnistaa esteen, kääntyy, vilkuttaa valoja sekä laulaa mennessään. Ongelmia oli esteen etäisyyden tunnistamisessa. Jos arvo on sama etenemisen ja kääntymisen rajapinnassa, robotti jää arpoamaan ja suorittaa omia tulkintojaan.

include "pitches.h"

// notes in the melody: int melody[] = { NOTE_C4, NOTE_C4, NOTE_C4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_F4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_C4};

// note durations: 4 = quarter note, 8 = eighth note, etc.: int noteDurations[] = { 4,4,4,4,4,4,4,4,4,4,4,4,1 };

int numTones = 10; // kääntymis ääni int tones[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440}; // mid C C# D D# E F F# G G# A

#include <Servo.h>

Servo ekaServo; // luodaan servo-objekti nimeltä ekaservo

Servo tokaServo; // luodaan servo-objekti nimeltä tokaservo

int ECHOPIN = 2; // ottaa vastaa echo pulsen

int TRIGPIN = 3;// lähettää trigger pulsen

long previousMillis = 0; 
long interval = 1000;
int thisNote = 0;

void setup()
{

{ pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); }

ekaServo.attach(6); //käynnistää ekaservo nimisen servo-objektin pinnissä 6

tokaServo.attach(7); //käynnistää tokaservo nimisen servo-objektin pinnissä 7

ekaServo.write(90); // asettaa servon keskelle, 90 asteen kulmaan

tokaServo.write(90); // asettaa servon keskelle, 90 asteen kulmaan

delay(1000); // servolle pitää antaa aikaa liikkua

Serial.begin(9600);

pinMode(ECHOPIN, INPUT);

pinMode(TRIGPIN, OUTPUT);

for (int i = 0; i < numTones; i++) //  kääntymis ääni

{ tone(4, tones[i]); delay(50); } noTone(4);

}

void loop()
{

digitalWrite(TRIGPIN, LOW);

delayMicroseconds(2);

digitalWrite(TRIGPIN, HIGH);

delayMicroseconds(10);

digitalWrite(TRIGPIN, LOW);

int microseconds = pulseIn(ECHOPIN, HIGH);

int distance= microseconds/29/2;

Serial.println(distance);

if(distance>21)

{

digitalWrite(8, LOW); digitalWrite(9,LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); digitalWrite(12,LOW); digitalWrite(13, LOW);

Serial.print("suoraan");

 ekaServo.write(75); // käskee servon toiseen äärilaitaan, 0-asteen kulmaan

tokaServo.write(104); // käskee servon toiseen äärilaitaan, 0-asteen kulmaan

unsigned long currentMillis = millis();

if(currentMillis - previousMillis > 300) { thisNote++; // save the last time you blinked the LED previousMillis = currentMillis;

int noteDuration = 500/noteDurations[thisNote]; tone(4, melody[thisNote],noteDuration);

// to distinguish the notes, set a minimum time between them.
// the note's duration + 30% seems to work well:
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// stop the tone playing:
noTone(4);
if( thisNote > 12)
 thisNote  = 0;

}

//delay(10);

}

if(distance<20)

{

ekaServo.write(79); // käskee servon toiseen äärilaitaan, 0-asteen kulmaan

tokaServo.write(79); // käskee servon toiseen äärilaitaan, 0-asteen kulmaa

delay(400);

unsigned long currentMillis = millis();

if(currentMillis - previousMillis > 30) {

for (int i = 0; i < numTones; i++)

{ tone(4, tones[i]);

digitalWrite(8, random (2)); digitalWrite(9, random (2)); digitalWrite(10, random (2)); digitalWrite(11, random (2)); digitalWrite(12, random (2)); digitalWrite(13, random (2));

delay(50); } noTone(4);

if( numTones > 10) numTones = 0; }
//delay(100);

}

}