summaryrefslogtreecommitdiff
path: root/n/es-2007/src/ascenseur.c
diff options
context:
space:
mode:
Diffstat (limited to 'n/es-2007/src/ascenseur.c')
-rw-r--r--n/es-2007/src/ascenseur.c82
1 files changed, 82 insertions, 0 deletions
diff --git a/n/es-2007/src/ascenseur.c b/n/es-2007/src/ascenseur.c
new file mode 100644
index 0000000..ef0a6c6
--- /dev/null
+++ b/n/es-2007/src/ascenseur.c
@@ -0,0 +1,82 @@
+/* ascenseur.c */
+/* es - Input/Output general purpose board. {{{
+ *
+ * Copyright (C) 2007 Christophe Le Blanc
+ *
+ * Robot APB Team/Efrei 2006.
+ * Web: http://assos.efrei.fr/robot/
+ * Email: robot AT efrei DOT fr
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * }}} */
+#include "common.h"
+#include "ascenseur.h"
+#include "modules/utils/utils.h"
+#include "io.h"
+#include "modules/proto/proto.h"
+
+#define OCR_AS OCR1A
+/* +AutoDec */
+/* -AutoDec */
+uint16_t ascenseur_temps;
+/* Initialise l'ascenseur. */
+void
+ascenseur_init (void)
+{
+
+ /* initialisation des sorties sur le port B pour moteur et turbines */
+ DDRB |= _BV(7) | _BV(6) | _BV (5) | _BV (4);
+
+ /* mode PWM = 0 */
+ OCR_AS = 0; /* vitesse moteur barillet nulle */
+ utils_delay_us ( 1 ); /* attente_ d'1 µs pour la puiss_barillet */
+}
+
+/* Fait bouger l'ascenseur. */
+void
+ascenseur_bouge (uint8_t vitesse, uint8_t temps, uint8_t sens_rotat)
+{
+ ascenseur_temps= (uint16_t) temps*4;
+ OCR_AS = 0;
+ utils_delay_us ( 1 ); /* attente_ d'1 µs pour la puiss_barillet */
+
+ if (sens_rotat)
+ {
+ PORTB |= _BV(4);
+ }
+ else
+ {
+ PORTB &= ~_BV(4);
+ }
+
+ utils_delay_us ( 1 ); /* attente_ d'1 µs pour la puiss_barillet */
+ OCR_AS = (uint16_t) vitesse * 4;
+}
+
+/* Met à jour l'état de l'ascenseur. Il faut appeler cette fonction toute les
+ * 4.44ms. */
+void
+ascenseur_update ()
+{
+ if (ascenseur_temps)
+ {
+ ascenseur_temps--;
+ if (ascenseur_temps==0)
+ {
+ OCR_AS=0;
+ }
+ }
+}