Commit b64d3ca7571ca65fe43bdfdae58d005f2e99b7a7

Authored by lahouass
1 parent 27187418

Envoi de la temperature vers la raspberry (fonctionnel)

Showing 1 changed file with 115 additions and 0 deletions   Show diff stats
Tuno_to_rpi.c 0 → 100644
... ... @@ -0,0 +1,115 @@
  1 +#include <avr/io.h> // for the input/output register
  2 +#include <avr/interrupt.h>
  3 +#include <util/delay.h>
  4 +#include <string.h>
  5 +#include <stdio.h>
  6 +#include <stdlib.h>
  7 +#define PRESCALER 1024
  8 +#define TIME_SLOT 20
  9 +#define BAUDRATE 103
  10 +
  11 +#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
  12 +#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
  13 +
  14 +char Donnee[24];
  15 +float temp;
  16 +
  17 +void init_serial(void)
  18 +{
  19 + /* ACHTUNG : we suppose UBRR value < 0xff */
  20 + /* Not true in all case */
  21 + uint8_t baudrate = BAUDRATE;
  22 + /* Set baud rate */
  23 + UBRR0H = 0;
  24 + UBRR0L = baudrate;
  25 + /* Enable transmitter *///task_led_red();
  26 + //task_send_serial('A');
  27 + UCSR0B = (1<<TXEN0);
  28 + /* Set frame format */
  29 + UCSR0C = 0x06;
  30 +
  31 +}
  32 +
  33 +void send_serial(unsigned char c)
  34 +{
  35 + loop_until_bit_is_set(UCSR0A, UDRE0);
  36 + UDR0 = c;
  37 +}
  38 +
  39 +
  40 +void send_msg2(char Donnee[]){
  41 +
  42 + while (( UCSR0A & (1<<UDRE0)) == 0){};
  43 +
  44 + for (int i = 0; i < strlen(Donnee); i++){
  45 + while (( UCSR0A & (1<<UDRE0)) == 0){};
  46 + UDR0 = Donnee[i];
  47 + if (i == (strlen(Donnee) - 1)){
  48 + send_serial('\n');
  49 + send_serial('\r');
  50 + }
  51 + }
  52 +}
  53 +
  54 +void send_msg(char Donnee[]){
  55 + int i=0;
  56 + for(i=0; i<strlen(Donnee); i++){
  57 + if (i==strlen(Donnee)-1){
  58 + send_serial(Donnee[i]);
  59 + send_serial('\n');
  60 + send_serial('\r');
  61 + }
  62 + else{
  63 + send_serial(Donnee[i]);
  64 + }
  65 + _delay_ms(100);
  66 + }
  67 +}
  68 +
  69 +
  70 +// équivalent de analogueRead()
  71 +int analogReadNew(uint8_t pin) {
  72 + /*
  73 + // Définition de la référence de tension
  74 + ADMUX |= (1 << REFS0);
  75 + // On sélectionne notre pin
  76 + ADMUX |= pin & 0x07;
  77 +
  78 + // On lance la conversion
  79 + sbi(ADCSRA, ADSC);
  80 +
  81 + // Le bit sera désactivé à la fin de la conversion
  82 + while(bit_is_set(ADCSRA, ADSC));
  83 +
  84 + // Lire ADCL en premier est obligatoire, sinon l'ADC se bloque
  85 + uint8_t low = ADCL;
  86 +
  87 + // Récupérer le résultat
  88 + return ((ADCH << 8) | low);
  89 + */
  90 + ADCSRA |= (1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
  91 + ADMUX |= (1<<REFS0)|(1<<ADLAR);
  92 + ADMUX = (ADMUX&0xf0)|pin;
  93 + ADCSRA |= (1<<ADEN);
  94 +
  95 + ADCSRA |= (1<<ADSC);
  96 + while(bit_is_set(ADCSRA, ADSC));
  97 + return ADCH;
  98 +}
  99 +
  100 +int main()
  101 +{
  102 + int reading;
  103 + init_serial();
  104 + while(1){
  105 + reading=analogReadNew(0);
  106 + temp = reading * 1.9607843;
  107 + dtostrf(temp, 4, 1, Donnee);
  108 + send_serial('T');
  109 + send_serial('=');
  110 + send_msg2(Donnee);
  111 + _delay_ms(2000);
  112 + }
  113 + return 0;
  114 +}
  115 +
... ...