Skip to content
massteff edited this page Sep 10, 2018 · 1 revision

Précédent | Home | Suivant

Ex 10.1 Angles

But de l'exercice

Le but de l'exercice sera de répondre aux questions suivantes: Est-il possible que deux événements utilisent le même angle blanc ? Combien d’événements avec des angles différents pouvez-vous construire ?

Comment procéder?

Première question

Pour répondre à la première question, nous allons utiliser le même angle pour deux événements différents. Dans la première ligne, nous allons demander à notre Thymio d'allumer la partie du haut en rouge lorsqu'on le penche complètement à droite. Dans la deuxième, on fera en sorte qu'il allume la partie du bas en bleu lorsqu'on le penchera avec exactement le même angle.

Deuxième question

Pour la question suivante, nous allons configurer notre Thymio avec le maximum d’événements possibles avec des angles différents.

Résultats

Première question

Lorsqu'on essaie de configurer de configurer deux actions avec le même angle le VPL nous affiche un message d'erreur. Il est donc impossible que deux événements utilisent le même angle.

Deuxième question

Pour cette question, nous avons tout simplement fait glisser l'angle à l'aide notre souris. VPL nous donne la possibilité de choisir 26 angles différents. Verticalement 13 et Horizontalement 13. (Dans l'exemple nous allons seulement utiliser un côté)

Screenshots

Première question

Même angle

Deuxième question

Angles différents

Code

Première question

Impossibilité de copier le code lorsqu'un message d'erreur est affiché.

Deuxième question

# variables for state
var state[4] = [0,0,0,0]
var new_state[4] = [0,0,0,0]

# variable for angle
var angle
# variables for notes
var notes[6]
var durations[6]
var note_index = 6
var note_count = 6
var wave[142]
var i
var wave_phase
var wave_intensity

# compute a sinus wave for sound
for i in 0:141 do
	wave_phase = (i-70)*468
	call math.cos(wave_intensity, wave_phase)
	wave[i] = wave_intensity/256
end
call sound.wave(wave)
# reset outputs
call sound.system(-1)
call leds.top(0,0,0)
call leds.bottom.left(0,0,0)
call leds.bottom.right(0,0,0)
call leds.circle(0,0,0,0,0,0,0,0)

# subroutine to display the current state
sub display_state
	call leds.circle(0,state[1]*32,0,state[3]*32,0,state[2]*32,0,state[0]*32)

# when a note is finished, play the next note
onevent sound.finished
	if note_index != note_count then
		call sound.freq(notes[note_index], durations[note_index])
		note_index += 1
	end

onevent acc
	call math.atan2(angle, acc[0], acc[2])
	when angle > 15019 do
		call leds.top(0,0,0)
		emit pair_run 0
	end

	call math.atan2(angle, acc[0], acc[2])
	when angle > 12288 and angle < 15018 do
		call leds.top(0,0,0)
		emit pair_run 1
	end

	call math.atan2(angle, acc[0], acc[2])
	when angle > 9557 and angle < 12287 do
		call math.copy(notes[0:5], [440, 524, 440, 370, 311, 370])
		call math.copy(durations[0:5], [7, 7, 14, 7, 7, 14])
		note_index = 1
		note_count = 6
		call sound.freq(notes[0], durations[0])
		emit pair_run 2
	end

	call math.atan2(angle, acc[0], acc[2])
	when angle > 6827 and angle < 9557 do
		call math.copy(notes[0:5], [440, 524, 440, 370, 311, 370])
		call math.copy(durations[0:5], [7, 7, 14, 7, 7, 14])
		note_index = 1
		note_count = 6
		call sound.freq(notes[0], durations[0])
		emit pair_run 3
	end

	call math.atan2(angle, acc[0], acc[2])
	when angle > 4096 and angle < 6826 do
		timer.period[0] = 1
		emit pair_run 4
	end

	call math.atan2(angle, acc[0], acc[2])
	when angle > 1365 and angle < 4095 do
		motor.left.target = 0
		motor.right.target = 0
		emit pair_run 5
	end

	call math.atan2(angle, acc[0], acc[2])
	when angle > -1365 and angle < 1365 do
		call math.copy(notes[0:5], [440, 524, 440, 370, 311, 370])
		call math.copy(durations[0:5], [7, 7, 14, 7, 7, 14])
		note_index = 1
		note_count = 6
		call sound.freq(notes[0], durations[0])
		emit pair_run 6
	end

Clone this wiki locally