-
Notifications
You must be signed in to change notification settings - Fork 2
angles
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 ?
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.
Pour la question suivante, nous allons configurer notre Thymio avec le maximum d’événements possibles avec des angles différents.
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.
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é)
Impossibilité de copier le code lorsqu'un message d'erreur est affiché.
# 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