float p; //int p; int m; int n; int plot; int val; int l; //Sinussignal signed char S[400]= {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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 99,99}; //Dreiecksignal int D[16]={0,137,275,412,550,412,275,137,0,-137,-275,-412,-550,-412,-275,-137}; //int D[8]={0,275,550,275,0,-275,-550,-275}; //10kHz void setup(){ pinMode(5,OUTPUT); pinMode(6,OUTPUT); pinMode(A0,INPUT); //Timer1 instalisieren TCCR1A = 0; //Register definiert zurücksetzten TCCR1B = 0; //zuerst Register definiert zurücksetzen TCNT1 = 0; //Zählerwert zurücksetzten OCR1A = 199; //Timer1 80kHZ einstellen TCCR1B |= (1 << WGM12); //CTC mode //TCCR1B |= (0 << CS12) | (0 << CS11) | (1 >> CS10); //kein Prescale TCCR1B |= (1 << CS10); // clk/1 prescale 1024 TIMSK1 |= (1 << OCIE1A); //Aktivieren des Timer-Vergleichs-Interrupt } ISR(TIMER1_COMPA_vect){ //Interrupt //Signalvergleich Sinus Positiv if(l<800) { if (D[n] < val*S[m]) { //Dreiecksignal kleiner als Sinussignal bitSet(PORTC, 6); //Pin 5 HIGH } else { //Dreiecksignal größer als Sinussignal bitClear(PORTC, 6); //Pin 5 LOW } if (D[n] < val*S[m]) { //Dreiecksignal kleiner als Sinussignal bitSet(PORTD, 7); //Pin 6 HIGH } else { //Dreiecksignal größer als Sinussignal bitClear(PORTD, 7); //Pin 6 LOW } } //Signalvergleich Sinus Negativ if(l>800) { if (D[n] < val*-S[m]) { //Dreiecksignal kleiner als Sinussignal bitSet(PORTC, 6); //Pin 5 HIGH } else { //Dreiecksignal größer als Sinussignal bitClear(PORTC, 6); //Pin 5 LOW } if (D[n] < val*-S[m]) { //Dreiecksignal kleiner als Sinussignal bitSet(PORTD, 7); //Pin 6 HIGH } else { //Dreiecksignal größer als Sinussignal bitClear(PORTD, 7); //Pin 6 LOW } } //Sinusarray hochrechnen l=l+1; if(l<400){ m=m+1; } if(l>400 && l<800){ m=m-1; } if(l>800 && l<1200){ m=m+1; } if(l>1200 && l<1600){ m=m-1; } if(l>1599){ l=0; m=0; } //Dreieckarray hochrechnen n=n+1; if(n>15) n=0; } void loop() { p = analogRead(A0); //Potiwert 0 bis 10kΩ einlesemn plot = map(p, 0, +500, 1, 5); //Potiwert in 0 bis 500 in 1 bis 5 wandeln // delay(300); val=plot; //Werte von 1 bis 5 }