Arduino 7 LED ve farklı Voltajlar

Başlatan Epsilon, 12 Mayıs 2019, 14:02:53

Epsilon

Merhaba
Arduruinoyu yeni öğreniyorum .
Yapmak istediğim Arduino Nano da :
Bir buton,7 LED ,LDR olacak.Butona her basışımda yanyana 7 LED sırayla sağa doğru kayarak sadece birer LED yanacak,bu çıkış pininden ne kadar yüksek voltajın çıktığının göstergesi olacak.PWM frekansıda 50 hz olacak .

Diğer istediğim ise LDR ışık algıladığında bu önceden ayarladığım voltaj çıkış pininden çıkacak

Butona 1.basışımda soldaki ilk LED yanacak çıkış pinindende (9.Pin) 50 herzlik 0,5 volt luk voltaj çıkacak.İkinci basışımda ,yanındaki 2.LED yanacak voltaj 1 volt olacak ,bu şekilde her butona basış yandaki LED i yakıp voltajı 0,5 artıracak 8.basış ta bütün LED ler sönecek.Bu şekilde döngü olacak

Ben bu programın butona her basışta 7 LEDi sıra ile yakmayı 8.basışta hepsini kapatmayı  diğer bir programda da 35 (veya 50) herz lik istediğim voltajı üretme kısımlarını ayrı ayrı çalıştırdım.
 
7 LEDi sırayla yakıp 8.basışta LED leri kapatan program
#include <PWM.h>//eklendi
int led = 9;   // eklendi
int32_t frequency = 50; //eklendi frequency (in Hz)

#define button 3

#define LED1 5
#define LED2 6
#define LED3 7

#define LED4 8
#define LED5 10
#define LED6 11
#define LED7 12

int state = 0;
int old=0;
int buttonPoll=0;
void setup() {
//InitTimersSafe(); 

  //sets the frequency for the specified pin
 // bool success = SetPinFrequencySafe(led, frequency);
  
  //if the pin frequency was set successfully, turn pin 13 on
//  if(success) {
    pinMode(13, OUTPUT);
    digitalWrite(13, HIGH); 
  // put your setup code here, to run once:
pinMode (button,INPUT);
pinMode (LED1,OUTPUT);
pinMode (LED2,OUTPUT);
pinMode (LED3,OUTPUT);

pinMode (LED4,OUTPUT);
pinMode (LED5,OUTPUT);
pinMode (LED6,OUTPUT);
pinMode (LED7,OUTPUT);

digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
digitalWrite(LED3,LOW);

digitalWrite(LED4,LOW);
digitalWrite(LED5,LOW);
digitalWrite(LED6,LOW);
digitalWrite(LED6,LOW);

}

void loop() {
 buttonPoll =digitalRead(button);
 if (buttonPoll ==1){
  delay(50);
  buttonPoll=digitalRead(button);
  if (buttonPoll ==0){
    state =old+1;
  }}
  else{
    delay(100);
  }
  switch (state){
    case 1:
    digitalWrite(LED1,HIGH);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);
    digitalWrite(LED4,LOW);
    digitalWrite(LED5,LOW);
    digitalWrite(LED6,LOW);
    digitalWrite(LED7,LOW);
     pwmWrite(led, 27);

    old=state;
    break;
    case 2:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,HIGH);
    digitalWrite(LED3,LOW);

    digitalWrite(LED4,LOW);
    digitalWrite(LED5,LOW);
    digitalWrite(LED6,LOW);
    digitalWrite(LED7,LOW);
    pwmWrite(led, 44);
    old=state;
    break;

    case 3:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,HIGH);
    digitalWrite(LED4,LOW);
    digitalWrite(LED5,LOW);
    digitalWrite(LED6,LOW);
    digitalWrite(LED7,LOW);
     pwmWrite(led, 48);   
    old=state;
    break;
   
   case 4:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);
    digitalWrite(LED4,HIGH);
    digitalWrite(LED5,LOW);
    digitalWrite(LED6,LOW);
    digitalWrite(LED7,LOW);
   pwmWrite(led, 52);
   old=state;
    break;
    
   
   case 5:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);
    digitalWrite(LED4,LOW);
    digitalWrite(LED5,HIGH);
    digitalWrite(LED6,LOW);
    digitalWrite(LED7,LOW);
   pwmWrite(led, 58);
   old=state;
    break;
   
     case 6:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);
    digitalWrite(LED4,LOW);
    digitalWrite(LED5,LOW);
    digitalWrite(LED6,HIGH);
    digitalWrite(LED7,LOW);
  pwmWrite(led, 62);
   
   old=state;
    break;

 case 7:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);
    digitalWrite(LED4,LOW);
    digitalWrite(LED5,LOW);
    digitalWrite(LED6,LOW);
    digitalWrite(LED7,HIGH);
   pwmWrite(led, 78);
   old=state;
    break;
       
   default:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);

    digitalWrite(LED4,LOW);
    digitalWrite(LED5,LOW);
    digitalWrite(LED6,LOW);
    digitalWrite(LED7,LOW);
   
    old=0;
     break;
  }
}

Bu da 50 herzlik pwm
#include <PWM.h>

//use pin 11 on the Mega instead, otherwise there is a frequency cap at 31 Hz
int led = 9;                // the pin that the LED is attached to

int32_t frequency = 150; //frequency (in Hz)

void setup()
{
  //initialize all timers except for 0, to save time keeping functions
  InitTimersSafe(); 

  //sets the frequency for the specified pin
  bool success = SetPinFrequencySafe(led, frequency);
  
  //if the pin frequency was set successfully, turn pin 13 on
  if(success) {
    pinMode(13, OUTPUT);
    digitalWrite(13, HIGH);    
  }
}

void loop()

İkisinin bir araya getirdiğim program
#include <PWM.h>//eklendi
int led = 9;   // eklendi
int32_t frequency = 50; //eklendi frequency (in Hz)

#define button 3

#define LED1 5
#define LED2 6
#define LED3 7

#define LED4 8
#define LED5 10
#define LED6 11
#define LED7 12

int state = 0;
int old=0;
int buttonPoll=0;
void setup() {
//InitTimersSafe(); 

  //sets the frequency for the specified pin
 // bool success = SetPinFrequencySafe(led, frequency);
  
  //if the pin frequency was set successfully, turn pin 13 on
//  if(success) {
    pinMode(13, OUTPUT);
    digitalWrite(13, HIGH); 
  // put your setup code here, to run once:
pinMode (button,INPUT);
pinMode (LED1,OUTPUT);
pinMode (LED2,OUTPUT);
pinMode (LED3,OUTPUT);

pinMode (LED4,OUTPUT);
pinMode (LED5,OUTPUT);
pinMode (LED6,OUTPUT);
pinMode (LED7,OUTPUT);

digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
digitalWrite(LED3,LOW);

digitalWrite(LED4,LOW);
digitalWrite(LED5,LOW);
digitalWrite(LED6,LOW);
digitalWrite(LED6,LOW);

}

void loop() {
 buttonPoll =digitalRead(button);
 if (buttonPoll ==1){
  delay(50);
  buttonPoll=digitalRead(button);
  if (buttonPoll ==0){
    state =old+1;
  }}
  else{
    delay(100);
  }
  switch (state){
    case 1:
    digitalWrite(LED1,HIGH);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);
    digitalWrite(LED4,LOW);
    digitalWrite(LED5,LOW);
    digitalWrite(LED6,LOW);
    digitalWrite(LED7,LOW);
     pwmWrite(led, 27);

    old=state;
    break;
    case 2:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,HIGH);
    digitalWrite(LED3,LOW);

    digitalWrite(LED4,LOW);
    digitalWrite(LED5,LOW);
    digitalWrite(LED6,LOW);
    digitalWrite(LED7,LOW);
    pwmWrite(led, 44);
    old=state;
    break;

    case 3:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,HIGH);
    digitalWrite(LED4,LOW);
    digitalWrite(LED5,LOW);
    digitalWrite(LED6,LOW);
    digitalWrite(LED7,LOW);
     pwmWrite(led, 48);   
    old=state;
    break;
   
   case 4:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);
    digitalWrite(LED4,HIGH);
    digitalWrite(LED5,LOW);
    digitalWrite(LED6,LOW);
    digitalWrite(LED7,LOW);
   pwmWrite(led, 52);
   old=state;
    break;
    
   
   case 5:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);
    digitalWrite(LED4,LOW);
    digitalWrite(LED5,HIGH);
    digitalWrite(LED6,LOW);
    digitalWrite(LED7,LOW);
   pwmWrite(led, 58);
   old=state;
    break;
   
     case 6:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);
    digitalWrite(LED4,LOW);
    digitalWrite(LED5,LOW);
    digitalWrite(LED6,HIGH);
    digitalWrite(LED7,LOW);
  pwmWrite(led, 62);
   
   old=state;
    break;

 case 7:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);
    digitalWrite(LED4,LOW);
    digitalWrite(LED5,LOW);
    digitalWrite(LED6,LOW);
    digitalWrite(LED7,HIGH);
   pwmWrite(led, 78);
   old=state;
    break;
       
   default:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);

    digitalWrite(LED4,LOW);
    digitalWrite(LED5,LOW);
    digitalWrite(LED6,LOW);
    digitalWrite(LED7,LOW);
   
    old=0;
     break;
  }
}

Program önceden süslü parantez ile ilgili hata veriyordu şimdi ise derlediğimde bir hata vermedi .Bu programda hatalar nelerdir sizce
Gerek olmayan kod satırları vardır emin olamadığım için silemedim .
Yardımlarınız için şimdiden teşekkürler

mehmet

#1
Pwm kütüphanesine gerek yok.
analogWrite(çıkış, seviye);
şeklinde yazmak yeterli.

Ek:
Ayrıca söylediklerinizden; pwm den
dc gerilim üreteceksiniz anlıyorum.
Yoksa pwm çıkışını direkt dc olarak mı
ölçüyorsunuz?
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

Epsilon

#2
@mehmet hocam pwm den istediğim voltajları üretiyorum .Frekansıda dediğim gibi 50 hz olacak
teşekkürler cevap için.

mehmet

Bir filtre yoksa pwm ile
dc gerilim üretmiş olmazsınız.
Ayrıca dc gerilimden bahsederken
frekans söz konusu olamaz.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

Epsilon