ViertelKurve.ino
1 | float p;
| 2 | //int p;
| 3 | int m;
| 4 | int n;
| 5 | int plot;
| 6 | int val;
| 7 | int l;
| 8 |
| 9 | //Sinussignal
| 10 | signed char S[400]=
| 11 | {0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,10,10,10,11,11,12,12,12,13,13,14,14,14,15,15,15,16,16,17,17,17,18,
| 12 | 18,19,19,19,20,20,20,21,21,22,22,22,23,23,23,24,24,25,25,25,26,26,26,27,27,28,28,28,29,29,29,30,30,31,31,31,32,32,32,
| 13 | 33,33,34,34,34,35,35,35,36,36,36,37,37,38,38,38,39,39,39,40,40,40,41,41,41,42,42,43,43,43,44,44,44,45,45,45,46,46,46,
| 14 | 47,47,47,48,48,48,49,49,49,50,50,50,51,51,51,52,52,52,53,53,53,54,54,54,55,55,55,56,56,56,57,57,57,58,58,58,59,59,59,
| 15 | 59,60,60,60,61,61,61,62,62,62,63,63,63,63,64,64,64,65,65,65,65,66,66,66,67,67,67,67,68,68,68,69,69,69,69,70,70,70,71,
| 16 | 71,71,71,72,72,72,72,73,73,73,73,74,74,74,75,75,75,75,76,76,76,76,77,77,77,77,78,78,78,78,78,79,79,79,79,80,80,80,80,
| 17 | 81,81,81,81,81,82,82,82,82,83,83,83,83,83,84,84,84,84,84,85,85,85,85,85,86,86,86,86,86,87,87,87,87,87,87,88,88,88,88,
| 18 | 88,89,89,89,89,89,89,90,90,90,90,90,90,91,91,91,91,91,91,91,92,92,92,92,92,92,92,93,93,93,93,93,93,93,94,94,94,94,94,
| 19 | 94,94,94,95,95,95,95,95,95,95,95,95,95,96,96,96,96,96,96,96,96,96,96,97,97,97,97,97,97,97,97,97,97,97,97,97,98,98,98,
| 20 | 98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,
| 21 | 99,99};
| 22 |
| 23 | //Dreiecksignal
| 24 | int D[16]={0,137,275,412,550,412,275,137,0,-137,-275,-412,-550,-412,-275,-137};
| 25 | //int D[8]={0,275,550,275,0,-275,-550,-275}; //10kHz
| 26 |
| 27 |
| 28 | void setup(){
| 29 | pinMode(5,OUTPUT);
| 30 | pinMode(6,OUTPUT);
| 31 | pinMode(A0,INPUT);
| 32 |
| 33 | //Timer1 instalisieren
| 34 | TCCR1A = 0; //Register definiert zurücksetzten
| 35 | TCCR1B = 0; //zuerst Register definiert zurücksetzen
| 36 | TCNT1 = 0; //Zählerwert zurücksetzten
| 37 |
| 38 | OCR1A = 199; //Timer1 80kHZ einstellen
| 39 | TCCR1B |= (1 << WGM12); //CTC mode
| 40 | //TCCR1B |= (0 << CS12) | (0 << CS11) | (1 >> CS10); //kein Prescale
| 41 | TCCR1B |= (1 << CS10); // clk/1 prescale 1024
| 42 | TIMSK1 |= (1 << OCIE1A); //Aktivieren des Timer-Vergleichs-Interrupt
| 43 | }
| 44 |
| 45 | ISR(TIMER1_COMPA_vect){ //Interrupt
| 46 |
| 47 | //Signalvergleich Sinus Positiv
| 48 | if(l<800) {
| 49 | if (D[n] < val*S[m]) { //Dreiecksignal kleiner als Sinussignal
| 50 | bitSet(PORTC, 6); //Pin 5 HIGH
| 51 | }
| 52 | else { //Dreiecksignal größer als Sinussignal
| 53 | bitClear(PORTC, 6); //Pin 5 LOW
| 54 | }
| 55 | if (D[n] < val*S[m]) { //Dreiecksignal kleiner als Sinussignal
| 56 | bitSet(PORTD, 7); //Pin 6 HIGH
| 57 | }
| 58 | else { //Dreiecksignal größer als Sinussignal
| 59 | bitClear(PORTD, 7); //Pin 6 LOW
| 60 | }
| 61 | }
| 62 |
| 63 | //Signalvergleich Sinus Negativ
| 64 | if(l>800) {
| 65 | if (D[n] < val*-S[m]) { //Dreiecksignal kleiner als Sinussignal
| 66 | bitSet(PORTC, 6); //Pin 5 HIGH
| 67 | }
| 68 | else { //Dreiecksignal größer als Sinussignal
| 69 | bitClear(PORTC, 6); //Pin 5 LOW
| 70 | }
| 71 | if (D[n] < val*-S[m]) { //Dreiecksignal kleiner als Sinussignal
| 72 | bitSet(PORTD, 7); //Pin 6 HIGH
| 73 | }
| 74 | else { //Dreiecksignal größer als Sinussignal
| 75 | bitClear(PORTD, 7); //Pin 6 LOW
| 76 | }
| 77 | }
| 78 |
| 79 | //Sinusarray hochrechnen
| 80 | l=l+1;
| 81 |
| 82 | if(l<400){
| 83 | m=m+1;
| 84 | }
| 85 |
| 86 | if(l>400 && l<800){
| 87 | m=m-1;
| 88 | }
| 89 |
| 90 | if(l>800 && l<1200){
| 91 | m=m+1;
| 92 | }
| 93 |
| 94 | if(l>1200 && l<1600){
| 95 | m=m-1;
| 96 | }
| 97 |
| 98 | if(l>1599){
| 99 | l=0;
| 100 | m=0;
| 101 | }
| 102 |
| 103 | //Dreieckarray hochrechnen
| 104 | n=n+1;
| 105 | if(n>15)
| 106 | n=0;
| 107 | }
| 108 |
| 109 | void loop() {
| 110 | p = analogRead(A0); //Potiwert 0 bis 10kΩ einlesemn
| 111 | plot = map(p, 0, +500, 1, 5); //Potiwert in 0 bis 500 in 1 bis 5 wandeln
| 112 | //
| 113 | delay(300);
| 114 | val=plot; //Werte von 1 bis 5
| 115 | }
|
|