Ardunio 2 analog kontrol

Analog değeri voltaja mı dönüştürmeye çalışıyorsun? Yani 0-4095 arası olan değeri 0-5 arasına mı dönüştürmeye çalışıyorsun
EVET 5 deger atlayarak 0-5v almak normalde dönüstürüyor 0-5v
yani nası anlatsam 0- 4095 5-10-15-20-25- gibi atlayarak okumasını istiyorum
 
Yani yapmak istediğini anlamadım ama az önceki cevabı güncellendim. Atlayarak okumasını istiyorsan map veya ona benzer bi fonksiyonla yapamazsın
 
Kod:
float yeni_adc = fmap(adc, 0, 4095, 0.0, 5.0);

//En alta da bunfonksiyonu gir

float fmap(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }



bu kodlar 0 -1023 ceviriminı degişikmi kullanıyor kullanmamıssın
bu kodlar nasıl calısıyor atlayarak veya carpma hesaplama fonksıyonu kullanarak daha basit okuma fonksıyonu tanımlanırmı


mesela

Kod:
  MCP4725 = (5.0/4096.0) * MCP4725_value;
      MCP4725.setVoltage(MCP4725_value, false);
      delay(250);
      adcValueRead = analogRead(analogVin);
      voltageRead = (adcValueRead * 5.0 )/ 1024.0;
 
Anlayamadım gerçekten ne istediğini benim gönderdiğim 0-4095 arası değeri 0-5 arasına float cinsinden çevirir sadece.
 
Yani yapmak istediğini anlamadım ama az önceki cevabı güncellendim. Atlayarak okumasını istiyorsan map veya ona benzer bi fonksiyonla yapamazsın
tamam anladım peki millis fonksıyonuna bir ornek verirmisin

yukarıdakı kodları mcp4725te dahil millis gecikmesiyle okucak

altı tane bolumde millis ile calısacak delay fonksıyonlarının tamamı olmıcak
alttakı kod gıbı benzer yapmaya calıstım olmadı

ornek unsigned long zaman, z1, z2, z3, z4, z5, z6, ;


zaman =millis ();
rdtx = analogRead(rdtgiris);
if (rdt<= rdtmax )

{ if (zaman -z1 >= 100) ; }
z1=millis

{digitalWrite(pwrled, 1);}
else if ( rdt >= rdtorta )
{digitalWrite(pwrled, 0);}
else
{digitalWrite(pwrled, 1);}
delay (50);
{digitalWrite(pwrled, 0);}

bir bolum icin örnek kod paylasırmısın
 
Yani yapmak istediğini anlamadım ama az önceki cevabı güncellendim. Atlayarak okumasını istiyorsan map veya ona benzer bi fonksiyonla yapamazsın
Kod:
#include <Wire.h>             //wire library
#include <Adafruit_MCP4725.h> // MCP4725 library from adafruit
#define analogVin A0          // Analog voltage input to A0

Adafruit_MCP4725 MCP4725;

void setup(void) {
  Serial.begin(9600);
  MCP4725.begin(0x60); // Default I2C Address of MCP4725 breakout board (sparkfun)   If not try 0x61 or 0x62
 
}

void loop(void) {
 
    uint32_t MCP4725_value;
    int adcValueRead = 0;
    float voltageRead = 0;
    
    float MCP4725_expected_output;
    
  
    for (MCP4725_value = 0; MCP4725_value < 4096; MCP4725_value = MCP4725_value + 15)
    {
      MCP4725_expected_output = (5.0/4096.0) * MCP4725_value;
      MCP4725.setVoltage(MCP4725_value, false);
      delay(250);
      adcValueRead = analogRead(analogVin);
      voltageRead = (adcValueRead * 5.0 )/ 1024.0;
      
      Serial.print("MCP4725 Value: ");
      Serial.print(MCP4725_value);
      
      Serial.print("\tExpected Voltage: ");
      Serial.print(MCP4725_expected_output,3);
      
      Serial.print("\tArduino ADC Value: ");
      Serial.print(adcValueRead);
      
      Serial.print("\tArduino Voltage: ");     
      Serial.println(voltageRead,3);     
    }   
}




yukarıdakı kodu calıstırdım +15 atlayarak sayıyor okuyor +15 +10 yada+ 5 +30 degiştirdim ona gore degişiyor ama potans iş yapmıyor calısır calısmaz 15 atlayarak 4095 kadar sayarak gıdıyor bu kodun geriye dogru gıdenınıde bulmustum
neyse bu kodu gorunce atylama işi olabılecegını dusundum fıkrınızı almak ıstedım
mutlaka bı yolu olmalıdır kodlarda cok detay yok ama aklıma olabılecegi geldi ?



yukarda yazılı kodlar delay kullanıyorum en fazla 100ms gecıkme var delay hep kotuluyorlar ama her kodda delay goruyorum ?
millis olarak kod yazmaya calısıyorum
millis kullanmamızın bı avantajı olurmu ona gore ugramsyayım? tesekurler
 
Bu kod A0 pinini mcp4725 çıkışına bağlarsan onun ürettiği sinyali okumanı sağlar başka bir amacı yok. Sen potansla mcp nin çıkışını mı ayarlamaya çalışıyorsun?
 
bizim gibi ogrenmeye calısanlar ıcın hazır kodları inceliyorum mcp 4725 tum interneetteki lerini biliyosunuzdur bu kodda alıntı ,, en bastakı ilk yazdım kodlara bunları birlestirip kodları anlamaya calısıyorum

pek detaylı bır kod olusturmanızı istemiyorum kod yazmanızı beklemıyorum işin mantını kavramama yardımcı olacaak kucuk oneriler ?
yoğun olma ihtimaliniz yüksek
en azından önemli önerilerinizi yamznız ben bişekilde yapa boza halledicem
 
Kardeş sana yardımcı olmaya çalışıyorum ama sen ne istediğini tam olarak söylemiyorsun. Mcp entegresinin çıkışını mı kontrol etmek istiyorsun. Yukarıda yazılanları okuyorum acaba ben mi anlamadım diye ama birbirinden alakasız şeyler hep. Yardım istiyorsan sana nasıl yardım edebileceğimi söylemelisin.
 
normal calısan kodlarım bu kodlara iki işlem ilave etmeye calısıyorum


Kod:
#include<Wire.h>                   //Include kutuphane ı2 data Wire
#define MCP4725 0X60
unsigned long  adc;
unsigned long  buffer[3];  
unsigned int rdtx=0;
unsigned int rdtmax=20;
unsigned long karsilastir=0;
unsigned int karsmax=260;
byte trp=2; //  tr out:
byte trn=3; //   tr cıkış :
byte kazancled=4; //  led  output:
byte npoutled=5; //   led cıkısı:
byte pwrled=6; //   led  cıkış :
byte incompy = 7; // buton opamp 1-0 gırış:
byte outcompv=8; // ao-a1 karsılastırma cıkış :
byte incompx = 9; // 8 out koprusu 1-0 gırış:
byte setswic=10; //   led cıkısı:

void setup()
         {
pinMode  ( trp, OUTPUT );  // s :
pinMode  ( trn , OUTPUT ); //  s :
pinMode  ( kazancled, OUTPUT );  // s :
pinMode  (npoutled,OUTPUT);  //   sinyal cıkış NPN ve PNP out  :
pinMode  (pwrled,OUTPUT);  //  power ve rdt flaşör   :
pinMode(incompy, INPUT);   //  modlar :
pinMode  ( outcompv , OUTPUT ); //  s :
pinMode(incompx, INPUT);   //  modlar :
pinMode  ( setswic, OUTPUT );  // s :
Wire.begin(0x60);
Wire.setClock (400000);
}
void loop()                    
              {
  karsilastir  = analogRead(A6);   if (karsilastir  <= karsmax )
   {digitalWrite(setswic, 1);   delay (20);}
   else
   {digitalWrite(setswic, 0); delay (22); }                        
             {                      
   adc = analogRead(A7);
   adc = map(adc, 0 ,1023 ,0,4095 )  ;
  buffer[0] = 0b01000000;          
  buffer[1] = adc >> 4;            
  buffer[2] = adc << 4;            
  Wire.beginTransmission (0x60);      
  Wire.write(buffer[0]);          
  Wire.write(buffer[1]);          
  Wire.write(buffer[2]);          
  Wire.endTransmission();
    {delay (20);}
            {
     rdtx = analogRead(A2);
    if (rdtx <= rdtmax )
     {digitalWrite(pwrled, 1);  delay (20);}
     else
    {digitalWrite(pwrled, 0); delay (50);}
     {digitalWrite(pwrled, 1); delay (60);}
                {
   unsigned long compr1 ,compr2 ;
   compr1 = analogRead ( A0) ;
   compr2 = analogRead ( A1) ;
   if (compr1 <= compr2 )
      {digitalWrite (outcompv ,1);  delay(10);}
      else
      {digitalWrite (outcompv ,0);  delay (10);}
       }
    {
bool incompx = digitalRead(7);
  bool incompy = digitalRead(9);
  if (incompx == 1 &&  incompy == 1)
  {digitalWrite(trp, 1);
  digitalWrite(trn, 1);
  digitalWrite(npoutled, 1);   delay (150); }
  else
     {digitalWrite(trp, 0);
     digitalWrite(trn, 0);
     digitalWrite(npoutled, 0);     delay (40); }      
           }
        }
     }
  }





bukodlar millis cevirmek istedim altda yaptım derledı fakat sistem üzerine yukledım calısmadı






Kod:
#include<Wire.h>                   //Include kutuphane ı2 data Wire
#define MCP4725 0X60
unsigned long  adc;
unsigned long  buffer[3];  
unsigned int rdtx=0;
unsigned int rdtmax=20;
unsigned long karsilastir=0;
unsigned int karsmax=260;

unsigned long  zaman1=0,zaman2=0,zaman3=0,zaman4=0,zaman5=0;

byte trp=2; //  tr out:
byte trn=3; //   tr cıkış :
byte kazancled=4; //  led  output:
byte npoutled=5; //   led cıkısı:
byte pwrled=6; //   led  cıkış :
byte incompy = 7; // buton opamp 1-0 gırış:
byte outcompv=8; // ao-a1 karsılastırma cıkış :
byte incompx = 9; // 8 out koprusu 1-0 gırış:
byte setswic=10; //   led cıkısı:

void setup()
         {
pinMode  ( trp, OUTPUT );  // s :
pinMode  ( trn , OUTPUT ); //  s :
pinMode  ( kazancled, OUTPUT );  // s :
pinMode  (npoutled,OUTPUT);  //   sinyal cıkış NPN ve PNP out  :
pinMode  (pwrled,OUTPUT);  //  power ve rdt flaşör   :
pinMode(incompy, INPUT);   //  modlar :
pinMode  ( outcompv , OUTPUT ); //  s :
pinMode(incompx, INPUT);   //  modlar :
pinMode  ( setswic, OUTPUT );  // s :
Wire.begin(0x60);
Wire.setClock (400000);
}
void loop()                    
           
               {   if ( millis () - zaman1 >= 100)  
          {
   karsilastir  = analogRead(A6);
   if (karsilastir  <= karsmax )
    {digitalWrite(setswic, !digitalRead(setswic)); }
         zaman1 = millis ();                                
             
          {
  { if (millis () -zaman2 >=100)
   adc = analogRead(A7);
   adc = map(adc, 0 ,1023 ,0,4095 )  ;
  buffer[0] = 0b01000000;          
  buffer[1] = adc >> 4;            
  buffer[2] = adc << 4;            
  Wire.beginTransmission (0x60);      
  Wire.write(buffer[0]);          
  Wire.write(buffer[1]);          
  Wire.write(buffer[2]);          
  Wire.endTransmission();
    zaman2=millis();
         
       

  {
     rdtx = analogRead(A2);
    if (rdtx <= rdtmax )
          {  if (millis()-zaman3 >= 100)  
    {digitalWrite(pwrled, !digitalRead( pwrled)); }
     else
     {digitalWrite(pwrled, !digitalRead( pwrled)); }
     zaman3=millis();
               
                    {

     unsigned long compr1 ,compr2 ;
   compr1 = analogRead ( A0) ;
   compr2 = analogRead ( A1) ;
   if (compr1 <= compr2 )
      {  if (millis()-zaman4 >= 100)
            {digitalWrite(outcompv, !digitalRead(outcompv )); }
        zaman4=millis();
       
         
 
{
bool incompx = digitalRead(7);
  bool incompy = digitalRead(9);
  if (incompx == 1 &&  incompy == 1)

        {  if (millis()-zaman5 >= 100)
    {digitalWrite(trp, !digitalRead(trp )); }
    {digitalWrite(trn, !digitalRead(trn )); }
    {digitalWrite(npoutled, !digitalRead( npoutled )); }
     zaman5=millis();
         
         
        }}}}}}}}
     }
  }
Kod:





bu kodlarla iki şey yapamak istıyorum

1ci millis kontrol etmek yaptım kod calısmadı

2ci olursa mcp4725 cıkışını bölmek istiyorum yada sizin deyımınızle kontrol etmek 4095/5 = 819 santigırat cevrimine denk sayıyorum
burdaki 5 degeri 0,,,,,,,4095 arasındaki adım degerleri
5 volt la alakalı deger degıl
bu kadar bitti

tesekurler
 
Son düzenleme:
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…