2016-05-21 12 views
-1

Ich bin ein Anfänger in C-Programmierung und habe einige Probleme mit dem folgenden Code:Atmel Studio AtTiny104 - Einfach Code

Mein Projekt ist einfach: Während Eingänge i2 hoch oder i3 hoch oder i4 (Analogwert) Dann Ausgang o1 hoch Else Wenn i1 hoch ist Dann o1 niedrig Else o1 hoch ist

Mein Code:

#define F_CPU 8000000UL 
#include <avr/io.h> 
#include <util/delay.h> 
#include "iomacros.h" 

int main(void) { 

    // Change to 8MHz clock speed (Clock Division = 1) 
    CCP = 0xD8; 
    CLKPSR = 0x00; 

    // Define pins 
    #define OUTPUT_1 1,A 
    #define INPUT_1 2,A 
    #define INPUT_2 3,A 
    #define INPUT_3 4,A 

    // Set up the ADC 
    ADCSRA |= (1 << ADEN) | (1 << ADPS2); // Enable ADC = 16 
    ADMUX |= (1 << MUX1) | (1 << MUX0); // Connect ADC3 input on PA6 
    DIDR0 |= (1 << ADC3D); // Power saving feature 

    out(OUTPUT_1); // set OUTPUT_1 as an output 

    inp(INPUT_1); // set INPUT_1 as an input 
    pullup(INPUT_1); // activate pullup for INPUT_1 

    inp(INPUT_2); // set INPUT_1 as an input 
    pullup(INPUT_2); // activate pullup for INPUT_2 

    inp(INPUT_3); // set INPUT_1 as an input 
    pullup(INPUT_3); // activate pullup for INPUT_3 
    on(OUTPUT_1); 

    // forever loop 
    while (1) { 

     ADCSRA |= (1 << ADSC); // start single conversion 
     while (ADCSRA & (1 << ADSC)) {} // wait until conversion is done 
     uint16_t INPUT_4 = ADCL | (ADCH << 8); // Store in INPUT_4 

     if (get(INPUT_2) == 1 || get(INPUT_3) == 1 || INPUT_4 > 800) { 
      on(OUTPUT_1); 
      } else { 
      if (get(INPUT_1) == 1) { 
       off(OUTPUT_1); 
       } else { 
       on(OUTPUT_1); 
      } 
     } 
     _delay_ms(100); 
    } 

} 

Aus irgendeinem Grund deaktiviert i1 o1, wenn hoch, auch wenn if (get (INPUT_2) == 1 ||) get (INPUT_3) == 1 || INPUT_4> 800) ist wahr. Einige Hilfe geschätzt. Vielen Dank!

+0

Shtap mit den zusammengesetzten booleschen Ausdrücken. Verwenden Sie für die Ergebnisse von 'get (INPUT_2) == 1' usw. 'temp booleans' usw. Dann ODER temps zusammen in Ihrer if-Anweisung. Dann laufe unter deinem Debugger. Dann sehen Sie, welcher boolesche/s ist/sind wahr, das sollte nicht sein. –

Antwort

0

gibt es eine fehlende Klammer in dieser Zeile:

if (get (INPUT_1) == 1 {

sein sollte:

if (get (INPUT_1) == 1) {

Ihr Code ist nicht richtig eingerückt, Fehler sind nicht einfach zu d etekt.

+0

Ich bin überrascht, dass es kompiliert :( –

+0

Dies ist die letzte Iteration des Codes, aber ich habe vergessen, diese Klammer hinzuzufügen, bevor ich den Code hier die Klammer war dort und der Code kompiliert ohne Fehler oder Warnungen, ich kann Flash it. Das Problem ist, dass selbst wenn i2, i3, i4 hoch ist, i1 immer noch deaktiviert o1 wenn hoch – BioGenX

+0

Auch welche Art von Ansatz werden Sie empfehlen.Dieses Setup wird fast 20 Stunden jeden Tag laufen – BioGenX

Verwandte Themen