Uzay Gemisi Operatörü – Üçlü Karşılaştırıcı (<=>) C++20

229 Kişi Okudu

Uzay Gemisi Operatörü Nedir?

Cpp 2020 ile gelen yeni özelliklerden bir tanesi de üçlü operatördür, bu operatöre uzay gemisine benzediği için uzay gemisi operatörü de denir. Uzay gemisi operatörü ile üçlü ve daha fazla karşılaştırmalar yapılabilmektedir. Klasik olarak == operatörünü ele alalım, bu operatör kullanıldığında true veya false değerlerinden biri dönecekti, ancak üçlü operatör ile karşılaştırmanın sonucundan daha fazla bilgi edinme şansı ediniyoruz.

Açıklama ve Örnekler

Bu operatör bool olarak true veya false tiplerini dönmez, aksine enum tipleri dönebilir. Eğer karşılaştırma sayısal bir tip için yapılacaksa;

Okumaya devam et Uzay Gemisi Operatörü – Üçlü Karşılaştırıcı (<=>) C++20

Doxygen Kullanımı

395 Kişi Okudu

Yazılım projelerinde dokümantasyon ihmal edilse de dokümantasyon gerçek bir ihtiyaçtır. 🙂

Yazılım geliştirici kendi yazdığı koda dahi zaman geçtikçe yabancılaşabiliyor. Sonradan katılan ekip üyelerinin projeye hızlı bir şekilde adapte olabilmesi ve projeyi doğru anlaması büyük önem taşımaktadır. 🤔🤔

Her iki sorununda çözümü hızlı ve basittir. Öncelikle projede yazılan koda yorum satırları eklemek daha sonra DOXYGEN gibi yazılan yorum satırlarını alarak web sayfası temelli anlaşılması kolay çıktılara dönüştürmeyi sağlayan yazılımlar kullanılabilir. 🤖🐱‍🏍

Bu tek videodan oluşan eğitim tüm yazılım geliştiricilere hitap etmektedir ve içerik olarak da yazılım geliştirirken dokümantasyon ve yorum satırlarının önemine vurgu yapılmıştır. 👍👍

Sizlere temel olarak bir C++ kodu üzerinde yazılan yorum yorum satırlarını nasıl web sayfası temelli anlaşılması kolay dokümana dönüştürülebileceğini anlatmaya çalıştım, umarım faydalı olur.👨‍💻☺👋 İzleyip vakit ayırdığınız için teşekkür ederi. Başarılar ve iyi çalışmalar diliyorum.

#doxygen #yazılımdokümantasyonu

Doxygen resmi sitesi. http://www.doxygen.nl/

Doxygen indirme linki. http://www.doxygen.nl/download.html

STM32f0 UART Gelen Veri Okuma MİkroC

172 Kişi Okudu

STM32f0 içerisinde seri port üzerinden gelen veriyi okunan değişkeni içerisinde tutar

int okunan;
 void main() {

    UART2_Init(9600); // 9600 hız protokolünde seri port iletişimi sağlanacağını gösteriyor
    Delay_ms(10);    // Ayarlar yapılırken 100ms bekleme
    UART_Set_Active(&UART2_Read, &UART2_Write, &UART2_Data_Ready, &UART2_Tx_Idle); // SeriPort iletişimi aktive ediyor. Okuma,yazma gibi özellikleri açar.

   do
   {

   if (UART2_data_ready())
   { // Eğer seri portdan okunan veri varsa.
   
     okunan = Uart2_read(); 

  }

}while(1);


}

Visual Studio Faydalı Kısa Yollar

103 Kişi Okudu

Severek kullandığım kısa yolları buraya eklemek istiyorum;

Birinci sırayı yazmış olduğumuz kodları otomatik olarak sıralayan kısa yola ayırdık;

CTRL +  K + D

2-) Yazılan Kodun referanslarını arayıp bulan kısayolumuz;

CTRL + F12

3-) Yazılan Kodları Derleyen Kısa Yol ;

CTRL + SHIFT + B

4-) Bütün Satırları Sakla

CTRL + M + A

5-) Seçili olan kodları yorum satırına al;

CTRL + K + C

6-) Seçili Kodları Yorum Satırından Çıkart;

CTRL + K + U

FFMPEG Komut Satırı Video İşleme Programı İle Videolara Logo Eklmek.

240 Kişi Okudu

FFMPEG elinizdeki videoların formatını dönüştürmek, kırpmak ve yazı eklemek gibi birçok faydalı işlem yapma yeteneğine sahip ücretsiz bir komut satırı programıdır. FFMPEG birçok video işleme programında yardımcı program olarak çalışmakta ve bu programın kütüphanelerinden istifade edilmektedir.

FFmpeg
https://ffmpeg.org/

Detaylı bilgi
https://tr.wikipedia.org/wiki/FFmpeg

FFmpeg in kullanıldığı projeler
https://trac.ffmpeg.org/wiki/Projects

FFmpeg Türkçe Kaynak
http://web.archive.org/web/20130310141744/http://tr.pardus-wiki.org/FFmpeg_Dok%C3%BCmantasyon

Öncelikle severek ilgilendiğim facebook sayfam Robot Ve Teknoloji sayfasında paylaştığım videolara logo eklemek için kullanmak üzere, çok hızlı ve etkili bir program arayışına girdim öyle şatafatlı programlarla uğraşmak istemedim alt tarafı bir logo eklemek için koca bir video işleme programı çalıştırmak dert, kurmak dert. Bu iş için özelleştirilmiş bir program bulamayınca başladım kütüphane araştırmaya kafaya koydum kendi video logo ekleme programımı yazacağım sadece bu işe yarasın yeter. Biraz araştırma sonucu ffmpeg programının bu iş için biçilmiş kaftan olduğunu gördüm. Windows toplu iş dosyası oluşturdum içerisine ffmpeg için gerekli komutları da yazınca problemim çözülmüş oldu.

 

3 ADC kanalından okunan veriyi seri port üzerinden gönderen yazılım.

106 Kişi Okudu

MikroC dili ile yazılan bir program. ADC A0 A1 A3 pinlerinden okunan verileri seri port üzerinden göndere program. Seri porttan okunan veri int tipinden gelmekte biz bu verileri string tipine dönüştürerek gönderiyoruz.
UART 2 kullanılmıştır bu pin A2 de TX pinidir.

void main()
 {
 char txt1[12],txt2[12],txt3[12];
 int adc1=0,adc2=0,adc3=0;
 
  GPIO_Digital_Output(&GPIOc_ODR, _GPIO_PINMASK_8) ;
  GPIO_Digital_Input(&GPIOa_IDR, _GPIO_PINMASK_0);

  ADC_Set_Input_Channel(_ADC_CHANNEL_ALL); // adc kanalında 1. pini kullanacağımız belirtilde A1
  ADC1_Init();// Adc Ayarları yapıldı
  UART2_Init(9600);                    // initialize UART2 module
  Delay_ms(100);

  UART_Set_Active(&UART2_Read, &UART2_Write, &UART2_Data_Ready, &UART2_Tx_Idle ); // Uart modüllerini aktive ediyor...


   do  {
           adc1=ADC1_Get_Sample(0);
           IntToStr(adc1,txt1);
           
           adc2=ADC1_Get_Sample(1);
           IntToStr(adc2,txt2);
           
           adc3=ADC1_Get_Sample(3);
           IntToStr(adc3,txt3);
           
           UART2_Write_Text("ADC-1=");
           UART2_Write_Text(txt1);
           
           UART2_Write_Text("ADC-2=");
           UART2_Write_Text(txt2);
           
           UART2_Write_Text("ADC-3=");
           UART2_Write_Text(txt3);
           
           UART2_Write(13);
           UART2_Write(10);
           Delay_ms(500);

  }  while (1) ;
  
}

Java Dosya Klasör Yolu Öğrenme

259 Kişi Okudu

Aşağıda bulunan kod lar çalıştırıldığı zaman bilinmeyen bir bilgisayar üzerinde dosya dizini ulaşma veya dosya kaydetme işlemleri gerçekleştirilir.

public class pc_folder {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println("İşletim Sisitemi		     :"+System.getProperty("os.name"));
		System.out.println("Kullanıcı Adı   		     :"+System.getProperty("user.name")); 		
		System.out.println("Kullanıcı Adı Ev Dizini          :"+System.getProperty("user.home"));
		System.out.println("Java Programını Çalıştığı Dizin  :"+System.getProperty("user.dir"));

		
		
	}

}


Seri Porttan Okunan Veriyi Mail Gönderme

110 Kişi Okudu

Aşağıdaki kodlar sayesinden seri port üzerinden veri okuyup okunan veri mail olarak gönderilmektedir.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import gnu.io.CommPortIdentifier; 
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent; 
import gnu.io.SerialPortEventListener; 
import java.util.Enumeration;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import com.sun.corba.se.spi.orbutil.fsm.Input;


public class SerialTest implements SerialPortEventListener {
	SerialPort serialPort;
        /** The port we're normally going to use. */
	private static final String PORT_NAMES[] = { "COM2", // Windows
};
	/**
	* A BufferedReader which will be fed by a InputStreamReader 
	* converting the bytes into characters 
	* making the displayed results codepage independent
	*/
	private BufferedReader input;
	
	public static String a;
	/** The output stream to the port */
	private OutputStream output;
	/** Milliseconds to block while waiting for port open */
	private static final int TIME_OUT = 2000;
	/** Default bits per second for COM port. */
	private static final int DATA_RATE = 9600;

	public void initialize() {

		CommPortIdentifier portId = null;
		Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();

		//First, Find an instance of serial port as set in PORT_NAMES.
		while (portEnum.hasMoreElements()) {
			CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
			
			for (String portName : PORT_NAMES) {
				
				if (currPortId.getName().equals(portName))
				{
					portId = currPortId;
					System.out.println(currPortId.getName());
					break;
				}
			}
		}
		if (portId == null) {
			System.out.println("Could not find COM port.");
			return;
		}

		try {
			// open serial port, and use class name for the appName.
			serialPort = (SerialPort) portId.open(this.getClass().getName(),
					TIME_OUT);

			// set port parameters
			serialPort.setSerialPortParams(DATA_RATE,
					SerialPort.DATABITS_8,
					SerialPort.STOPBITS_1,
					SerialPort.PARITY_NONE);

			// open the streams
			input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
			output = serialPort.getOutputStream();

			// add event listeners
			serialPort.addEventListener(this);
			serialPort.notifyOnDataAvailable(true);
		} catch (Exception e) {
			System.err.println(e.toString());
		}
	}

	/**
	 * This should be called when you stop using the port.
	 * This will prevent port locking on platforms like Linux.
	 */
	public synchronized void close() {
		if (serialPort != null) {
			serialPort.removeEventListener();
			serialPort.close();
		}
	}

	/**
	 * Handle an event on the serial port. Read the data and print it.
	 */
	public synchronized void serialEvent(SerialPortEvent oEvent) {
		
		if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
			try {
				String inputLine=input.readLine();
				System.out.println(inputLine);
				
				char[] gelen = (char[]) inputLine.toCharArray();				
				for (int i=0 ; i<gelen.length;i++ ){="" output.write(gelen[i]);="" }="" gonder("civan.ahmetyasin@gmail.com",inputline,"sensör="" algılandı");="" system.out.println("mail="" gönderildi");="" a="inputLine;" catch="" (exception="" e)="" {="" system.err.println(e.tostring());="" ignore="" all="" the="" other="" eventtypes,="" but="" you="" should="" consider="" ones.="" private="" static="" void="" gonder(string="" tomail,="" string="" note,="" ad){="" final="" username=" Mail Gönderecek Mail Adres " ;="" password=" Sizin Mail Adresinizin Şifresi " properties="" props="new" properties();="" props.put("mail.smtp.auth",="" "true");="" props.put("mail.smtp.starttls.enable",="" props.put("mail.smtp.host",="" "smtp.gmail.com");="" props.put("mail.smtp.port",="" "587");="" session="" new="" javax.mail.authenticator()="" protected="" passwordauthentication="" getpasswordauthentication()="" return="" passwordauthentication(username,="" password);="" });="" try="" message="" mimemessage(session);="" message.setfrom(new="" internetaddress("="" info@microsoft.com"));="" message.setrecipients(message.recipienttype.to,internetaddress.parse(tomail));="" message.setsubject(ad);="" message.settext(note);="" transport.send(message);="" (messagingexception="" throw="" runtimeexception(e);="" public="" main(string[]="" args)="" throws="" exception="" serialtest="" main="new" serialtest();="" main.initialize();="" thread="" t="new" thread()="" run()="" following="" line="" will="" keep="" this="" app="" alive="" for="" 1000="" seconds,="" waiting="" events="" to="" occur="" and="" responding="" them="" (printing="" incoming="" messages="" console).="" {thread.sleep(1000000);}="" (interruptedexception="" ie)="" {}="" };="" t.start();="" system.out.println("started");="" <="" pre=""></gelen.length;i++>

Pid Duvar Takip Robotu (Wall Following Robot)

200 Kişi Okudu

 

PID algoritmasını net bir şekilde anlayabilmek için bir araç üzerine kurduğumuz mekatronik sistem ile sensörden aldığımız analog verilerin PID algoritması yardımıyla işleyerek bir kontrol düzeneği oluşturulmuştur. Oluşturulan bu iki tekerlekli mekatronik araç duvara belirlenen referans konumunu koruması için PID algoritmasıyla stabilizasyonu sağlanmıştır.

PID kontrolörler endüstride pek çok süreci kontrol etmek için anlaşılması ve kullanımı kolay bir kontrol yapısı olduğundan çok sık kullanılmaktadır. PID kontrolör parametreleri tarafımızca deneme yanılma yöntemiyle ayarlanmıştır.

SENSÖR :

Sharp GP2Y0A21YK Kızılötesi Sensör 10cm den kısa ve  80 cm den uzak mesafeleri algılayamaz. Bu mesafeler arasında analog ölçümler yapabilir. Tepkime süresi 39ms’dir. Sistemden çektiği akım 30 mA’dir. Yazılımsal olarak bize 10 cm le 80 cm arasını 3.3 volta dağılım gösterecek şekilde vermektedir.

pid robot

 

 

Java Resim Üzerine Yazı Yazma

217 Kişi Okudu
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;

public class res {
public static void main(String[] args) throws IOException {

int a = 20, b=40,c=0; // değişkenlerin tanımlanması
Image resim = new ImageIcon("C:\\Users\\civan\\Desktop\\dene.jpg").getImage(); // Konumu belirlenen resimin çekilmesi
BufferedImage bufferedImage = ImageIO.read(new File("C:\\Users\\civan\\Desktop\\dene.jpg")); // resim buffera yazıldı
BufferedImage scaledBI = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), BufferedImage.TYPE_INT_RGB); // bufferda resim tipi belirlendi
Graphics2D g = scaledBI.createGraphics(); // resmin üzerinde 2 boyutlu işlem yapılacak
g.setComposite(AlphaComposite.Src); // resim tarandı
g.drawImage(resim, 5, 5, bufferedImage.getWidth(), bufferedImage.getHeight(), null);
Font font= new Font("SansSerif ", Font.BOLD, 25); //yazılacak yazı tipi, büyüklüğü belirlendi
g.setFont(font); //belirlenen font g ye aktarıldı

do {
do {

Random rnd = new Random(); // rastgele bir sayı seçildi
int sayı = rnd.nextInt(33) + 1 ; // seçilen sayı 33 ile 1 arasında olsun
Color renk = new Color(sayı*1009000); // değerler dar bir aralıkta olduğu için istediğimiz sayı ile çarpıldı
g.setColor(renk); // renk parametresine aktarıldı
sayı=0; //sayı değeri 0landı
a=a+20; // a değeri 20 arttırıldı bu değer sütün bilgisidir ve yazıların alt alta yazılmasını sağlar
g.drawString("Deneme Yazısı",b,a);
System.out.println(a); // a değeri ekrana yazar
} while(a!=1000); // a değiri 1000 e ulaştığı zaman döndüden çıkar bu da alt alta 1000/20 den 50 defa yazı yazıldığını gösterir.

a=20; // a 20 ye eşitlendi sürekli artmasını önlemek için
b=b+300; // diğer sütüna kayar ve üstteki döngüye tekrar girer
c=c+1; // sağ doğru sütün arttırmak için kullanılır
}while(c!=4); // sağ doğur 4 sütün oluştuğunda çık.

System.out.println("Resim yazıldı"); // resime yazı yazıldı mesajı
g.dispose();
ImageIO.write(scaledBI, "jpg", new File("C:\\Users\\civan\\Desktop\\dene2.jpg")); // yeni resimi kaydet

}
}