Commit 1058ea24afe22d52cec279669efed81bd77cf89b

Authored by lahouass
1 parent 190bfc15

Fichier d'envoi des mesures de température vers la raspberry

Showing 1 changed file with 96 additions and 0 deletions   Show diff stats
Tuno_to_rpi.c 0 → 100644
... ... @@ -0,0 +1,96 @@
  1 +#include <avr/io.h> // for the input/output register
  2 +#include <avr/interrupt.h>
  3 +#include <util/delay.h>
  4 +#include <unistd.h>
  5 +#include <string.h>
  6 +#include <stdlib.h>
  7 +#include <stdio.h>
  8 +
  9 +#define PRESCALER 1024
  10 +#define TIME_SLOT 20
  11 +#define NB_TICK 113
  12 +#define BAUDRATE 103
  13 +
  14 +char Donnee[20];
  15 +
  16 +void init_serial(void)
  17 +{
  18 + /* ACHTUNG : we suppose UBRR value < 0xff */
  19 + /* Not true in all case */
  20 + uint8_t baudrate = BAUDRATE;
  21 + /* Set baud rate */
  22 + UBRR0H = 0;
  23 + UBRR0L = baudrate;
  24 + /* Enable transmitter *///task_led_red();
  25 + //task_send_serial('A');
  26 + UCSR0B = (1<<TXEN0);
  27 + /* Set frame format */
  28 + UCSR0C = 0x06;
  29 +
  30 +}
  31 +
  32 +void send_serial(unsigned char c)
  33 +{
  34 + loop_until_bit_is_set(UCSR0A, UDRE0);
  35 + UDR0 = c;
  36 +}
  37 +
  38 +void send_msg(char Donnee[]){
  39 + //char msg[] = "Bonjour\r\n";
  40 + while(1){ //nécessaire pour eviter d'executer la tache une seule fois
  41 + int i=0;
  42 + for(i=0; i<strlen(Donnee); i++){
  43 + send_serial(Donnee[i]);
  44 + _delay_ms(100);
  45 + }
  46 +
  47 + }
  48 +}
  49 +
  50 +
  51 +
  52 +// L'équivalent de analogueRead() pour avr
  53 +int analogReadNew(uint8_t pin) {
  54 + // Pour les cartes Mega
  55 + #if defined(__AVR_ATmega1280__)
  56 + // Si le pin considéré est de type Ax, on utilise ça
  57 + if (pin >= 54) pin -= 54;
  58 + // Pour les Uno et Nano
  59 + #else
  60 + if (pin >= 14) pin -= 14;
  61 + #endif
  62 +
  63 + // Définition de la référence de tension
  64 + ADMUX |= (1 << REFS0);
  65 + // On sélectionne notre pin
  66 + ADMUX |= pin & 0x07;
  67 +
  68 + #if defined(ADCSRB) && defined(MUX5)
  69 + // Utilisation de MUX5 sur la Mega pour les pins au-dessus de A7
  70 + ADCSRB = (ADCSRB & ~(1 << MUX5)) | (((pin >> 3) & 0x01) << MUX5);
  71 + #endif
  72 +
  73 + // On lance la conversion
  74 + sbi(ADCSRA, ADSC);
  75 +
  76 + // Le bit sera désactivé à la fin de la conversion
  77 + while(bit_is_set(ADCSRA, ADSC));
  78 +
  79 + // Lire ADCL en premier est obligatoire, sinon l'ADC se bloque
  80 + uint8_t low = ADCL;
  81 +
  82 + // Récupérer le résultat
  83 + return (ADCH << 8) | low;
  84 +}
  85 +
  86 +void main()
  87 +{
  88 + init_serial();
  89 + while(1){
  90 + //send_serial('A');
  91 + Send_msg(analogReadNew(0)*0.0048828125*100);
  92 + sleep(3000);
  93 + }
  94 +
  95 +}
  96 +
... ...