2016-05-21 2 views
-1

私はCプログラミングの初心者ですし、次のコードといくつかの問題を抱えて:アトメルメーカーAtTiny104 - シンプルなコード

私のプロジェクトは単純です: 入力がハイまたはi3の高またはI4(アナログ値)をI2ながら< 700 i1が が続いO1が エルスO1が高い低い高い場合 その後、出力o1が エルス高いです

マイコード:

#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); 
    } 

} 

何らかの理由で、if(get(INPUT_2)== 1 || get(INPUT_3)== 1 || INPUT_4> 800)は真です。助けてくれた人もいます。ありがとうございました!

場合(取得(INPUT_1)== 1 {

あるべき:

+0

化合物のブール式を使ったShtap。 'get(INPUT_2)== 1'などの結果には、tempブール値を使用します。次に、if文でtempsを一緒に使用します。次に、デバッガで実行します。それから、真実ではないはずのブール値を見てください。 –

答えて

0

この行の欠落括弧ある

は、IF(取得(INPUT_1) == 1){

あなたのコードは適切にインデントされていません。エラーは簡単ではありませんエテクト。

+0

私はそれがコンパイルされて驚いています:( –

+0

これはコードの最後の反復ですが、ここでコードを投稿する前にその括弧を追加するのを忘れてしまったので、括弧があり、エラーや警告なしでコードがコンパイルされます。問題は、i2、i3、i4が高い場合でも、高い場合にはi1でO1を無効にすることです。 – BioGenX

+0

また、どのような方法をお勧めしますか?この設定は毎日約20時間実行されます – BioGenX

関連する問題