Facebook
From Mammoth Leopard, 4 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 136
  1. #include <AVR/io.h>
  2. #include <AVR/interrupt.h>
  3. #include <util/delay.h>
  4.  
  5. #define P4 PC0
  6. #define P3 PC1
  7. #define P2 PC2
  8. #define P1 PC3
  9. #define L1 PC4
  10. #define L2 PC5
  11. #define L3 20U
  12. #define L4 21U
  13. #define L_PWM PD6
  14. #define P_PWM PB2
  15. #define PM PD0
  16. #define LM PD5
  17.  
  18. uint8_t Tablica_czujnikow[8] = { P4,P3,P2,P1,L1,L2,L3,L4 };
  19. int8_t Tablica_wag[8] = { 10,7,3,1,-1,-3,-7,10 };
  20. int8_t analog2digital(int8_t Pin);
  21. float wartosc_odczytana(int8_t tab_czuj[8], int8_t tab_wag[8])
  22. {
  23.         int8_t odczyt = 0;
  24.         int8_t il_czuj = 0;
  25.         for (int8_t i = 0; i < 8; i++)
  26.         {
  27.                 if (analog2digital(tab_czuj[i]) < 150)
  28.                 {
  29.                         il_czuj++;
  30.                         odczyt += tab_wag[i];
  31.                 }
  32.         }
  33.         if (il_czuj = 0) return 0;
  34.         else
  35.         {
  36.                 return odczyt / il_czuj;
  37.         }
  38. }
  39.  
  40. int main(void)
  41. {
  42.         Serial.begin(9600);
  43.         DDRC &= ~(1 << P4);
  44.         DDRC &= ~(1 << P3);
  45.         DDRC &= ~(1 << P2);
  46.         DDRC &= ~(1 << P1);
  47.         DDRC &= ~(1 << L1);
  48.         DDRC &= ~(1 << L2);
  49.         DDRC &= ~(1 << L3);
  50.         DDRC &= ~(1 << L4);
  51.         // Silnik
  52.         DDRD |= (1 << L_PWM); // lewy pwm
  53.         DDRB |= (1 << P_PWM); // prawy pwm
  54.         DDRB |= (1 << PM); // prawy silnik przod
  55.         DDRD |= (1 << LM); // lewy silnik przod
  56.         // ADC
  57.         ADCSRA |= ((1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0));
  58.         ADMUX |= (1 << REFS0); // poczytaj note
  59.         ADCSRA |= (1 << ADEN);
  60.         ADCSRA |= (1 << ADSC);
  61.         while (1)
  62.         {
  63.                 for (int i = 0; i < 8; i++)
  64.                 {
  65.                         Serial.print("Czujnik: " + i);
  66.                         Serial.println(analog2digital(Tablica_czujnikow[i]));
  67.                         delay(200);
  68.                 }
  69.         }
  70. }
  71. int8_t analog2digital(int8_t Pin)
  72. {
  73.         ADMUX &= 0xF0;
  74.         ADMUX |= Pin;
  75.         ADCSRA |= (1 << ADSC);
  76.         ADCSRA |= (1 << ADSC);
  77.         while (ADCSRA & (1 << ADSC));
  78.         return ADCW;
  79. }
  80.  
  81.