W zasadzie pierwszy program GUI napisany w Javie. Prymitywny kalkulator.

Pobierz [calc.zip]
Metoda babilońska liczenia pierwiastków
Poniższy algorytm oblicza pierwiastek kwadratowy metodą babilońską. Metoda polega na:
1. Zgadnięciu jakiejś liczby, im bliżej prawdziwej wartości pierwiastka, tym lepiej; W poniższym przykładzie brana jest liczba dwukrotnie mniejsza od pierwiastkowanej;
2. Obliczeniu wartości dzielenia pierwiastkowana/”strzał”;
3. Wyznaczeniu średniej arytmetycznej z tych liczb i użycie jej jako kolejnego „strzału”;
4. Powtarzaniu pkt. 2-3; Rozstrzał pomiędzy tymi liczbami z każdą iteracją kurczy się, a średnia przybliża się do realnej wartości pierwiastka.
W poniższym kodzie matlab użytkownik podaje ilość iteracji, jaką ma wykonać program.
% Program obliczajacy wartosc pierwiastka kwadratowego metoda babilonska
% Autor: Aleksander Kaweczynski e.vt0.pl
% 2017-12-17
clc; clear all; close all; format compact;
a=input('Podaj liczbe, z ktorej policzyć pierwiastek: ');
b=a/2; % aktualny 'strzal';
n=input('Podaj ilosc iteracji (liczba calkowita >2)');
c=0; % dzielenie a/strzal
d=0; % srednia z obu
for i=1:n
c=a/b;
d=(b+c)/2;
b=d;
disp(['Iteracja nr ', int2str(i), ' wynik: ', num2str(b)]);
end
Zamieszczam również wersję w Javascript:
document.getElementById('calculatebabylon').onclick=function(){
var a = document.getElementById('babylonvalue').value;
var b=a/2; // aktualny 'strzal';
var n=10;
var c=0; // dzielenie a/strzal
var d=0; // srednia z obu
document.getElementById('babylonsquare').innerHTML = '';
for(var i=1;i<=n;++i) {
c=a/b;
d=(b+c)/2;
b=d;
document.getElementById('babylonsquare').innerHTML += 'Iteracja nr '+ i + ' wynik: ' + b +'<br />';
}
document.getElementById('babylonsquare').innerHTML += 'Faktyczna wartosc: ' + Math.sqrt(a);
};
P5.js – Drzewo
Inspiracja:
Kod źródłowy:
var angle = 3.14/5;
var proportion = 0.67;
var canvasWidth = 500;
var canvasHeight = 500;
function setup() {
var canvas = createCanvas(500, 500);
background(0,0,10);
colorMode(HSB);
frameRate(10);
}
function draw() {
angle = PI*(abs(mouseX % canvasWidth)/canvasWidth);
//proportion = 0.67;
proportion = ((abs(mouseY % canvasHeight)/2)/canvasHeight+0.5)*0.75;
background(0,0,10);
stroke(255);
translate(canvasWidth/2, canvasHeight);
branch(150, 1);
}
function branch(len, generation) {
strokeWeight(20/generation);
stroke(generation*10+100, 100, 100);
line(0, 0, 0, -len);
translate(0, -len);
if (len > 4) {
push();
rotate(angle+ randomGaussian(1)/30);
branch(len * proportion, generation+1);
pop();
push();
rotate(-angle + randomGaussian(1)/30);
branch(len * proportion, generation+1);
pop();
}
else
{
noFill();
ellipse(0,0,3);
}
}
Zachęcam do własnych prób.
Linki dot oscylatora Colpittsa, radia FM
http://www.rakon.com/component/docman/doc_download/234-single-transistor-crystal-oscillator-circuits
http://ue.pwr.wroc.pl/wyklad_w10/W14_Generatory.pdf
http://www.ue.pwr.wroc.pl/wyklad_I/ue1_modulatory_i_detektory.pdf
http://home.agh.edu.pl/~godek/instr_dFM.pdf
http://ep.com.pl/files/5107.pdf
http://zseii.edu.pl/archive/dydaktyka/elektronika/ue/07.html
Testy prędkości układów izolacji galwanicznej do przesyłu danych – ADuM1201ARZ-RL7 oraz HCPL2611
- ADuM1201ARZ-RL7 – spokojnie daje radę trzymać przyzwoity prostokąt przy niewielkim (o. 80ns) opóźnieniu. W praktyce daję radę przesyłać dane przez UART nawet do 921600. Wyższych prędkości transmisji nie testowałem. Poniżej pomiar z oscyloskopu. Przebieg żółty – wyjście; przebieg niebieski – wejście z generatora na układ. Zasilanie 5V z USB. Odsprzęganie zasilania 100nF. Wersji na 10Mbit nawet już nie testowałem.
2. HCPL2611 – też daje radę, z tym że nie miałem możliwości sprawdzić do deklarowanych 10MBit. Pomiary poniżej dla 1Mhz oraz 3MHz. Rezystor ograniczający prąd LED nadawczej – 330Ω, rezystor pull-up wyjścia – 220Ω.
Moje wnioski są takie, że do izolacji UART będę używał ADuM1201 – jego zastosowanie jest bardzo wygodne, i spełnia swoją rolę.
Czujnik koloru Parallax ColorPAL – obsługa w Arduino + wizualizacja koloru w Processing
Wyjście czujnika podpinamy pod pin nr 6 Arduino. Komunikacja serial: 115200. Dane są wysyłane w tej postaci:
RRRR;GGGG;BBBB;
gdzie RRRR – czterocyfrowa wartość koloru czerwonego 0-1023. itd.
Kod programu dla Arduino:
/* ColorPal Sensor Example for Arduino
Author: Martin Heermance, with some assistance from Gordon McComb
This program drives the Parallax ColorPAL color sensor and provides
serial RGB data in a format compatible with the PC-hosted
TCS230_ColorPAL_match.exe color matching program.
*/
#include <SoftwareSerial.h>
#define sio 6 // ColorPAL connected to pin 6
#define unused 255 // Non-existant pin # for SoftwareSerial
#define sioBaud 4800
// Received RGB values from ColorPAL
int red;
int grn;
int blu;
// Set up two software serials on the same pin.
SoftwareSerial serin(sio, unused);
SoftwareSerial serout(unused, sio);
void setup() {
delay(2000);
Serial.begin(115200);
reset(); // Send reset to ColorPal
serout.begin(sioBaud);
pinMode(sio, OUTPUT);
serout.print("=(00 $ m)!"); // Loop print values, see ColorPAL documentation
serout.end(); // Discontinue serial port for transmitting
pinMode(sio, INPUT);
serin.begin(sioBaud); // Set up serial port for receiving
}
void loop() {
readData();
}
// Reset ColorPAL; see ColorPAL documentation for sequence
void reset() {
delay(200);
pinMode(sio, OUTPUT);
digitalWrite(sio, LOW);
pinMode(sio, INPUT);
while (digitalRead(sio) != HIGH);
pinMode(sio, OUTPUT);
digitalWrite(sio, LOW);
delay(80);
pinMode(sio, INPUT);
delay(200);
}
void readData() {
char buffer[32];
if (serin.available() > 0) {
// Wait for a $ character, then read three 3 digit hex numbers
buffer[0] = serin.read();
if (buffer[0] == '$') {
for(int i = 0; i < 9; i++) {
while (serin.available() == 0); // Wait for next input character
buffer[i] = serin.read();
if (buffer[i] == '$') // Return early if $ character encountered
return;
}
parseAndPrint(buffer);
delay(10);
}
}
}
// Parse the hex data into integers
void parseAndPrint(char * data) {
sscanf (data, "%3x%3x%3x", &red, &grn, &blu); // Pull the R, G, and B values from the data string
char buffer[48]; // create a buffer
sprintf(buffer, "%4.4d;%4.4d;%4.4d;", red, grn, blu); //print the values into a buffer as formatted integers
Serial.println(buffer);
}
Program Processing wyświetla okno z narysowanym prostokątem w kolorze takim, jak pochodzi z czujnika. Trzeba było zmienić współczynniki kolorów. Mimo to, nadal wymagana jest kalibracja, której jak na razie nie przeprowadziłem. Program próbuje nawiązać połączenie z pierwszym portem szeregowym dostępnym na komputerze. Jeżeli masz więcej portów, trzeba zmienić kod programu.
Kod dla processing:
/**
* Color Variables (Homage to Albers).
*
* This example creates variables for colors that may be referred to
* in the program by a name, rather than a number.
*/
import processing.serial.*;
Serial myPort; // Create object from Serial class
String myString = null;
int lf = 10;
int val, red, green, blue; // Data received from the serial port
color inside = color(204, 102, 0);
void setup()
{
size(400, 400);
noStroke();
background(0, 0, 0);
String portName = Serial.list()[0];
myPort = new Serial(this, portName, 115200);
myPort.readStringUntil(lf);
}
void draw()
{
while (myPort.available() > 0) {
myString = myPort.readStringUntil(lf);
if (myString != null) {
//println(myString);
String[] list = split(myString, ';');
red = int(list[0])*2;
green = int(list[1])*2;
blue = int(list[2])/2;
background(0, 0, 0);
fill(255);
text(" red: "+red+"\n green: "+green+"\n blue: "+blue, 10, 20);
inside = color(red, green, blue);
fill(inside);
rect(100, 100, 200, 200);
}
}
}
Rejestr szeregowy wejść 74HC165 i Arduino + NES + SNES
Poniżej przykładowy kod do Arduino obsługujący rejestr szeregowy 74HC165. Jest to rejestr typu paraller In – serial Out – umożliwia odczyt stanów 8 wejść cyfrowych poprzez protokół SPI. Po drobnej modyfikacji kod może posłużyć do komunikacji z kontrolerami do gier Nintendo NES oraz SNES. Są one oparte o podobny układ CMOS 4021. Kontroler NES zawiera jeden rejestr, natomiast SNES – 2, co daje 16 bitów (nie wszystkie są wykorzystane). Ponieważ przyciski zwierają wejścia typu pull-up do masy, kontroler bez wciśniętych przycisków wysyła same jedynki. Jeżeli w naszym układzie wejście DATA złącza połączymy przez rezystor np. 1MΩ do masy, pozwoli to na wykrycie czy kontroler jest podpięty – niepodłączenie prześle same zera.
//Connect IC to the Arduino:
#define HC165CLK 3 //Pin 2 of 74HC165, CLK
#define HC165LD 4 //Pin 1 of 74HC165, SH/~LD
#define HC165D 5 //Pin 9 if 74HC165, Qh
void setup() {
Serial.begin(9600);
pinMode(HC165CLK, OUTPUT);
pinMode(HC165LD, OUTPUT);
pinMode(HC165D, INPUT);
}
void loop() {
Serial.println(hc165ReadByte(),2); //Print readout in binary format
delay(100);
}
byte hc165ReadByte(void){
byte data=0;
digitalWrite(HC165LD, LOW);
//delay(1);
digitalWrite(HC165LD, HIGH);
for(byte i=0; i<8;i++){
data = (data <<1) | (digitalRead(HC165D) & 1);
digitalWrite(HC165CLK, HIGH);
//delay(1);
digitalWrite(HC165CLK, LOW);
}
return data;
}
byte NESReadByte(void){
/*
* Bit order (from LSB to MSB):
* 0: A
* 1: B
* 2: Select
* 3: Start
* 4: Up
* 5: Down
* 6: Left
* 7: Right
*/
byte data=0;
digitalWrite(HC165LD, HIGH);
//delay(1);
digitalWrite(HC165LD, LOW);
for(byte i=0; i<8;i++){
data = (data <<1) | (digitalRead(HC165D) & 1);
digitalWrite(HC165CLK, HIGH);
//delay(1);
digitalWrite(HC165CLK, LOW);
}
return data;
}
uint16_t SNESReadByte(void){
/*
* Bit order (from LSB to MSB):
* 0: B
* 1: Y
* 2: Select
* 3: Start
* 4: UP
* 5: DOWN
* 6: LEFT
* 7: RIGHT
* 8: A
* 9: X
* 10: L trigger
* 11: R trigger
* 12: ?
* 13: ?
* 14: ?
* 15: ?
*/
uint16_t data=0;
digitalWrite(HC165LD, HIGH);
//delay(1);
digitalWrite(HC165LD, LOW);
for(byte i=0; i<16;i++){
data = (data <<1) | (digitalRead(HC165D) & 1);
digitalWrite(HC165CLK, HIGH);
//delay(1);
digitalWrite(HC165CLK, LOW);
}
return data;
}
WordPress NextGEN Gallery nie działa z niektórymi motywami – obejście problemu
Objawy:
- Edytor wizualny w zapleczu nie działa;
- Opcje wtyczki NextGen nie pokazują się;
- Wszystko zaczyna działać po przełączeniu motywu na jeden z domyślnych, np. „tweenty-eleven”;
- W kodzie źródłowym strony możesz odnaleźć błędne linki do plików CSS i JS ze zduplikowaną nazwą domeny;
Wersjes: WordPress 4.7.3; NextGen: 2.2.1
Rozwiązanie:
Zakomentuj linię numer ok. 191 w pliku „wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/package.module.mvc.php”:
$retval = '/' . $retval;
Właściwe rozwiązanie:
Autor motywu powinien poprawnie ustawić:
current_theme_supports('soil-relative-urls') || current_theme_supports('root-relative-urls')
.
STM32 pierwsze kroki
Najtańsza płytka: stm32f103c8t6 (72MHz, USB device, 2 kwarce 8MHz i 32KHz, 64KB Flash, 20KB RAM, 2xADC; nie ma: DAC, FPU, EEPROM, )
Programator : ST-Link V2
Wyświetlanie Float przez printf:
Bug w STM32CubeMX w wersji 4.20.0, przy ustawieniu HSE – zewnętrznego kwarcu
W pliku main.c jest:
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI |RCC_OSCILLATORTYPE_HSE |RCC_OSCILLATORTYPE_LSE;
Powinno być:
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE |RCC_OSCILLATORTYPE_LSE;
źródło: https://community.st.com/thread/39340-bug-cubemx-v420-rcc-initialization-fail-with-hse-selected
Windows 7 – Nie aktualizuje się po reinstalacji
- Aktywuj system, lub upewnij się że jest aktywowany
- Wykonaj „Clean Boot”: msconfig.exe, selektywne uruchomienie, tylko usługi Windows
- Zainstaluj https://support.microsoft.com/en-us/kb/3020369
- Zainstaluj https://support.microsoft.com/en-us/kb/3172605
- Restart
Źródło: http://superuser.com/questions/951960/windows-7-sp1-windows-update-stuck-checking-for-updates










